Используемые термины: Python, UWSGI, NGINX, Ubuntu.
Наше развертывание мы разделим на два этапа:
Рассмотрим эти процессы по шагам.
Устанавливаем необходимые пакеты:
apt-get install nginx uwsgi python3 uwsgi-plugin-python3 python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools
Устанавливаем пакеты для Python:
pip3 install virtualenv uwsgi django
Создаем директорию для хранения стачичных файлов (css, js, img):
mkdir -p /var/www/my_app/static /var/www/my_app/media
chown www-data.www-data /var/www/my_app/media
chown www-data.www-data /var/www/my_app/static
Копируем наше приложение в папку /var/www/my_app, структура должна получиться примерно такой:
/var/www/my_app/
|– app1
|– __init__.py
|– __pycache__
|– admin.py
|– apps.py
|– migrations
|– models.py
|– static
|– (некоторые файлы)
|– templates
|– tests.py
|– urls.py
|– views.py
|– my_app
|– asgi.py
|– settings.py
|– wsgi.py
|– manage.py
|– db.sqlite3
Вносим изменения в конфигурационный файл нашего проекта:
vi /var/www/my_app/settings.py
from .base import *…ALLOWED_HOSTS = [ ‘www.example.com’ ]…DATABASES = { ‘default’: { … } }…STATIC_ROOT = ‘/var/www/my_app/static’MEDIA_ROOT = ‘/var/www/my_app/media’
* где:
Запускаем команду для сбора всех статических файлов в нашем проекте (из корня проекта):
cd /var/www/my_app/my_app/
./manage.py collectstatic
Настройка uWSGI:
vi /etc/uwsgi/apps-enabled/my_app.ini
[uwsgi]chdir = var/www/my_appenv = DJANGO_SETTINGS_MODULE=project.settings.productionwsgi-file = my_app/wsgi.pyworkers = 1max-requests=5000plugins=python3processes = 5threads = 2master = truedie-on-term = truesocket = sedova.sockchmod-socket = 660vacuum = trueuid = www-datagui = www-data
Перезапускаем сервис uwsgi:
service uwsgi restart
Создаем файл конфигурации для нашего приложения
vi /etc/nginx/conf.d/my_app.conf
Содержимое файла должно быть примерно следующим:
server { listen 80; server_tokens off; server_name my_app my_app.domain.local;
location / { include uwsgi_params; uwsgi_pass unix:///run/uwsgi/app/sedova/socket; }
location /static/ { alias /var/www/my_app/static/; }
location /media/ { alias /var/www/my_app/media/; }}
Перезапускаем nginx:
systemctl restart nginx
Рассмотрим пример настройки подключения к СУБД MariaDB/MySQL. Нам необходимо будет настроить как сам сервер баз данных, так и фреймворк. В инструкции опишем полный процесс, начиная от установки СУБД.
Выполним установку и настройку сервера баз данных. Начнем с установки:
apt-get install mariadb-server
Разрешаем автозапуск СУБД:
systemctl enable mariadb
Зададим пароль для учетной записи mysql-root:
mysqladmin -u root password
Установка и запуск завершены. Перейдем к настройке.
Для Django важно, чтобы кодировка была UTF-8. Откроем конфигурационный файл клиента:
vi /etc/mysql/mariadb.conf.d/50-client.cnf
Отредактируем строку:
[mysql]…default-character-set = utf8
Аналогичную настройку выполняем в следующем файле:
vi /etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
Редактируем файл для настройки сервера:
vi /etc/mysql/mariadb.conf.d/50-server.cnf
Задаем значения для опций:
character-set-server = utf8collation_server = utf8_unicode_ci
Для применения настроек перезапускаем сервис:
systemctl restart mariadb
Предполагается, что у нас есть база данных, которую мы либо создадим на сервере, либо восстановим из резервной копии.
Не забываем также настроить права доступа на базу.
Для возможности подключения к базе, мы должны установить клиента mysql на сервер. Для этого выполняем две команды:
apt-get install libmysqlclient-dev
pip3 install mysqlclient
Первая команда установит библиотеки, необходимые для установки mysqlclient через менеджер пакетов Python. Вторая, собственно, и установит клиента.
Откроем конфигурационный файл нашего приложения:
Находим:
DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.sqlite3’, ‘NAME’: BASE_DIR / ‘db.sqlite3’, }}
Данная настройка прописывается, как правило, по умолчанию и позволяет использовать базу sqlite3. Поменяем ее:
DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.mysql’, ‘NAME’: ‘database_name’, ‘HOST’: ‘localhost’, ‘USER’: ‘db_user’, ‘PASSWORD’: ‘db_password’, }}
* в данном примере:
Для проверки настройки создадим select-запрос с нашей базе. Предположим, к таблице users. Пример кода будет таким:
В данном примере мы извлечем все содержимое таблицы users и выведем это на экран.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies