8.2.3 Розгортання та налаштування продакшн-сервера для Django
Django — популярний фреймворк на Python для розробки безпечних і масштабованих веб-додатків. У цьому посібнику ми покроково розгорнемо сервер на Ubuntu та налаштуємо його для продакшн-розміщення Django-проєкту.
Цей посібник допоможе вам розгорнути Django-проєкт на Ubuntu-сервері, використовуючи Gunicorn, Nginx і PostgreSQL — типову конфігурацію для продакшн-середовищ.
Перед початком варто переконатися, що:
- наявність Віртуального або Виділеного сервера
- наявність sudo або root-доступу
- встановлений Django-проєкт
- замовлене Доменне ім'я
Налаштування сервера та залежностей
Оновлення системи та встановлення залежностей
Для початку підключіться до сервера по SSH та оновіть системні пакети:
sudo apt update && sudo apt upgrade -y
Потім встановіть Python 3, pip, venv, Git, Nginx та інші базові утиліти:
sudo apt install python3 python3-pip python3-venv git nginx curl -y
Встановлення python3-venv обов’язкове для створення віртуального середовища. Без нього команда python3 -m venv працювати не буде.
Налаштування веб-сервера Nginx
Nginx буде обробляти вхідні запити і проксіювати їх в Gunicorn:
sudo nano /etc/nginx/sites-available/projectname
server {
listen 80;
server_name yourdomain.com;
location = /static/ {
root /var/www/projectname;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
Створіть симлінк і перевірте конфігурацію:
sudo ln -s /etc/nginx/sites-available/projectname /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Переконайтеся, що в settings.py змінна ALLOWED_HOSTS включає ваш домен або IP-адресу, інакше Django заблокує вхідні з’єднання.
Встановлення та налаштування Gunicorn
Gunicorn — це WSGI-сервер, через який Django працює в продакшн-середовищі:
pip install gunicorn
gunicorn --workers 3 --bind unix:/run/gunicorn.sock projectname.wsgi:application
Для постійної роботи Gunicorn створимо systemd-сервіс:
sudo nano /etc/systemd/system/gunicorn.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/var/www/projectname
ExecStart=/var/www/projectname/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock projectname.wsgi:application
[Install]
WantedBy=multi-user.target
Активуйте сервіс:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
Встановлення SSL (Let’s Encrypt)
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com
Сертифікати Let’s Encrypt автоматично оновлюються кожні 90 днів.
Безпека та оптимізація
Налаштування UFW (Uncomplicated Firewall)
Активуємо брандмауер:
sudo ufw allow 'Nginx Full'
sudo ufw enable
Налаштування iptables
Для розширеного захисту можна використовувати iptables:
# Встановлення iptables-persistent для збереження правил
sudo apt install iptables-persistent -y
# Базові правила безпеки
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Блокування всього іншого вхідного трафіку
sudo iptables -A INPUT -j DROP
# Збереження правил
sudo netfilter-persistent save
Також рекомендується:
- Встановити fail2ban для захисту від брутфорса
- Вимкнути DEBUG в продакшені
- Використовувати .env для зберігання чутливих даних
- Налаштувати регулярне резервне копіювання
- Обмежити спроби входу в адмінку Django
Налаштування Django-проєкту
Клонування Django-проєкту
Припустимо, ваш проєкт розміщений в репозиторії GitHub. Переходимо в директорію, де Ви плануєте розмістити Ваш проєкт:
cd /var/www/
sudo git clone https://github.com/username/projectname.git
sudo chown -R $USER:$USER projectname
cd projectname
Замініть https://github.com/username/projectname.git на ваш власний репозиторій. Переконайтеся, що структура проєкту включає файл manage.py.
Налаштування віртуального середовища
Віртуальне середовище дозволяє ізолювати залежності проєкту:
python3 -m venv venv
source venv/bin/activate
Після активації встановіть залежності з requirements.txt:
pip install --upgrade pip
pip install -r requirements.txt
Налаштування бази даних
Якщо проєкт використовує PostgreSQL, встановимо необхідні пакети і створимо користувача та базу даних:
sudo apt install postgresql postgresql-contrib libpq-dev -y
sudo -u postgres createuser myuser --interactive
sudo -u postgres createdb mydb
Не забудьте задати надійний пароль для бази даних. Пароль буде використовуватися в settings.py.
Відкрийте settings.py і пропишіть дані підключення:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'your_password',
'HOST': 'localhost',
'PORT': '',
}
}
Виконання міграцій і збірка статики
Тепер підготуємо базу і зберемо статичні файли:
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --noinput
Команда collectstatic збирає всі CSS, JS та зображення в папку staticfiles, щоб Nginx міг роздавати їх напряму.
Після всіх виконаних дій ви маєте в браузері побачити сторінку щойно створеного сайту Django: