Развертывание сервера

Развертывание - запуск текущего веб-сервера в новой рабочей среде (на новом сервере).

Этапы

  • Клонирование собранного проекта с GitLab;

  • Настройка settings.py;

  • Подключение и настройка nginx;

  • Подключение и настройка gunicorn;

  • Подключение и настройка postgreSQL и дамп основных данных;

  • Подключение и настрйока redis;

  • Подключение и настройка celery;

  • Подключение и настройка daphne.

Клонирование собранного проекта с GitLab

Подготовка

  • Установка python 3.9.10 на сервер;

  • Установка git на сервер.

Клонирование

Для получения проекта с «GitLab», необходимо выполнить следующие действия:

  1. Создать новую директорию, в которую будет помещён проект;

  2. Перейти в созданную директорию через терминал;

  3. Прописать в терминале команду «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» .