0% found this document useful (0 votes)
277 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
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
277 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
We take content rights seriously. If you suspect this is your content, claim it here.
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