Перейти до змісту

Розгортання у Production

Нижче наведено приклад схеми розгортання згенерованого сайту школи на VPS. Команди й шляхи потрібно адаптувати до конкретного сервера. Публічний лендінг фреймворку має окрему інфраструктуру; цей посібник його не розгортає.

Перед запуском налаштуйте DATABASES у згенерованому config/settings.py: генератор читає DB_ENGINE і DB_NAME, а параметри користувача, пароля й хоста для зовнішньої БД потрібно додати самостійно. Встановіть драйвер обраної СУБД і Gunicorn; передайте DEBUG=False, DJANGO_SECRET_KEY, ALLOWED_HOSTS та інші параметри через середовище. Після міграцій виконайте python manage.py setup_school_roles, python manage.py collectstatic --noinput і python manage.py check --deploy.


🏗️ Схема розгортання

  [Інтернет / Відвідувачі]
              │
              ▼ HTTPS (Порт 443)
       [Nginx Веб-сервер]
        ├── /static/  ──────> Директорія статичних файлів
        ├── /media/   ──────> Завантажені документи, меню та фото
        ├── /         ──────> React SPA (dist/index.html)
        └── /api/, /admin/ ─> Gunicorn (WSGI) ──> Django (Порт 8000)
                                                    │
                                                    ▼
                                            [Налаштована СУБД]

1. Налаштування Gunicorn як Systemd сервісу

Створіть файл конфігурації /etc/systemd/system/school.service:

[Unit]
Description=Gunicorn daemon for School Framework Website
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/my_school
ExecStart=/var/www/my_school/.venv/bin/gunicorn \
          --workers 3 \
          --bind 127.0.0.1:8000 \
          config.wsgi:application

[Install]
WantedBy=multi-user.target

Запустіть сервіс:

sudo systemctl daemon-reload
sudo systemctl start school
sudo systemctl enable school


2. Налаштування Nginx

Створіть конфігурацію сайту /etc/nginx/sites-available/school:

server {
    server_name school1.kyiv.ua www.school1.kyiv.ua;

    # Збірка React фронтенду
    root /var/www/my_school/frontend/dist;
    index index.html;

    client_max_body_size 50M;

    # Статичні файли Django (адмінка, стилі)
    location /static/ {
        alias /var/www/my_school/static/;
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # Завантажені документи (статути, меню, фото)
    location /media/ {
        alias /var/www/my_school/media/;
        expires 7d;
    }

    # API та Адмінка передаються на Gunicorn
    location ~ ^/(api|admin)/ {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # SPA маршрутизація для всіх інших сторінок
    location / {
        try_files $uri $uri/ /index.html;
    }
}

Після налаштування DNS і сертифіката перевірте HTTPS та лише потім відкривайте сайт назовні. Приклад команд для Certbot:

sudo ln -s /etc/nginx/sites-available/school /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

sudo certbot --nginx -d school1.kyiv.ua -d www.school1.kyiv.ua