================== Deploying Django ================== Extra group and user ==================== Create a new group and user who will run the services:: sudo groupadd --system djangows sudo useradd --system --gid djangows --shell /bin/bash --home /var/www/djangows djwsuser Create the home directory stated in the above command and have it owned by the newly created user:: sudo mkdir -p /var/www/djangows sudo chown djwsuser /var/www/djangows/ As this user install the Django application in a virtual environment in her home directory:: sudo su - djwsuser virtualenv -p python3 In order to install the EOA Publication Platform there, consult :doc:`eoa15:install_venv`. Nginx and Gunicorn ================== This is based on the tutorial from `Digitalocean `_ and uses Gunicorn and Nginx as in the example, but SQLite as the database. Install nginx ------------- Simply install nginx with a package manager. On Debian Linux, for example:: sudo apt-get install nginx Install gunicorn in the virtual environment ------------------------------------------- `Gunicorn `_ is a Python WSGI HTTP Server and natively supports Django applications. Activate the virtual environment and install it with:: pip install gunicorn You can test the functionality by starting gunicorn with:: gunicorn eoapp.wsgi:application --bind 0.0.0.0:8000 Startup scripts --------------- Create a service file for the Django application called ``gunicorn.service`` and copy it to the directory ``/etc/systemd/system/``. An example file is at https://github.molgen.mpg.de/EditionOpenAccess/eoa-utilities/blob/master/gunicorn.service. Register the service with:: systemctl daemon-reload Start the service with:: sudo systemctl start gunicorn.service To enable at startup:: systemctl enable gunicorn.service Create virtual host in nginx ---------------------------- Create a new site called ``eoapp`` in ``/etc/nginx/sites-available``:: server { listen 80; server_name localhost; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /var/www/djangows/eoapp_ve/eoapp; } location / { include proxy_params; proxy_pass http://unix:/var/www/djangows/eoapp_ve/run/eoapp.sock; } } Disable the default site, enable the site and restart nginx:: sudo rm /etc/nginx/sites-enabled/default sudo ln -s /etc/nginx/sites-available/eoapp /etc/nginx/sites-enabled/ sudo service nginx restart Ready for production ==================== As final steps, to prepare the system for production, open the ``settings.py`` file and set:: Debug=False and check if the ``ALLOWED_HOSTS`` setting contains the addresses under which the application can be reached. Finally, activate the virtual environment and collect the static files in the place where nginx will find them:: python manage.py collectstatic Check the page https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ for further measures to secure the web service. Administrating Django --------------------- In order to perform administrative tasks, change to the directory of the Django application, activate the virtual environment and go ahead.