0% found this document useful (0 votes)
232 views

Django Deployment Cheatsheet

This document provides instructions for deploying a Django project on a server. It describes setting up a virtualenv and installing Django and other dependencies. It also describes configuring Nginx as a reverse proxy for Gunicorn, setting the Django settings for production, and configuring systemd service files to run Gunicorn.

Uploaded by

José Cuevas
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
232 views

Django Deployment Cheatsheet

This document provides instructions for deploying a Django project on a server. It describes setting up a virtualenv and installing Django and other dependencies. It also describes configuring Nginx as a reverse proxy for Gunicorn, setting the Django settings for production, and configuring systemd service files to run Gunicorn.

Uploaded by

José Cuevas
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 1

Install some essential stuff DIRECTORY SCHEME

djangodeployment.com apt update


Program files /opt/$DJANGO_PROJECT
Virtualenv /opt/$DJANGO_PROJECT/venv
apt upgrade SQLite database /var/opt/$DJANGO_PROJECT/$DJANGO_PROJECT.db
apt install git virtualenv nginx-light python3-pillow Media files /var/opt/$DJANGO_PROJECT/media
Static files /var/cache/$DJANGO_PROJECT/static
Create user and group Log files /var/log/$DJANGO_PROJECT
Configuration /etc/opt/$DJANGO_PROJECT

adduser --system --home=/var/opt/$DJANGO_PROJECT \


--no-create-home --disabled-password --group \ COLLECT STATIC FILES AND MIGRATE
--shell=/bin/bash $DJANGO_USER
export PYTHONPATH=/etc/opt/$DJANGO_PROJECT
export DJANGO_SETTINGS_MODULE=settings
cd /opt/$DJANGO_PROJECT
Install Django files and virtualenv
./manage.py collectstatic
su $DJANGO_USER -c 'venv/bin/python manage.py migrate'
cd /opt
git clone $DJANGO_PROJECT_REPOSITORY
Configure nginx
virtualenv --system-site-packages \
    --python=$PYTHON_EXECUTABLE /opt/$DJANGO_PROJECT/venv
# Create /etc/nginx/sites-available/$DOMAIN:
source /opt/$DJANGO_PROJECT/venv/bin/activate
pip install -r /opt/$DJANGO_PROJECT/requirements.txt
server {
    listen 80;
Create data and log directories     listen [::]:80;
    server_name $DOMAIN www.$DOMAIN;
    root /var/www/$DOMAIN;
mkdir /var/opt/$DJANGO_PROJECT
    location / {
teehstaehc tnemyolpeD ognajD

chown $DJANGO_USER /var/opt/$DJANGO_PROJECT


        proxy_pass http://localhost:8000;
mkdir /var/log/$DJANGO_PROJECT
        proxy_set_header Host $http_host;
chown $DJANGO_USER /var/log/$DJANGO_PROJECT
    }
    location /static/ {
        alias /var/cache/$DJANGO_PROJECT/static/;
Setup production settings
    }
    location /media/ {
        alias /var/opt/$DJANGO_PROJECT/media/;
mkdir /etc/opt/$DJANGO_PROJECT
    }
chgrp $DJANGO_GROUP /etc/opt/$DJANGO_PROJECT
}
chmod 750 /etc/opt/$DJANGO_PROJECT
# Then create /etc/opt/$DJANGO_PROJECT/settings.py:
cd /etc/nginx/sites-enabled
ln -s ../sites-available/$DOMAIN .
from $DJANGO_PROJECT.settings import *
service nginx reload
DEBUG = False
ALLOWED_HOSTS = ['$DOMAIN', 'www.$DOMAIN'] SETUP GUNICORN
SECRET_KEY = '$SECRET_KEY'
DATABASES = { pip install gunicorn
    'default': { # Create /etc/systemd/system/$DJANGO_PROJECT.service:
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/var/opt/$DJANGO_PROJECT/$DJANGO_PROJECT.db', [Unit]
    } Description=$DJANGO_PROJECT
}
STATIC_ROOT = '/var/cache/$DJANGO_PROJECT/static/' [Service]
STATIC_URL = '/static/' User=$DJANGO_USER
MEDIA_ROOT = '/var/opt/$DJANGO_PROJECT/media/' Group=$DJANGO_GROUP
MEDIA_URL = '/media/' WorkingDirectory=/opt/$DJANGO_PROJECT
Environment="PYTHONPATH=/etc/opt/$DJANGO_PROJECT"
SERVER_EMAIL = 'noreply@$DOMAIN' Environment="DJANGO_SETTINGS_MODULE=settings"
DEFAULT_FROM_EMAIL = 'noreply@$DOMAIN' ExecStart=/opt/$DJANGO_PROJECT/venv/bin/gunicorn \
ADMINS = [    --workers=4 --log-file=/var/log/$DJANGO_PROJECT/gunicorn.log \
    ('$ADMIN_NAME', '$ADMIN_EMAIL_ADDRESS'),    --bind=127.0.0.1:8000 --bind=[::1]:8000 \
]    $DJANGO_PROJECT.wsgi:application
EMAIL_HOST = '$EMAIL_HOST'
EMAIL_HOST_USER = '$EMAIL_USER' [Install]
EMAIL_HOST_PASSWORD = '$EMAIL_PASSWORD' WantedBy=multi-user.target
EMAIL_PORT = 587
EMAIL_USE_TLS = True systemctl enable $DJANGO_PROJECT
service $DJANGO_PROJECT start

You might also like