Разворачивание бэкенд-сервера¶
Устанавливается на Ubuntu. Требуется Django, virtualenv, nginx, uWSGI, PostgreSQL, Redis, letsencrypt
Создаём пользователя¶
adduser siriuso
даём ему права root usermod -aG sudo siriuso
Далее заходим под siriuso
добавляем себя в группу www-data sudo usermod -a -G www-data siriuso
Вход по ключу при наличии пары ключей Копируем открытый ключ на сервер: ssh-copy-id siriuso@162.55.219.214
Запрос файлов¶
- Запросите файл с базой данных проекта.
- Запросите каталог с конфигурациями (server) и положите в домашний директорий
Обновляем пакеты¶
sudo apt update sudo apt full-upgrade
Устанавливаем Git¶
sudo apt install git
Скачиваем проект Siriuso¶
sudo mkdir /opt/siriuso
Если не получается создать, то создаём из под sudo и добавляем прав на папку Права на папку: sudo chgrp siriuso /opt/siriuso Разрешение на запись в папку: sudo chmod -R g+rw /opt/siriuso
папке назначаем себя владельцем, а группу — www-data: sudo chown -R siriuso:www-data /opt/siriuso
cd /opt
git clone https://gitlab.com/tehnokom/siriuso.git
переключаем на ветку develop cd /opt/siriuso git checkout develop
Установка MC¶
sudo apt install mc
Установка PostgreSQL¶
Устанавливаем пакеты:
sudo apt-get update
sudo apt-get install libpq-dev postgresql postgresql-contrib
Запускаем консоль PostgreSQL
sudo -u postgres psql
CREATE DATABASE siriuso;
CREATE USER siriuso WITH PASSWORD 'пароль';
ALTER ROLE siriuso SET client_encoding TO 'utf8';
ALTER ROLE siriuso SET default_transaction_isolation TO 'read committed';
ALTER ROLE siriuso SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE siriuso TO siriuso;
Теперь можно выйти из консоли PostgreSQL
\q
Загрузка базы данных в бэкенд¶
- Заполучите файл с базой данных проекта. Для определённости, пусть он называется «a.sql.gz».
- Если файл имеет расширение sql.gz, распакуйте его:
gunzip a.sql.gz
В результате он будет заменён файлом «a.sql»
- Следующая команда запустит psql PostgreSQL и запустит разворачивание базы данных:
psql -h 127.0.0.1 -U siriuso -d siriuso -f ~/base/a.sql
1. В файле /etc/hosts добавляем значения postgres redis rabbitmq sudo nano /etc/hosts Пример некоторый строк изменённого файла hosts: 127.0.1.1 siriuso-test siriuso-test 127.0.0.1 localhost redis rabbitmq postgres
Ещё нужны программы¶
GDAL¶
sudo apt install gdal-bin
virtualenv¶
Устанавливаем pip и virtualenv: sudo apt-get update sudo apt-get install python3-pip sudo pip3 install virtualenv Создаём новое виртуальное окружение: cd /opt/siriuso sudo virtualenv -p python3.8 /opt/python3.8 Права на папку: sudo chgrp siriuso /opt/python3.8 Разрешение на запись в папку: sudo chmod g+rw /opt/python3.8
папке назначаем себя владельцем, а группу — www-data: sudo chown -R siriuso:www-data /opt/python3.8
Если вам нужно будет удалить виртуальное окружение, достаточно сделать: rm -rf /opt/python3.8/
Теперь активировать окружение можно с помощью команды source /opt/python3.8/bin/activate запущенной из директории /opt/siriuso. Вы увидите, что после этой команды изменится приглашение интерпретатора bash: в начале появится (python3.8).
Django¶
Устанавливаем пакеты на новой машине: pip install -r configs/docker/python/requirements.txt
добавляем в файл /siriuso/settings.py в ALLOWED_HOSTS и в SITE_URL имя хоста „t34.universo.pro“
Даём права на запись в логи: sudo chown -R siriuso:www-data /var/log/django_debug.log
применить миграции: python manage.py migrate Для выхода из окружения используйте команду: deactivate (заметьте, она работает только в виртуальном окружении!)
Копируем папки media и static¶
находятся в папке /opt sudo mkdir /opt/media sudo mkdir /opt/static Права на папку: sudo chgrp siriuso /opt Разрешение на запись в папку: sudo chmod g+rw /opt
папке назначаем себя владельцем, а группу — www-data: sudo chown -R siriuso:www-data /opt
tar -xvf media.tar.gz tar -xvf static.tar.gz
Redis¶
хранилище данных в памяти с открытым исходным, используемое в качестве базы данных, кеша и брокера сообщений.
Установка Redis¶
From the official Ubuntu PPA You can install the latest stable version of Redis from the redislabs/redis package repository. Add the repository to the apt index, update it and install: $ sudo add-apt-repository ppa:redislabs/redis
Может возникнуть ошибка: add-apt-repository: command not found Тогда запускаем: sudo apt install software-properties-common И повторяем предыдущую команду (инфа из: https://losst.ru/oshibka-add-apt-repository-command-not-found)
$ sudo apt-get update $ sudo apt-get install redis
копируем файл redis.service: sudo cp ~/server/lib/systemd/system/redis-server.service /lib/systemd/system/ sudo cp ~/server/etc/redis/redis.conf /etc/redis/
Перезагружаем демоны: sudo systemctl daemon-reload
Запускаем сервис: sudo systemctl enable redis-server sudo systemctl start redis-server
Проверка установки (инструкция: https://dev-gang.ru/article/python-rabota-s-redis-v-django-1ofbc96rb5/): redis-cli ping Ответ: PONG
проверить настройки с работой (запуск в совей venv!!!): (python3.8) siriuso@siriuso-d3:/opt/siriuso$ celery worker -A siriuso –loglevel=info
ЗАПУСКАЕМ НАШ СЕРВЕР¶
python manage.py runserver 0.0.0.0:8000 & знак & - запустить и продолжить работу в терминале
nginx¶
Устанавливаем свежий nginx nginx=stable sudo add-apt-repository ppa:nginx/$nginx sudo apt-get update sudo apt-get install nginx Конфигурируем наш сервер копируем файлы /etc/nginx/ с соответствующей правкой доменов sudo cp ~/server/etc/nginx/sites-available/siriuso.conf /etc/nginx/sites-available/ sudo cp ~/server/etc/nginx/sites-enabled/siriuso.conf /etc/nginx/sites-enabled/ sudo cp ~/server/etc/nginx/htpasswd /etc/nginx/ Редактировать: sudo nano /etc/nginx/sites-available/siriuso.conf
Проверяем верность ссылки из sites-enabled в sites-available
и добавляем строки:
location /.well-known {
root /opt/test/www; # Понадобится для letsencrypt
}
После того, как установка и настройка nginx будет завершена проверяем конфигурацию на ошибки: sudo nginx -t Затем перезагружаем сервер: sudo service nginx reload sudo service nginx restart
uWSGI¶
смысл uwsgi - они поддерживают плагинами только первую и последнюю системную версию питона т.е. для ubuntu 20.04 - 3.0 и 3.8
Ставим глобально: sudo apt-get install build-essential python-dev libpcre3 libpcre3-dev sudo pip3 install uwsgi может не работать, тогда: Для решения проблемы выполнить установку python3.8-dev
# Вернёмся в виртуальное окружение (если вы из него выходили), и установим pip install uwsgi
Сервис uWSGI¶
sudo apt-get install uwsgi uwsgi-plugin-python3 если uwsgi-plugin-python3 — не находит, то после установки uwsgi и перезагрузки запускаем: apt-get install uwsgi-plugin-python3
копируем файлы конфигурации: sudo cp -r ~/server/etc/uwsgi/* /etc/uwsgi/ проверяем настройки в файле конфигурации uwsgi: sudo nano /etc/uwsgi/apps-available/siriuso.ini Проверяем верность ссылки из apps-enabled в apps-available
plugins = python38 virtualenv = /opt/python3.8 chdir = /opt/siriuso/
Включаем сервис: sudo systemctl enable uwsgi sudo systemctl restart uwsgi
rabbitmq¶
Установка: Шаг №1 – Установка RabbitMQ в Ubuntu Так как Ubuntu не содержит встроенного пакета rabbitmq, в первую очередь нужно ипмортировать все необходимы ключи и репозитарии. Для этого выполните команду ниже: echo „deb http://www.rabbitmq.com/debian/ testing main“ | sudo tee /etc/apt/sources.list.d/rabbitmq.list wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add - После этого обновите кэш пакетов и установите Rabbitmq server, воспользуйтесь командой ниже: sudo apt-get update sudo apt-get install rabbitmq-server
Шаг №2 – Управление RabbitMQ server в Ubuntu После завершения установки пакета rabbitmq-server, необходимо включить службу RabbitMQ в вашей Ubuntu. В зависимости какую систему вы используете, с поддержкой обращения к службам через systemctl выполните необходимые команды представленные ниже: sudo systemctl enable rabbitmq-server sudo systemctl start rabbitmq-server sudo systemctl stop rabbitmq-server
https://coderun.ru/blog/kak-ustanovit-rabbitmq-server-v-ubuntu-18-04-i-16-04-lts/
Проверить работу: sudo systemctl status rabbitmq-server
sudo rabbitmqctl status {rabbit,»RabbitMQ»,»3.6.10»},
Создание пользователя в RabbitMQ По умолчанию rabbitmq создаёт учётную запись “guest” с паролем по умолчанию “guest”. Вы можете создать своего собственного пользователя для управления и администрирования rabbitmq, а так же назначить пароль новой учётной записи. Воспользуйтесь командой ниже: sudo rabbitmqctl add_user siriuso siriuso sudo rabbitmqctl set_user_tags siriuso administrator sudo rabbitmqctl set_permissions -p / siriuso «.*» «.*» «.*»
Откуда: https://coderun.ru/blog/kak-ustanovit-rabbitmq-server-v-ubuntu-18-04-i-16-04-lts/
Посмотреть пользователей в RabbitMQ sudo rabbitmqctl list_users
Включение консоли управления Чтобы включить консоль RabbitMQ, запустите команду: sudo rabbitmq-plugins enable rabbitmq_management Теперь можно открыть консоль при помощи любого удобного браузера: http://[IP_адрес_сервера]:15672/. http://tehnokom.su:15672/ http://t34.universo.pro:15672/
Celery¶
рабочая версия 5.2.7
sudo pip3 install celery django-kombu django-celery вроде теперь не нужен — попробовать его не ставить копируем файлы конфигурации, sudo cp ~/server/etc/systemd/system/celery.service /etc/systemd/system/ правим (проверяем) соответствующие пути: sudo nano /etc/systemd/system/celery.service запускаем: sudo systemctl enable celery sudo systemctl start celery
Проверка работы: sudo systemctl status celery Узнать версию: python -c «import celery; print(celery.__version__)» или: pip freeze | grep celery или pip3 freeze | grep celery t34.universo.pro - celery==5.2.7
в папке /opt/siriuso запускаем через sudo celery -A siriuso worker -l info И не должно быть ошибок
pip freeze | grep corsheaders
CeleryBeat¶
Периодическое исполнение задач копируем файлы конфигурации: sudo cp ~/server/etc/systemd/system/celerybeat.service /etc/systemd/system/ правим (проверяем) соответствующие пути: sudo nano /etc/systemd/system/celerybeat.service
запускаем: sudo systemctl daemon-reload sudo systemctl enable celerybeat sudo systemctl start celerybeat
flower¶
копируем файлы конфигурации sudo cp ~/server/etc/systemd/system/flower.service /etc/systemd/system/ правим файл конфигурации sudo nano /etc/systemd/system/flower.service
sudo systemctl enable flower sudo systemctl start flower
да там еще бывает проблема с версией channels
(python3.8) siriuso@siriuso-d3:/opt/siriuso$ pip freeze | grep channels
channels==3.0.5
channels-redis==3.4.1
django-channels-graphql-ws==0.9.1
letsencrypt¶
Устанавливаем letsencrypt sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install –upgrade letsencrypt
Создаём файл конфигурации: sudo nano /etc/letsencrypt/cli.ini Добавляем: authenticator = webroot webroot-path = /var/www/html post-hook = service nginx reload text = True
Регистрация в letsencrypt sudo certbot register –email my@email.com создаём папку для корневого сайта: mkdir /opt/test Наделяем папку правами для nginx: sudo chown -R www-data:www-data /opt/test
указываем в настройках nginx корневой на эту папку Попробуем получить необходимый сертификат в режиме для тестов sudo certbot certonly –dry-run -d t34.universo.pro выбираем 2 и вводим путь к корневой папке:
В конце вы должны получить сообщение The dry run was successful.
Если не получилось, то смотрим путь и прописываем в настройках nginx (на примере данного пути): в разделе server
lovation /.well-known {
root /var/www/html;
}
перезагружаем nginx: sudo service nginx reload sudo service nginx restart
Опять запускаем тест Если всё прошло успешно, то можно получить сами сертификаты sudo certbot certonly -d t34.universo.pro
После этого, редактируем настройки nginx
sudo nano /etc/nginx/sites-available/siriuso.conf
server {
server_name t34.universo.pro;
# добавляем в конце раздела
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/t34.universo.pro/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/t34.universo.pro/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/t34.universo.pro/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000";
}
server {
location /.well-known {
root /var/www/html; # Понадобится для letsencrypt
}
# Взаимодействуем с Django-приложением через unix-сокет
location / {
include proxy_params;
proxy_pass http://unix:/home/steve/newproject/forum.sock;
}
}
Перезапускаем nginx
sudo service nginx reload
sudo systemctl restart nginx
dapnhe¶
необходима для WebSockets
проверить работу: sudo systemctl status daphne
Установка: Для установки daphne в Ubuntu / Linux Mint, введите в Терминал: установить нужной версии pip3 install daphne==3.0.2
копируем файлы настройки запуска службы sudo cp ~/server/etc/systemd/system/daphne.service /etc/systemd/system/ правим файл настройки запуска службы: sudo nano /etc/systemd/system/daphne.service запускаем службу: sudo systemctl enable daphne sudo systemctl start daphne
доступы записи: /var/log/django_debug.log
Посмотреть логи любого сервиса sudo journalctl -u [сервис]