Гид по технологиям

Установка и настройка Django с PostgreSQL, Gunicorn, Supervisor и Nginx на Ubuntu 16.04

• 7 min read • DevOps • Обновлено 24 Nov 2025
Django + PostgreSQL на Ubuntu 16.04 — настройка
Django + PostgreSQL на Ubuntu 16.04 — настройка

Важно: статья рассчитана на среду разработки или тестовый сервер. Для продакшена дополнительно понадобятся SSL, политики бэкапов и мониторинг.

Введение

Django — свободный фреймворк на Python с архитектурой MVT (Model-View-Template). Проект поддерживается Django Software Foundation (DSF). Django ускоряет разработку приложений и подходит для быстрых итераций (RAD).

В этом руководстве показано, как установить Django и настроить проект для работы с PostgreSQL на Ubuntu 16.04. Мы запустим Nginx как обратный прокси и используем Gunicorn в качестве WSGI-сервера; управление процессом Gunicorn будет осуществляться через Supervisor.

TL;DR — что вы получите

  • Рабочий Django-проект, подключённый к PostgreSQL.
  • Gunicorn, запущенный из виртуального окружения и управляемый Supervisor.
  • Nginx как фронтальный веб-сервер/обратный прокси для статических и медиа-файлов.

Требования

  • Ubuntu 16.04
  • Права root или sudo

Понятия в одной строке

  • Virtualenv: изолированное Python-окружение для пакетов проекта.
  • Gunicorn: WSGI HTTP сервер для приложений Python.
  • Supervisor: простой менеджер процессов для Linux.
  • Nginx: высокопроизводительный HTTP сервер и обратный прокси.

Шаг 1 — Установка Django, virtualenv и Gunicorn

Мы будем использовать python3 в качестве системного Python. Установите python3 и pip3 и обновите список пакетов:

ssh [email protected]  
sudo apt-get update

Установите системные пакеты для Python:

sudo apt-get install python3-pip python3-dev

Создайте символьную ссылку, чтобы иметь команду pip, и обновите pip:

ln -s /usr/bin/pip3 /usr/bin/pip  
pip install --upgrade pip

Установите необходимые пакеты через pip (Django, virtualenv, gunicorn):

pip install django virtualenv gunicorn

Установка Django, Gunicorn и Virtualenv через pip

Примечание: в средах с несколькими проектами всегда рекомендуется пользоваться virtualenv или pyenv + venv для каждого проекта.

Шаг 2 — Установка и настройка PostgreSQL

Установите PostgreSQL и заголовочные файлы для сборки драйверов:

sudo apt-get install postgresql postgresql-contrib libpq-dev

Установите адаптер psycopg2 в ваше Python-окружение. Если вы на системном Python, используйте sudo, иначе установите внутри виртуального окружения:

pip install psycopg2

Переключитесь на системного пользователя postgres и откройте psql:

su - postgres  
psql

Задайте пароль для пользователя postgres:

\password postgres  
Enter new password:

Создайте базу данных и роль для проекта (в примере база django_db, роль python_dev):

CREATE USER python_dev WITH PASSWORD 'aqwe123';  
CREATE DATABASE django_db OWNER python_dev;

Проверьте список баз и ролей:

\list

Конфигурация PostgreSQL для Django.

Совет: вместо простого пароля используйте сильную фразу и храните её в менеджере секретов или в environment-переменных.

Шаг 3 — Создание нового Django-проекта

В этом примере проект будет запускаться под обычным пользователем natsume (не root). Вы можете выбрать другое имя пользователя.

Создание системного пользователя

useradd -m -s /bin/bash natsume  
passwd natsume
  • -m: автоматически создаёт домашний каталог.
  • -s: задаёт оболочку по умолчанию.

Создание виртуального окружения и установка зависимостей

Входим под пользователем natsume:

su - natsume

Создаём каталог проекта и виртуальное окружение с использованием python3:

mkdir myproject  
virtualenv --python=python3 myproject/

Активируем окружение и устанавливаем Django, gunicorn и psycopg2:

cd myproject/  
source bin/activate

pip install django gunicorn psycopg2

Настройка виртуального окружения (virtualenv) для Django

Создание проекта и подключение PostgreSQL

Создайте проект hello_django:

django-admin startproject hello_django

Перейдите в директорию проекта и откройте файл настроек hello_django/settings.py . Отредактируйте раздел DATABASES примерно так:

        'ENGINE': 'django.db.backends.postgresql_psycopg2',  
        'NAME': 'django_db',  
        'USER': 'python_dev',  
        'PASSWORD': 'aqwe123',  
        'HOST': 'localhost',  
        'PORT': '',

В конце settings.py добавьте STATIC_ROOT, чтобы collectstatic складывал файлы статики в одно место:

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

Сохраните изменения и выполните миграции, создайте суперпользователя и соберите статические файлы:

python manage.py migrate  
python manage.py createsuperuser  
python manage.py collectstatic

Миграция базы данных Django в PostgreSQL

Проверьте запуск dev-сервера:

python manage.py runserver 0.0.0.0:8080

Откройте в браузере http://:8080 (пример: http://192.168.1.115:8080). На успешной установке вы увидите стандартную стартовую страницу Django. Остановите сервер Ctrl+C.

Важно: dev-сервер (runserver) предназначен только для разработки, а не для продакшена.

Шаг 4 — Конфигурация Gunicorn

Gunicorn (Green Unicorn) — WSGI HTTP сервер для Python. Он прост и хорошо подходит для развёртывания Django-приложений.

Активируйте виртуальное окружение:

cd ~/myproject/  
source bin/activate

Создайте стартовый скрипт bin/gunicorn_start и сделайте его исполняемым. Вставьте в него конфигурацию (приведена ниже):

#!/bin/bash  
   
# Project Name  
NAME="hello_django"                        
  
# Django Project Directory  
DJANGODIR=/home/natsume/myproject/hello_django           
  
# Run gunicorn on the socket file  
SOCKFILE=/home/natsume/myproject/hello_django/run/gunicorn.sock  
   
# Gunicorn running as user and group  
USER=natsume  
GROUP=natsume  
   
# Workers  
NUM_WORKERS=3  
   
#Module Setting  
#replace hello_django with your project name  
DJANGO_SETTINGS_MODULE=hello_django.settings  
DJANGO_WSGI_MODULE=hello_django.wsgi  
   
echo "Starting $NAME as `whoami`"  
   
# Activate the virtual environment  
cd $DJANGODIR  
source ../bin/activate  
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE  
export PYTHONPATH=$DJANGODIR:$PYTHONPATH  
   
# Create the run directory if it doesn't exist  
RUNDIR=$(dirname $SOCKFILE)  
test -d $RUNDIR || mkdir -p $RUNDIR  
   
# Start your Django Unicorn  
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)  
exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application \  
--name $NAME \  
--workers $NUM_WORKERS \  
--user=$USER --group=$GROUP \  
--bind=unix:$SOCKFILE \  
--log-level=debug \  
--log-file=-

Сделайте файл исполняемым:

chmod u+x bin/gunicorn_start

Совет по количеству воркеров: используйте правило “2 × cores + 1” как отправную точку и корректируйте под нагрузку.

Шаг 5 — Установка и настройка Supervisor

Supervisor управляет и перезапускает процессы. Установим его из репозитория Ubuntu:

sudo apt-get install supervisor

Создайте конфигурацию для проекта в /etc/supervisor/conf.d/hello-django.conf :

[program:hello_django]  
command = sh /home/natsume/myproject/bin/gunicorn_start  
user = natsume  
stdout_logfile = /home/natsume/myproject/logs/gunicorn_supervisor.log  
redirect_stderr = true  
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

Создайте каталоги для сокета и логов под пользователем natsume:

su - natsume  
  
# Directory for gunicorn sock file  
mkdir -p myproject/hello_django/run/  
  
# Directory and file for supervisor log files  
mkdir -p myproject/logs/  
touch myproject/logs/gunicorn_supervisor.log

Вернитесь к root и запустите supervisor:

exit  
systemctl start supervisor

Проверка состояния и просмотр логов:

supervisorctl  
tail -f hello_django

Запуск и мониторинг Supervisor

Примечание: если Supervisor не стартует, проверьте global-конфиги и права на исполняемый скрипт gunicorn_start.

Шаг 6 — Установка и настройка Nginx

Установите Nginx и создайте виртуальный хост для проекта:

sudo apt-get install nginx

Создайте файл /etc/nginx/sites-available/hello_django с конфигурацией:

# Django running with Gunicorn Sock file  
upstream hello_django_project {  
    server unix:/home/natsume/myproject/hello_django/run/gunicorn.sock fail_timeout=0;  
}  
   
server {  
   
    listen   80;  
    server_name www.django-nginx.com;  
   
    client_max_body_size 4G;  
   
    access_log /home/natsume/myproject/logs/nginx-access.log;  
    error_log /home/natsume/myproject/logs/nginx-error.log;  
   
    location /static/ {  
        alias   /home/natsume/myproject/hello_django/static/;  
    }  
   
    location /media/ {  
        alias   /home/natsume/myproject/hello_django/media/;  
    }  
   
    location / {  
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        proxy_set_header Host $http_host;  
        proxy_redirect off;  
   
    # Try to serve static files from nginx, no point in making an  
    # *application* server like Unicorn/Rainbows! serve static files.  
    if (!-f $request_filename) {  
        proxy_pass http://hello_django_project;  
        break;  
        }  
   
   
# Error pages  
    error_page 500 502 503 504 /500.html;  
    location = /500.html {  
        root /home/natsume/myproject/hello_django/static/;  
        }  
    }  
}

Активируйте сайт и проверьте конфигурацию Nginx:

ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/  
nginx -t

Если тест успешен, перезапустите Nginx:

systemctl restart nginx

Совет: для продакшен-домена добавьте SSL (Let’s Encrypt) и настройте HTTP → HTTPS редирект.

