Здравствуйте!
Хочу представить вам пошаговую инструкцию по деплою django проекта.
Сра��у скажу, что используя мою краткую инструкцию вы не поймете механику развертывания. По сути, это просто список команд для деплоя. Тут не будет никаких подробностей касательно работы UWSGI, NGINX и самого Django. Я просто помогу быстро добраться до цели, а цель у нас одна - задеплоить уже наконец этот **** проект!
(Инструкция тестировалась на VPS Ubuntu 20.04 с Django 3.2.8, python3.8, NGINX 1.18.0, UWSGI 2.0.20)
Заходим в консоль линукс сервера и вперед!
sudo apt update
sudo apt upgrade
sudo apt-get install nginx uwsgi
sudo apt-get install uwsgi-plugin-python3
Переходим в директорию /var
cd /var
Создаем себе внутри папку для дальнейшей работы
mkdir work
cd work
Создаем папку под статику и предоставляем пользователю www-data права на неё. (UWSGI и NGINX будут работать от лица www-data)
mkdir static
chown www-data /var/work/static
Проверим версию пайтона, установим пакет для вирт. окружения и создадим егоpython3 -V
sudo apt install python3.8-venv
python3 -m venv venv
Активируем окружение
. ./venv/bin/activate
pip install django (и другие или загрузите их позже из requirements.txt)
git clone https://github.com/nick_name/project.git (или переместите в текущую папку ваш проект любым другим способом)
(В инструкции я использую проект со стандартной архитектурой вида:
projectname/
...
manage.py
projectname/
...
settings.py
wsgi.py
...
)
Переходим в файл settings.py вашего проекта джанго и редактируем его.
Необходимо добавить ip вашего сервера в ALLOWED_HOSTS должно получиться что-то вроде ['1.1.1.1', '127.0.0.1']
добавить STATIC_ROOT = '/var/work/static'
Вернитесь в папку с manage.pycd /var/work/имя вашего проекта
Далее подготовим сам Django проект. Проведем миграции и соберем статику в папку, которую мы ранее создали в work.
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py collectstatic
python3 manage.py runserver
Если есть ошибка в проекте - устранить, если не хватает библиотек - установить через pip install
Если ошибок не возникло - ваш Django проект в порядке, если нет, то исправляйте ошибки в нем. Советую сверить ту ли версию Django вы поставили себе на сервер.
Близимся к концу. Виртуальное окружение можно выключить. Сделаем это командой:
deactivate
Далее откроем файл nginx.conf и проверим в нем параметр user, он должен быть www-data.
user www-data;
nano /etc/nginx/nginx.conf
далее создадим и заполним конфиг my_app (для nginx)
nano /etc/nginx/sites-enabled/my_app
server {
listen 81;
server_tokens off;
server_name 0.0.0.0;
location / {
include uwsgi_params;
uwsgi_pass unix:///run/uwsgi/app/myapp/socket;
}
location /static/ {
alias /var/work/static/;
}
}
далее создадим и заполним конфиг myapp.ini (для uwsgi)
[uwsgi]
chdir = /var/work/projectname
env = DJANGO_SETTINGS_MODULE = projectname.settings
wsgi-file = /var/work/projectname/projectname/wsgi.py
workers = 1
max-requests = 5000
plugins = python3
home = /var/work/venv
pythonpath = /var/work/venv/lib/python3.8/site-packages
processes = 5
threads = 2
master = true
die-on-term = true
socket = /run/uwsgi/app/myapp/socket
chmod-socket = 664
vacuum = true
uid = www-data
gui = www-data
!!! Я использую python3 (3.8) если у вас другой, то измените пункты, связанные с python
Или используйте версию 3.8)) !!!
projectname ВЕЗДЕ измените на имя вашего проекта
далее перезапустим uwsgi и nginx
service uwsgi restart
service nginx restart
После перезапуска nginx и uwsgi сайт должен быть доступен по адресу http://IP вашего сервера:81
ГДЕ СМОТРЕТЬ ЛОГИ?
/var/log/nginx
/var/log/uwsgi/app
Надеюсь, это вам помогло. В интернете ничего из того, что я смотрел не работало "из коробки". Каждый раз возникала ошибка то тут, то там.. Ну или это была огромная "простыня" текста, читать которую было слишком долго. Да и после стольких ошибок не было доверия к тем или иным туториалам.
Составив эту инструкцию я создал несколько новых серверов на Ubuntu и протестировал каждый шаг.
Буду рад комментариям. Пишите, если у вас возникли какие-то ошибки!