Развертывание сервера
Развертывание - запуск текущего веб-сервера в новой рабочей среде (на новом сервере).
Этапы
Клонирование собранного проекта с GitLab;
Настройка settings.py;
Подключение и настройка nginx;
Подключение и настройка gunicorn;
Подключение и настройка postgreSQL и дамп основных данных;
Подключение и настрйока redis;
Подключение и настройка celery;
Подключение и настройка daphne.
Клонирование собранного проекта с GitLab
Подготовка
Установка python 3.9.10 на сервер;
Установка git на сервер.
Клонирование
Для получения проекта с «GitLab», необходимо выполнить следующие действия:
Создать новую директорию, в которую будет помещён проект;
Перейти в созданную директорию через терминал;
Прописать в терминале команду «git clone + (путь до репозитория)»: «git clone https://gitlab.i-sensor.ru/cherepanov.i/cheweb.git» .
Виртуальное окружение
Виртуальное окружение представляет из себя директорию, в которую будут устанавливаться все библиотеки, использующиеся для работы веб-сервера. Создаётся для того, чтобы необходимые для работы сервера зависимости не конфликтовали с уже установленными в новой рабочей среде.
Виртуальное окружение создается в текущей директории командой:
«python -m venv venv».
Для активации виртального окружения необходима прописать команду:
«source venv/bin/activate».
Установка библиотек
После активации виртуального окружения, требуется перейти в директорию с проектом и прописать команду:
«python -m pip install -r requirments.txt».
Данная команда установит все необходимые библиотеки прописанные в файле requirments.txt в виртуальное окружение.
Настройка «settings.py»
settings.py - конфигурационный файл Django. Содержит в себе информацию о созданных приложениях, подключенных шаблонов, использующейся базы данных и так далее.
Требующиеся изменения:
Сгенерировать и вставить секретный ключ в поле «SEKRET_KEY»;
Добавить в список «ALLOWED_HOSTS» сервер для текущего примера 24.10.0.176 ;
Указать MEDIA_ROOT и STATIC_ROOT. В данном примере они указывают на директорию выше проекта.
STATIC_ROOT = BASE_DIR / '../static'
MEDIA_ROOT = BASE_DIR / '../media'
Сборка статических файлов
Для будущего отображения статических файлов через nginx, требуется выполнить следующую команду:
«python manage.py collectstatic» .
Данная команда соберёт статические файлы в проекте и разложит их в по пути «MEDIA_ROOT», указанном в предыдущем пункте.
Подключение и настройка nginx
nginx - вспомогательный веб-сервер, для быстрой передачи статических файлов пользователю.
Установка ngixn производится следующей командой:
«apt install nginx» .
После устанвоки необходимо настроить конфигурационный файл «nginx.conf» по пути «/etc/nginx/sites-available/nginx.conf».
Пример
server {
root /var/www/mmvbr/;
index index.html index.nginx-debian.html;
server_name 10.24.0.176;
location /static {
alias /var/www/mmvbr/;
}
location /media {
alias /var/www/mmvbr/;
}
location /ws {
proxy_pass http://127.0.0.1:8005;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 28400;
proxy_send_timeout 28400;
proxy_read_timeout 28400;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
}
location / {
include proxy_params;
proxy_pass http://10.24.176:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 28400;
proxy_send_timeout 28400;
proxy_set_header X-Forwarded-Photo $scheme;
proxy_buffering off;
proxy_request_buffering off;
}
Заупуск nginx
Далее из терминала прописать команду, которая создаст символическую ссылку на директорию с активными сайтами для nginx:
sudo ln -s /etc/nginx/sites-available/»название файла» /etc/nginx/sites-enabled/»Название файла» .
Далее, заставить nginx прочитать конфигурационные файлы из systemd командой:
«sudo systemctl daemon-reload» .
И запустить nginx:
«sudo systemctl restart nginx» .
Подключение и настройка gunicorn
Вспомогательный backend сервер, принимающий запросы перенаправленные на него nginx.
Установка gunicorn производится следующей командой:
«apt install gunicorn» .
После устанвоки необходимо создать и настроить конфигурационный файл «mmvbr.service» по пути «/etc/systemd/system/mmvbr.service».
Пример
[Unit]
Description=mmvbr gunicorn
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/mmvbr/cheweb
ExecStart=/var/www/mmvbr/venv/bin/gunicorn --workers 17 --bind 10.24.0.176:8000
--timeout 20800 mmvbr.wsgi;application --log-level=DEBUG
[Install]
WantedBy=multi-user.target
Запуск gunicorn
Заставить gunicorn прочитать конфигурационный файл из systemd командой:
«sudo systemctl daemon-reload» .
После чего запустить gunicorn:
«sudo systemctl start mmvbr» .
Подключение и настройка postgreSQL и дамп основных данных
Установка базы данных
Установить postgreSQL сервер, если его нет, командой:
«sudo apt install postgresql postgresql-contrib» .
Установить psycopg2 командой:
«pip install psycopg2» .
Настройка postgreSQL
Активировать работу postgreSQL в системе, командой:
«sudo systemctl start postgresql» .
Зайти в postgreSQL под дефолтным суперпользователем postgres:
«sudo -u postgres psql» .
Создать базу данных:
«create database mmvbr_db» .
Создать нового пользователя:
create user «имя пользователя» with password „«пароль»“ .
Выдать все привелегии новому пользователю:
grant all privileges on database «название бд» to «имя пользователя» .
Подключение базы данных к проекту
В файле settings.py добавить в поле DATABASES созданную базу данных:
DATABASE = {
'ENGINE':'django.db.backends.postgresql',
'NAME':'mmvbr_db',
'USER':'pufff',
'PASSWORD':'7fk9zeha',
'HOST':'localhost',
'PORT':'',
}
После провести миграции:
«python manage.py makemigrations» ;
«python manage.py migrate» .
Создать суперпользователя:
«python manage.py createsuperuser» .
Подключение и настрйока redis
Установить redis командой:
«sudo apt-get install redis-server» .
В файле /etc/redis/redis.conf изменить строку «supervised no» на «supervised systemd» .
Запустить redis командой:
«sudo systemctl restart redis.service» .
Подключение и настройка celery
Установка
Установить celery командой:
«pip install celery» .
Конфигурационный файл
Создать конфигурационный файл для celery по пути: /etc/systemd/system/celery.service .
Пример
Заполнить конфигурационный файл по примеру:
[Unit]
Description=celery mmvbr
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/mmvbr/cheweb
ExecStart=/var/www/mmvbr/venv/bin/celery --app=mmvbr.celery:app worker -c 6 --loglevel=INFO
Restart=always
[Install]
WantedBy=multi-user.target
Подключение к проекту
Добавить в файл «settings.py» данные для работы celery:
WSGI_APPLICATION = "mmvbr.wsgi.application"
ASGI_APPLICATION = "mmvbr.asgi.application"
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
'hosts': [('127.0.0.1', 6379)]
}
}
}
CELERY_BROKER_URL = "redis://127.0.0.1:6379"
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379"
Добавить в файл «init.py» директории «mmvbr» следующие строки:
from .celery import app as celery_app
__all__ = ('celery_app')
Запуск celery
Перезапустить демонов командой:
«sudo systemctl daemon-reload» .
Запустить celery:
«sudo systemctl restart celery.service» .
Подключение и настройка daphne
daphne - вспомогательный сервер, использующийся для работы websocket.
Установка
Установить daphne командой:
«pip install daphne»
Конфигурация
Создать конфигурационный файл для daphne по пути «/etc/systemd/system/daphne.service» и заполнить её по примеру:
[Unit]
Description=Daphne Service
After=network.target
[Service]
Group=www-data
User=www-data
WorkingDirectory=/var/www/mmvbr/cheweb
ExecStart=/var/www/mmvbr/venv/bin/daphne -b 0.0.0.0 -p 8005 mmvbr.asgi:application
[Install]
WantedBy=multi-user.target
Подключение к проекту
Добавить в поле «INSTALLED_APPS» файла «settings.py» приложение «daphne».
Прописать две строки в файле «settings.py» по примеру:
ASGI_APPLICATION = mmvbr.asgi.application
WSGI_APPLICATION = mmvbr.wsgi.application
Запуск daphne
Перезапустить демонов командой:
«sudo systemctl daemon-reload» .
Запустить daphne:
«sudo systemctl restart daphne.service» .