Шаг 7 — Проверка работы проекта

Откройте в браузере адрес виртуального хоста, например:

http://www.django-nginx.com/admin/

Вход в Django admin

После ввода учётных данных вы попадёте в админ-панель:

Панель администратора Django

Проверьте активно работающие сервисы и сокеты:

netstat -pl

Проверка запущенных сервисов (pid, порт, сокет)

Если все сервисы запущены, значит установка и базовая конфигурация успешны.

Дополнительные советы и лучшие практики

Безопасность

  • Настройте брандмауэр (ufw) и откройте только необходимые порты (80, 443, SSH).
  • Используйте HTTPS с действующим сертификатом (Let’s Encrypt).
  • Не храните пароли в открытом виде в settings.py — используйте environment-переменные или секретный менеджер.
  • Ограничьте права файлов и владельцев (процессы должны работать не под root).

Резервное копирование

  • Регулярно делайте дампы PostgreSQL (pg_dump/pg_basebackup) и храните их в удалённом хранилище.
  • Бэкапьте media и статические файлы.

Производительность

  • Настройте количество воркеров Gunicorn по формуле 2×CPU + 1 и корректируйте по метрикам.
  • Используйте кеш (Redis / Memcached) для снижения нагрузки на БД.

Диагностика и runbook для инцидентов

  1. Приложение недоступно по HTTP:
    • Проверить статус systemctl для nginx и supervisor: systemctl status nginx; systemctl status supervisor
    • Проверить логи nginx: /home/natsume/myproject/logs/nginx-error.log
    • Проверить логи Supervisor/Gunicorn: /home/natsume/myproject/logs/gunicorn_supervisor.log
  2. Gunicorn не запускается:
    • Проверить права на bin/gunicorn_start и наличие виртуального окружения.
    • Запустить скрипт вручную под пользователем natsume и посмотреть ошибки.
  3. Ошибки подключения к БД:
    • Проверьте параметры в settings.py и доступ postgres: psql -U python_dev -d django_db

Краткий rollback-план:

  • Откатить конфигурацию Nginx к предыдущей версии (если есть copy), рестарт nginx.
  • Перезапустить supervisor: supervisorctl restart hello_django
  • В крайнем случае временно включить Django dev server для восстановления доступности: python manage.py runserver 0.0.0.0:8080

Альтернативы и когда это не подходит

  • Если требуются асинхронные возможности (WebSockets), рассмотрите ASGI-серверы (uvicorn/daphne) и использование Channels.
  • Для небольших одностраничных приложений можно использовать Gunicorn + Nginx, но для высоконагруженных систем стоит смотреть в сторону контейнеризации (Docker + Kubernetes).

Миграция с Ubuntu 16.04

Ubuntu 16.04 уже старше — при переносе на 18.04/20.04 обратите внимание на версии Python, systemd, и возможные изменения в пакетах (pip, libpq-dev). Тестируйте все шаги в staging перед миграцией продакшена.

Критерии приёмки

  • Админ-панель Django доступна по указанному домену.
  • Gunicorn обслуживает сокет unix и управляется Supervisor.
  • Nginx отдаёт static и media файлы напрямую и проксирует остальные запросы к Gunicorn.
  • Логи и каталоги для сокета созданы и доступны под нужным пользователем.

Контроль качества — тесты приёмки

  • Проверить /admin/ — страница логина должна открываться.
  • Выполнить запрос к статическому файлу (например /static/admin/css/base.css) и убедиться, что Nginx отдаёт его без проксирования.
  • Остановить Supervisor и убедиться, что он перезапускает процесс.

Сниппеты и быстрые команды (чек-лист для развёртывания)

  • apt-get update && apt-get install python3-pip python3-dev libpq-dev postgresql nginx supervisor
  • pip install virtualenv
  • virtualenv –python=python3 myproject/
  • source myproject/bin/activate && pip install django gunicorn psycopg2
  • Настроить settings.py для PostgreSQL и STATIC_ROOT
  • Создать bin/gunicorn_start и /etc/supervisor/conf.d/hello-django.conf
  • ln -s /etc/nginx/sites-available/hello_django /etc/nginx/sites-enabled/
  • systemctl restart supervisor && systemctl restart nginx

1-строчный глоссарий

  • WSGI: интерфейс между веб-сервером и Python приложением.
  • SOCKFILE: unix-сокет, по которому Nginx общается с Gunicorn.

Роли и ответственность (чек-лист)

  • DevOps/Системный администратор: установка пакетов, настройка systemd/supervisor, SSL.
  • Разработчик: настройка settings.py, миграции, тесты приложения.
  • QA: проверка доступности, тесты API и статических ресурсов.

Итог

Вы получили пошаговое руководство по развёртыванию Django с PostgreSQL, Gunicorn, Supervisor и Nginx на Ubuntu 16.04. После выполнения всех шагов ваш проект будет работать через unix-сокет Gunicorn, управляемый Supervisor и проксируемый Nginx. Для продакшена добавьте HTTPS, систему бэкапов и мониторинг.

Ссылки

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро