Деплой Django-проекта на VDS-сервере с Ubuntu — это важный процесс, который требует внимательного выполнения всех шагов. От установки нужных версий Python и PostgreSQL до настройки Nginx и Supervisor — каждый этап играет ключевую роль в обеспечении стабильной работы вашего приложения. В этой статьи мы рассмотрим пошаговую инструкцию, которая поможет развернуть проект Django на удалённом сервере.
Шаги по деплою:
1. Установим git:
apt install git
2. Установим нужную версию Python 3 по нашей статье "Деплой бота на VDS-сервере с Ubuntu" (раздел установки Python)
3. Установим pip3, venv по нашей статье "Деплой бота на VDS-сервере с Ubuntu" (раздел установки pip3, venv)
4. Установим Postgres по статье "Как установить PostgreSQL" и создим БД по статье "Создание базы данных в PostgreSQL под Ubuntu". Пользователь, пароль и имя БД должны быть прописаны в секретном файле, как вариант в .env (требуется установка python-dotenv). файл с секретными данными должен быть импортирован в основной файл настроек Django. Данный файл ни в коем случае нельзя пушить в github, он должен быть прописан в gitignore. Если в проекте используется БД SQlite, то данный шаг можно пропустить.
5. Установим nginx:
apt install nginx
6. Установим supervisor:
apt install supervisor
7. Создадим нового пользователя по статье "Деплой бота на VDS-сервере с Ubuntu", раздел создание пользователя.
8. Войдем под новым пользователем.
9. Создадим ключ для нашего пользователя по статье "Как настроить SSH-ключ для GitHub". Создание ключа необходимо выполнить через sudo или дать необходимые права пользователю.
10. Склонируем репозиторий.
11. Проверим права на папку проекта:
ls -ld /home/User/<project_folder>
Если вы видите, что владелец папки отличается от созданного пользователя, используйте команду chown для изменения владельца:
sudo chown -R User:User /home/User/project_folder
Создадим venv по статье "Деплой бота на VDS-сервере с Ubuntu" (раздел установки venv). Виртуальную среду обязательно активируем, пример активации:
source .venv/bin/activate
12. Установим все зависимости:
pip3 install -r requirements.txt
13. Выполним команду:
python3 manage.py migrate
14. Выполним сборку статики:
python3 manage.py collectstatic
15. На этом шаге можно тестово запустить проект через стандартный сервер разработки, пример:
python3 manage.py runserver <ip>:8000
Или в режиме DEBUG = False со статикой, в настройках должно быть DEBUG = False.
python3 manage.py runserver <ip>:8000 --insecure
16. Ставим uvicorn:
pip3 install uvicorn
17. Создадим суперпользователя:
python3 manage.py createsuperuser
18. Проверим uvicorn с Django.
python3 -m uvicorn <name_app_core>.asgi:application --uds /tmp/name.sock
На этом шаге не должно быть ошибок. Если ошибки создаем папку mkdir ~/uvicorn_sockets, даем права chmod 777 ~/uvicorn_sockets и выполняем команду повторно.
19. Настроим supervisor:
sudo nano /etc/supervisor/supervisord.conf
И отредактируем конфигурацию:
[program:config_name]
command = /home/user/<folder_project>/venv/bin/python3 -m uvicorn <name_app_core>.asgi:application --uds /tmp/<name>.sock
directory = /home/user/<folder_project>
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log
autostart=true
autorestart=true
20. После добавления новой конфигурации необходимо перезагрузить Supervisor для применения изменений. Выполним следующие команды:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart all
21. Настроим nginx:
Создадим бэкап файла настроек по умолчанию:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default-backup
Переименуем текущий файл
sudo mv /etc/nginx/sites-available/default /etc/nginx/sites-available/my-domain
Или можем создать новый файл конфигурации командой:
sudo nano /etc/nginx/sites-available/my-domain
Пример конфигурации:
server {
listen 80;
server_name www.exemple.ru exemple.ru;
return 301 https://exemple.ru$request_uri;
}
server {
listen 80;
server_name exemple.ru;
# error_page 403 404 /path/to/your/error_page;
client_max_body_size 10M; # Ограничение максимального размера тела запроса
location /static/ {
alias /home/User/<project_folder>/staticfiles/;
}
location /media/ {
alias /home/User/<project_folder>/media/;
}
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://uvicorn_<your_name>;
}
}
upstream uvicorn_<your_name> {
server unix:/tmp/name.sock;
}
Если у нас есть символическая ссылка на старый файл в директории /etc/nginx/sites-enabled/, удалим её:
sudo rm /etc/nginx/sites-enabled/default
Теперь создим новую символическую ссылку с новым именем:
sudo ln -s /etc/nginx/sites-available/my-domain /etc/nginx/sites-enabled/my-domain
Чтобы применить изменения, перезапустим Nginx:
sudo systemctl restart nginx
После переименования и создания символической ссылки проверим, что Nginx правильно обрабатывает новый конфигурационный файл:
sudo nginx -t
Сайт скореее всего будет запускаться с ошибкой 403. Для решения этой проблемы выполним следующие:
22. Создадим группу nginxusers:
sudo groupadd nginxusers
23. Добавим нужных пользователей в группу:
sudo usermod -aG nginxusers User_1
sudo usermod -aG nginxusers User_2
24. Изменим владельца директории на группу nginxusers:
sudo chown -R :nginxusers /home/User_1/<project_folder>/media/
sudo chown -R :nginxusers /home/user_2/<project_folder>/media/
4. Установим права доступа:
sudo chmod -R 775 /home/User_1/<project_folder>/media/
sudo chmod -R 775 /home/User_2/<project_folder>/media/
Теперь в файле конфигурации nginx добавим нашу группу:
sudo nano /etc/nginx/nginx.conf
И добавим user www-data nginxusers, где www-data — это пользователь, под которым работает Nginx, а nginxusers - наша созданная группа.
Если у вас на сервере один сайт, то группу создавать не нужно, вместо пользователя www-data указаываем своего пользователя.
При любом изменение на сайте можно выполнить следующие команды:
Перезапуск supervisor:
service supervisor restart
Перезапуск nginx:
service nginx restart
В данной статье мы рассмотрели шаг за шагом простой и рабочий способ деплоя Django проекта на VDS сервере с использованием Ubuntu. Процесс включает установку необходимых компонентов, настройку базы данных, веб-сервера и управления процессами. Благодаря детализированным инструкциям можно легко адаптировать шаги под свои нужды и избежать распространённых ошибок. Правильная настройка окружения и сервера обеспечит стабильную работу приложения и его доступность для пользователей.