Рубрики
Без рубрики

Настройка Django с Postgres, Nginx и Gunicorn на Ubuntu 20.04

Введение Django – это каркас Python с открытым исходным кодом, который можно использовать для развертывания … Теги с руководством, Python, инструментами.

Вступление

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”