First, make sure the OS is fully up to date:
apt update
apt upgradeNow install the system dependences:
apt install apache2 apache2-dev libapache2-mod-wsgi-py3 libpq-dev postgresql postgresql-contrib git python3 python3-dev python3-pippython3, python3-dev, python3-pip and libpq-dev are required to install Django and other python dependences.
apache2 is the web server and apache2-dev libapache2-mod-wsgi-py3 are used to connect apache to the Django app.
postgresql is the database and postgresql-contrib is a supporting package.
We have to install some supporting packages:
pip3 install virtualenvvirtualenv is a python package allows the for the creation of self contained python environments and needs to be installed globally.
The production project uses a Postgres database for its main data store. Lets set up the data base.
Lets get into the postres command line:
sudo -u postgres psqlNow that we are in postgres we need to make a user and a database. Replace <DB PASSWORD> with a string we will use for the password, and keep this for latter it needs to be in the local_setting.py file. A random string 30-40 characters long is recommended.
CREATE DATABASE bytedev;
CREATE USER bytedev WITH PASSWORD '<DB PASSWORD>';
GRANT ALL PRIVILEGES ON DATABASE bytedev TO bytedev;
\qNow that we have the all the system packages we need, lets get the project and configure it.
First, lets move to the /var/www/ directory where the project will live.
cd /var/wwwNow, lets clone the project and move into its directory.
git clone [email protected]:ByteAcademyCo/gitwrapper.git
cd gitwrapperAnd set up project. The setup.sh script will create the virtual environment, download any git sub-modules and install python and NodeJS packages.
source scripts/setup.shIf you get an error during the python packages install, run the following:
pip3 install setuptools==45The project does not come with the file project/settings/local_settings.py. You will need to create this file and give it the correct settings.
First, lets open the file in a text editor:
nano project/settings/local_settings.py
Here is a sample for production, please replace:
<GITHUB_SECRET>with the OAUTH client secret token for production<GITHUB_INVITE_TOKEN>with a github user token that can be used to invite user to organizations.<DJNAGO_KEY>with a long random string (50 characters)<DB_PASSORD>with the password you used to create the postgres user<SMPT2GO_PASSWORD>with the password for the SMTP2GO user
GITHUB = dict(
CLIENT_ID='3e6868531eec10b37d73',
CLIENT_SECRET='<GITHUB_SECRET>',
invite_token='<GITHUB_INVITE_TOKEN>'
TEST_DISTRIBUTOR_ORG = "ByteTesting",
DISTRIBUTOR_ORG = "ByteExercises",
SOURCE_ORG = "ByteAcademyCo",
)
DATADUMP_URL = "http://blah.staging.bytedev.co:3000/master_dump"
API_KEYS = 'apisNeedKeys'
SECRET_KEY = '<DJNAGO_KEY>'
## DATABASES['default'] is overridden in dev.py settings
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'bytedev',
'USER': 'bytedev',
'PASSWORD': '<DB_PASSWORD>',
'HOST': '127.0.0.1',
'PORT': '',
}
}
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail.smtp2go.com'
EMAIL_PORT = 465
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = '<SMPT2GO_PASSWORD>'
EMAIL_USE_SSL = True
EMAIL_FEEDBACK_ADDRESS = ['[email protected]', '[email protected]', '[email protected]']
NODEPORT='3000'Now we can set up the migrate the project. Django will setup the database schema.
./manage.py migrateWe will use the Apache we server a proxy to Django and NodeJS and to server the static files.
Lets enable the Apache modules need for the web socket proxy
a2enmod expiresNow lets configure apache. First remove the default config:
rm /etc/apache2/sites-enabled/000-default.confLets add the down message config:
nano /etc/apache2/sites-available/000-down-bytedev.co.confContents
<VirtualHost *:80>
ServerName bytedev.co
DocumentRoot /var/www/gitwrapper/static/error_pages
</VirtualHost>Lets add out apache config file, open your text editor:
nano /etc/apache2/sites-available/000-bytedev.co.confHere is the apache config file, no editing should be needed:
<VirtualHost *:80>
ServerName www.bytedev.co
Redirect permanent / http://bytedev.co/
</VirtualHost>
<VirtualHost *:80>
# ServerAdmin [email protected]
ServerName bytedev.co
<IfModule mod_expires.c>
<FilesMatch "\.(jpe?g|png|gif|js|css)$">
ExpiresActive On
ExpiresDefault "access plus 1 week"
</FilesMatch>
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/bytedev.co-error.log
CustomLog ${APACHE_LOG_DIR}/bytedev.co-access.log combined
Alias /static /var/www/gitwrapper/staticfiles
WSGIDaemonProcess gitwrapper python-path=/var/www/gitwrapper python-home=/var/www/gitwrapper/env
WSGIProcessGroup gitwrapper
WSGIScriptAlias / /var/www/gitwrapper/project/wsgi.py
</VirtualHost>Nows lets enable the new config
ln -s /etc/apache2/sites-available/000-bytedev.co.conf /etc/apache2/sites-enabled/.
service apache2 reload