Вступление
Django – это Python Python с открытым исходным кодом, которая может использоваться для развертывания приложений Python. Он поставляется с сервером разработки для проверки вашего кода Python в локальной системе. Если вы хотите развернуть приложение Python в производственной среде, вам понадобится мощный и более безопасный веб-сервер. В этом случае вы можете использовать Gunicorn в качестве HTTP-сервера WSGI и NGINX в качестве прокси-сервера, чтобы надежно обслуживать ваше приложение с помощью надежной производительности.
Предварительные условия
- Сервер работает Ubuntu 20.04.
- Действительное доменное имя, указанное на вашем сервере IP.
- Корневой пароль настроен на вашем сервере.
Установите необходимые пакеты
Во-первых, вам нужно будет установить nginx и другие зависимости Python на вашем сервере. Вы можете установить все пакеты со следующей командой:
apt-get install python3-pip python3-dev libpq-dev curl nginx -y
Как только все пакеты установлены, запустите службу Nginx и включите его на работу с перезагрузкой системы:
SystemCtl Запускайте Nginx.
SystemCTL Включить Nginx.
Установить и настроить PostgreSQL
Далее вам нужно будет установить PostgreSQL Server на свой сервер. Вы можете установить его со следующей командой:
apt-get install postgresql postgresql-appy -y
После установки войдите в Shell в PostgreSQL со следующей командой:
su - postgres psql
Далее создайте базу данных и пользователь для Django со следующей командой:
CREATE DATABASE djangodb; CREATE USER djangouser WITH PASSWORD 'password';
Далее дайте некоторые необходимые роли со следующей командой:
ALTER ROLE djangouser SET client_encoding TO 'utf8'; ALTER ROLE djangouser SET default_transaction_isolation TO 'read committed'; ALTER ROLE djangouser SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE djangodb TO djangouser;
Затем выйдите из Shell PostgreSQL, используя следующую команду:
\ qexit.
Создать виртуальную среду Python
Далее вам нужно будет создать виртуальную среду Python для проекта Django.
Во-первых, обновить пакет PIP до последней версии:
pip3 install --upgrade pip
Затем установите пакет VirtualenV, используя следующую команду:
pip3 install virtualenv
Затем создайте каталог для проекта Django, используя команду ниже:
mkdir ~/django_project
Затем измените каталог на Django_Project и создайте виртуальную среду Django:
cd ~/django_project virtualenv djangoenv
Далее активируйте виртуальную среду Django:
source djangoenv/bin/activate
Затем установите Django, Gunicorn и другие пакеты со следующей командой:
pip install django gunicorn psycopg2-binary
Установите и настройте Django
Далее запустите следующую команду для создания проекта Django:
django-admin.py startproject django_project ~/django_project
Далее отредактируйте настройки .py и определите настройки базы данных:
nano ~/django_project/django_project/settings.py
Найти и изменить следующие строки:
ALLOWED_HOSTS = ['django.example.com', 'localhost'] DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'djangodb', 'USER': 'djangouser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } STATIC_URL = '/static/' import os STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
Сохранить и закрыть файл, затем перенесите начальную схему базы данных в базу данных PostgreSQL:
./manage.py makemigrations ./manage.py migrate
Далее создайте пользователь администратора со следующей командой:
./manage.py createsuperuser
Установите имя пользователя и пароль вашего администратора, как показано ниже:
Username (leave blank to use 'root'): admin Email address: admin@example.com Password: Password (again): Superuser created successfully.
Далее собирайте все статическое содержимое в каталог
./manage.py collectstatic
Проверьте сервер развития Django
Теперь запустите сервер разработки Django, используя следующую команду:
./manage.py runserver 0.0.0.0:8000
Вы должны увидеть следующий вывод:
Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). June 22, 2021 - 11:15:57 Django version 3.2.4, using settings 'django_project.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
Теперь откройте свой веб-браузер и получите доступ к приложению Django с помощью URL http://django.example.com:8000/admin/ . Вы будете перенаправлены на страницу входа в Django:
Укажите имя пользователя, пароль вашего администратора и нажмите на логин. Вы должны увидеть панель Django на следующей странице:
Теперь вернитесь к вашему терминалу и нажмите Ctrl + C Чтобы остановить сервер развития Django.
Тестовый боевик
Далее вам нужно будет проверить, может ли боевик служить Джангу или нет. Вы можете запустить сервер Gunicorn со следующей командой:
gunicorn --bind 0.0.0.0:8000 django_project.wsgi
Если все в порядке, вы должны получить следующий выход:
[2021-06-22 11:20:02 +0000] [11820] [INFO] Starting gunicorn 20.1.0 [2021-06-22 11:20:02 +0000] [11820] [INFO] Listening at: http://0.0.0.0:8000 (11820) [2021-06-22 11:20:02 +0000] [11820] [INFO] Using worker: sync [2021-06-22 11:20:02 +0000] [11822] [INFO] Booting worker with pid: 11822
Нажмите Ctrl + C Чтобы остановить сервер Gunicorn. Затем деактивируйте виртуальную среду Python со следующей командой:
deactivate
Создайте системный файл сервиса для Gunicorn
Это хорошая идея создать Systemd
Сервисный файл для Gunicorn для запуска и остановки сервера приложений Django. Для этого создайте файл сокета со следующей командой: В
nano /etc/systemd/system/gunicorn.socket
Добавьте следующие строки:
[Unit] Description=gunicorn socket [Socket]ListenStream=/run/gunicorn.sock [Install] WantedBy=sockets.target
Сохранить и закрыть файл, затем создайте файл сервиса для Gunicorn:
nano /etc/systemd/system/gunicorn.service
Добавьте следующие строки, которые соответствуют вашему пути проекта Django:
[Unit] Description=gunicorn daemon Requires=gunicorn.socket After=network.target [Service] User=root Group=www-data WorkingDirectory=/root/django_project ExecStart=/root/django_project/djangoenv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/run/gunicorn.sock django_project.wsgi:application [Install] WantedBy=multi-user.target
Сохраните и закрыть файл, затем установите правильное разрешение на каталог проекта Django:
chown -R www-data:root ~/django_project
Далее перезагрузите Systemd
Демон со следующей командой:
systemctl daemon-reload
Далее начните службу Gunicorn и позволит ему начать с перезагрузкой системы:
systemctl start gunicorn.socket systemctl enable gunicorn.socket
Чтобы проверить состояние Gunicorn, запустите команду ниже:
systemctl status gunicorn.socket
Вы должны получить следующий вывод:
● gunicorn.socket - gunicorn socket Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-06-22 12:05:05 UTC; 3min 7s ago Triggers: ● gunicorn.service Listen: /run/gunicorn.sock (Stream) CGroup: /system.slice/gunicorn.socket Jun 22 12:05:05 django systemd[1]: Listening on gunicorn socket.
Настройте Nginx в качестве обратного прокси-сервера к приложению Gunicorn
Далее вам нужно будет настроить Nginx в качестве обратного прокси, чтобы служить серверу приложений Gunicorn.
Для этого создайте файл конфигурации NGINX:
nano /etc/nginx/conf.d/django.conf
Добавьте следующие строки:
server { listen 80; server_name django.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /root/django_project; } location / { include proxy_params; proxy_pass http://unix:/run/gunicorn.sock; } }
Сохранить и закрыть файл, затем проверьте nginx для любой ошибки конфигурации:
nginx -t
Выход:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Наконец, перезапустите службу Nginx, чтобы применить изменения:
systemctl restart nginx
Теперь вы можете получить доступ к приложению Django, используя URL http://django.example.com/admin Отказ
Заключение
В приведенном выше руководстве вы узнали, как развернуть приложение Django с Gunicorn и Nginx в качестве обратного прокси. Теперь вы можете использовать эту настройку в производственной среде для развертывания безопасных и высокопроизводительных приложений Python.
Избранное изображение от Gerry Sabar: https://gerrysabar.medium.com/deploying-django-3-nginx-postgre-to-ubuntu-18-04-vps-220c529b588.
Оригинал: “https://dev.to/arctype/set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-20-04-74h”