2.2 Установка
Обновлено: 07 Декабрь 2025
Версия: 2.2
Подготовка
1. Получение экземпляра ПО
Скопируйте полученный архив с экзепляром ПО или скачайте его с использованием инструкции к полученному после покупки лицензионному ключу. В архиве должны находиться:
deploy.sh-- скрипт автоматической установкиask/-- папка с проектом Django
2. Распаковка архива
Распакуйте архив на сервере, где будет выполняться установка:
unzip ask-legarus-for-reestr.zip
В случае, если в системе не установлен пакет unzip, установите его:
sudo apt install unzip
После распаковки структура должна быть следующей:
.
├── deploy.sh
└── ask/
├── manage.py
├── requirements.txt
├── config/
└── ...
Часть 1: Автоматическая установка
Автоматическая установка выполняется с помощью скрипта deploy.sh, который настроит всю систему за один запуск.
Запуск установки
Сделайте файл исполняемым
chmod +x deploy.sh
Запустите установку
sudo ./deploy.sh
⚠️ Для ознакомительного развёртывания системы рекомендуется оставить пустым выбор доменного имени и выбрать Вариант 2: Только внутренняя сеть (HTTP)
Что делает скрипт
Скрипт выполнит следующие действия в автоматическом режиме:
1. Сбор данных
Скрипт запросит у вас:
- Имя пользователя для приложения (по умолчанию:
askprodadmin) - Имя базы данных PostgreSQL (по умолчанию:
askproddb) - Пользователь базы данных PostgreSQL (по умолчанию:
askproddbuser) - Пароль для пользователя базы данных
- Доменное имя (если используется внешний доступ) или оставить пустым для внутренней сети
- Публичный IP сервера (опционально)
- Вариант развертывания:
- Вариант 1: Внешний доступ (HTTPS) -- для сервера с доменным именем и внешним IP
- Вариант 2: Только внутренняя сеть (HTTP) -- для тестирования или работы за прокси
- При выборе варианта 2 скрипт автоматически определит все доступные IP-адреса сервера
- Если найден один IP-адрес -- будет предложено подтвердить его использование
- Если найдено несколько IP-адресов -- будет показан список для выбора
- Всегда доступна опция ввода IP-адреса вручную
2. Подготовка системы
- Установка таймзоны UTC
- Обновление системы (
apt-get update && apt-get upgrade) - Настройка автоматических обновлений (
unattended-upgrades) - Настройка UFW (firewall) -- опционально
- Добавление репозитория PostgreSQL (PGDG)
- Установка всех необходимых пакетов:
- Python 3, pip, venv
- PostgreSQL и расширения (pgvector, pg_trgm)
- Nginx
- Redis
- Supervisor
- Системные библиотеки для Python
3. Создание пользователя и директорий
- Создание системного пользователя для приложения
- Создание директорий:
/var/www-- проект/var/log/django-- логи Django/var/log/celery-- логи Celery/run/daphne-- сокеты для WebSocket
4. Настройка PostgreSQL
- Запуск и настройка PostgreSQL
- Настройка
postgresql.conf(listen_addresses, password_encryption) - Настройка
pg_hba.conf(аутентификация: peer для postgres, scram-sha-256 для остальных) - Определение активного порта и версии PostgreSQL
- Создание базы данных и пользователя
- Установка расширений:
vector(pgvector) иpg_trgm
5. Настройка Redis
- Настройка Redis для работы только на localhost
- Включение protected-mode
- Запуск сервиса Redis
6. Копирование кода проекта
- Копирование папки
askиз директории со скриптом в/var/www/ask - Настройка прав доступа
7. Python виртуальное окружение и зависимости
- Создание виртуального окружения в
/var/www/ask_env - Установка PyTorch (CPU версия)
- Установка всех зависимостей из
requirements.txt - Опциональная установка
python-ldap(для LDAP аутентификации)
8. Создание конфигурации Django
- Создание файла
config/prod_settings.pyс настройками: - SECRET_KEY (генерируется автоматически)
- Настройки базы данных
- ALLOWED_HOSTS (на основе домена/IP)
- CSRF_TRUSTED_ORIGINS
- REQUEST_BASE_URL
- STATIC_ROOT, MEDIA_ROOT
- Проверка подключения Django к базе данных
9. Применение миграций и сбор статики
- Применение миграций базы данных
- Опциональное создание суперпользователя
- Сбор статических файлов в
assets/ - Компиляция переводов (gettext):
- Автоматическая проверка наличия директории
locale - Компиляция переводов для русской локали (
--locale=ru) - Улучшенная обработка ошибок с информативными сообщениями
10. Настройка Gunicorn (WSGI сервер)
- Создание systemd unit для Gunicorn socket и service
- Настройка количества воркеров (min((2*cpu)+1, 8))
- Запуск Gunicorn через Unix socket
11. Настройка Daphne (ASGI сервер для WebSocket)
- Создание systemd unit для Daphne socket и service
- Запуск Daphne для обработки WebSocket соединений
12. Настройка Nginx
Для варианта 1 (Внешний доступ с HTTPS):
- Создание конфигурации Nginx с редиректом HTTP -> HTTPS
- Настройка SSL сертификатов (Let's Encrypt)
- Настройка проксирования на Gunicorn и Daphne
- Настройка статических файлов и медиа
Для варианта 2 (Внутренняя сеть, HTTP):
- Создание конфигурации Nginx для HTTP
- Настройка проксирования на Gunicorn и Daphne
- Настройка статических файлов и медиа
13. Настройка Celery (асинхронные задачи)
- Создание конфигурации Supervisor для:
- Celery worker
- Celery beat (планировщик задач)
- Запуск сервисов Celery
14. Настройка Telegram-ботов
- Создание systemd unit для
sdbot(Servicedesk бот) - Создание systemd unit для
tgbot(Employee бот) - Запуск сервисов ботов
15. Финальная настройка
- Настройка прав доступа к файлам и директориям
- Проверка статуса всех сервисов
- Вывод сводной информации
После установки
После успешной установки скрипт выведет сводную информацию:
- Пользователь приложения
- Путь к проекту
- Настройки базы данных
- URL для доступа к системе
Важно:
- Если не создали суперпользователя во время установки, создайте его:
bash
sudo -u askprodadmin /var/www/ask_env/bin/python /var/www/ask/manage.py createsuperuser
- Проверьте логи сервисов при необходимости:
bash
journalctl -xeu gunicorn
journalctl -xeu daphne
journalctl -xeu nginx
supervisorctl status
Часть 2: Ручная установка по шагам
Если вы предпочитаете установку вручную или нужно настроить систему особым образом, следуйте инструкциям ниже.
Шаг 1: Подготовка системы
# Обновление системы
sudo apt-get update
sudo apt-get upgrade -y
# Установка автоматических обновлений
sudo apt-get install -y unattended-upgrades
sudo systemctl enable unattended-upgrades
sudo systemctl start unattended-upgrades
# Установка таймзоны UTC
sudo timedatectl set-timezone UTC
Шаг 2: Установка базовых пакетов
# Добавление репозитория PostgreSQL
sudo apt-get install -y curl ca-certificates gnupg lsb-release
sudo rm -f /etc/apt/trusted.gpg.d/pgdg.gpg
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pgdg.gpg
echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt-get update
# Установка всех необходимых пакетов
sudo apt-get install -y \
python3-pip python3-venv python3-dev libpq-dev postgresql postgresql-contrib \
nginx curl vim git build-essential libssl-dev libffi-dev \
libjpeg-dev libjpeg8-dev liblcms2-dev libblas-dev libatlas-base-dev \
libsasl2-dev libldap2-dev libxml2-dev libxslt1-dev zlib1g-dev \
redis-server supervisor gettext htop tree wget unzip zip gcc make
Шаг 3: Создание пользователя и директорий
# Создание пользователя (замените askprodadmin на нужное имя)
sudo adduser --disabled-password --gecos "" askprodadmin
sudo usermod -aG www-data askprodadmin
# Создание директорий
sudo mkdir -p /var/www /var/log/django /var/log/celery /run/daphne
sudo chown -R askprodadmin:www-data /var/www /var/log/django /var/log/celery /run/daphne
sudo chmod -R 775 /var/www /var/log/django /var/log/celery /run/daphne
Шаг 4: Настройка PostgreSQL
# Запуск PostgreSQL
sudo systemctl enable --now postgresql
sleep 5
# Определение версии PostgreSQL
PG_MAJOR=$(sudo -u postgres psql -tAc "SHOW server_version_num" | awk '{print int($1/10000)}')
PG_PORT=$(sudo -u postgres psql -tAc "SHOW port" | tr -d '[:space:]')
# Создание базы данных и пользователя (замените значения на свои)
DB_NAME="askproddb"
DB_USER="askproddbuser"
DB_PASSWORD="your_secure_password"
sudo -u postgres psql <<EOF
CREATE DATABASE $DB_NAME;
CREATE USER $DB_USER WITH LOGIN CREATEDB PASSWORD '$DB_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;
ALTER DATABASE $DB_NAME OWNER TO $DB_USER;
EOF
# Установка расширений
sudo apt-get install -y "postgresql-$PG_MAJOR-pgvector"
sudo -u postgres psql -d "$DB_NAME" <<EOF
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
EOF
Шаг 5: Настройка Redis
# Настройка Redis (редактируйте /etc/redis/redis.conf)
sudo sed -i 's/^bind .*/bind 127.0.0.1/' /etc/redis/redis.conf
sudo sed -i 's/^protected-mode .*/protected-mode yes/' /etc/redis/redis.conf
# Запуск Redis
sudo systemctl enable --now redis-server
sudo systemctl restart redis-server
Шаг 6: Копирование проекта
# Копирование проекта (предполагается, что архив распакован)
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
sudo cp -r "$SCRIPT_DIR/ask" /var/www/ask
sudo chown -R askprodadmin:www-data /var/www/ask
Шаг 7: Python виртуальное окружение
# Создание виртуального окружения
sudo -u askprodadmin python3 -m venv /var/www/ask_env
sudo -u askprodadmin /var/www/ask_env/bin/pip install --upgrade pip setuptools wheel
# Установка PyTorch
sudo -u askprodadmin /var/www/ask_env/bin/pip install --no-cache-dir torch --index-url https://download.pytorch.org/whl/cpu
# Установка зависимостей
sudo -u askprodadmin /var/www/ask_env/bin/pip install --no-cache-dir -r /var/www/ask/requirements.txt
Шаг 8: Создание конфигурации Django
Создайте файл /var/www/ask/config/prod_settings.py:
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
# Сгенерируйте SECRET_KEY (например: python3 -c "import secrets; print(secrets.token_hex(50))")
SECRET_KEY = 'your_secret_key_here'
DEBUG = False
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'askproddb',
'USER': 'askproddbuser',
'PASSWORD': 'your_secure_password',
'HOST': 'localhost',
'PORT': '5432', # Замените на ваш порт
}
}
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'assets'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
# ВАРИАНТ A: Внешний доступ с доменным именем
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com', 'localhost']
CSRF_TRUSTED_ORIGINS = ['https://yourdomain.com']
REQUEST_BASE_URL = 'https://yourdomain.com'
# ВАРИАНТ B: Внутренняя сеть для тестирования
# ALLOWED_HOSTS = ['192.168.1.100', 'localhost'] # Замените на ваш внутренний IP
# CSRF_TRUSTED_ORIGINS = ['http://192.168.1.100']
# REQUEST_BASE_URL = 'http://192.168.1.100'
Выберите один из вариантов (A или B) и раскомментируйте соответствующие строки.
Примечание: Для определения IP-адресов сервера используйте команду:
# Современный способ
ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v '127.0.0.1'
# Или альтернативный способ
hostname -I
Шаг 9: Применение миграций
export DJANGO_SETTINGS_MODULE=config.settings
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py migrate
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py createsuperuser
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py collectstatic --noinput
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py compilemessages --locale=ru
Шаг 10: Настройка Gunicorn
Создайте файл /etc/systemd/system/gunicorn.socket:
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
SocketUser=www-data
SocketGroup=www-data
SocketMode=0660
[Install]
WantedBy=sockets.target
Создайте файл /etc/systemd/system/gunicorn.service:
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
Environment=DJANGO_SETTINGS_MODULE=config.settings
User=askprodadmin
Group=www-data
WorkingDirectory=/var/www/ask
ExecStart=/var/www/ask_env/bin/gunicorn \
--access-logfile - \
--workers 5 \
--timeout 120 \
--bind unix:/run/gunicorn.sock \
config.wsgi:application
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Запуск:
sudo systemctl daemon-reload
sudo systemctl enable gunicorn.socket
sudo systemctl start gunicorn.socket
sudo systemctl restart gunicorn
Шаг 11: Настройка Daphne
Создайте файл /etc/systemd/system/daphne.socket:
[Unit]
Description=Daphne socket
[Socket]
ListenStream=/run/daphne/daphne.sock
SocketUser=askprodadmin
SocketGroup=www-data
SocketMode=0660
[Install]
WantedBy=sockets.target
Создайте файл /etc/systemd/system/daphne.service:
[Unit]
Description=Daphne daemon
Requires=daphne.socket
After=network.target
[Service]
Environment=DJANGO_SETTINGS_MODULE=config.settings
User=askprodadmin
Group=www-data
WorkingDirectory=/var/www/ask
RuntimeDirectory=daphne
RuntimeDirectoryMode=0755
ExecStart=/var/www/ask_env/bin/daphne \
-u /run/daphne/daphne.sock \
config.asgi:application
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Запуск:
sudo systemctl daemon-reload
sudo systemctl enable daphne.socket
sudo systemctl start daphne.socket
sudo systemctl restart daphne
Шаг 12: Настройка Nginx
ВАРИАНТ A: Внешний доступ с HTTPS (доменное имя)
Создайте файл /etc/nginx/sites-available/ask:
# HTTP -> HTTPS редирект
server {
access_log /var/log/nginx/yourdomain.com.access.log;
error_log /var/log/nginx/yourdomain.com.error.log;
server_name yourdomain.com;
listen 80;
listen [::]:80;
if ($host = yourdomain.com) {
return 301 https://$host$request_uri;
}
return 404;
}
# HTTPS
server {
access_log /var/log/nginx/yourdomain.com.access.log;
error_log /var/log/nginx/yourdomain.com.error.log;
server_name yourdomain.com;
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location /static/ { alias /var/www/ask/assets/; autoindex off; }
location /media/ { alias /var/www/ask/media/; }
# WebSocket -> Daphne
location /ws/ {
proxy_pass http://unix:/run/daphne/daphne.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_buffering off;
}
# Основное приложение -> Gunicorn
location / {
proxy_pass http://unix:/run/gunicorn.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_buffering off;
client_max_body_size 1G;
proxy_pass_header X-XSRF-TOKEN;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location = /logos/ask_favicon.ico { access_log off; log_not_found off; }
}
Замените **yourdomain.com** на ваше доменное имя.
Установка SSL сертификата:
sudo apt-get install -y certbot python3-certbot-nginx
sudo ln -sf /etc/nginx/sites-available/ask /etc/nginx/sites-enabled/ask
sudo nginx -t
sudo certbot --nginx -d yourdomain.com --non-interactive --agree-tos --email admin@yourdomain.com
sudo systemctl reload nginx
ВАРИАНТ B: Внутренняя сеть для тестирования (HTTP)
Создайте файл /etc/nginx/sites-available/ask:
server {
listen 80;
server_name 192.168.1.100; # Замените на ваш внутренний IP
access_log /var/log/nginx/ask_access.log;
error_log /var/log/nginx/ask_error.log;
location /static/ { alias /var/www/ask/assets/; autoindex off; }
location /media/ { alias /var/www/ask/media/; }
location /ws/ {
proxy_pass http://unix:/run/daphne/daphne.sock;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_buffering off;
}
location / {
proxy_pass http://unix:/run/gunicorn.sock;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
location = /logos/ask_favicon.ico { access_log off; log_not_found off; }
}
Замените **192\.168.1.100** на ваш внутренний IP-адрес.
Активация и запуск:
sudo ln -sf /etc/nginx/sites-available/ask /etc/nginx/sites-enabled/ask
sudo nginx -t
sudo systemctl reload nginx
Шаг 13: Настройка Celery
Создайте файл /etc/supervisor/conf.d/celery.conf:
[program:celery]
command=/var/www/ask_env/bin/celery -A config worker --loglevel=INFO
directory=/var/www/ask
user=askprodadmin
numprocs=1
stdout_logfile=/var/log/celery/worker.log
stderr_logfile=/var/log/celery/worker.err
logfile_maxbytes=5MB
logfile_backups=3
autostart=true
autorestart=true
startsecs=10
stopsignal=TERM
stopwaitsecs=30
environment=DJANGO_SETTINGS_MODULE="config.settings",OPENBLAS_NUM_THREADS=1,OMP_NUM_THREADS=1,MKL_NUM_THREADS=1,NUMEXPR_NUM_THREADS=1,VECLIB_MAXIMUM_THREADS=1
[program:celerybeat]
command=/var/www/ask_env/bin/celery -A config beat --loglevel=INFO
directory=/var/www/ask
user=askprodadmin
numprocs=1
stdout_logfile=/var/log/celery/beat.log
stderr_logfile=/var/log/celery/beat.err
logfile_maxbytes=5MB
logfile_backups=3
autostart=true
autorestart=true
startsecs=10
stopsignal=TERM
stopwaitsecs=30
environment=DJANGO_SETTINGS_MODULE="config.settings",OPENBLAS_NUM_THREADS=1,OMP_NUM_THREADS=1,MKL_NUM_THREADS=1,NUMEXPR_NUM_THREADS=1,VECLIB_MAXIMUM_THREADS=1
Запуск:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start celery
sudo supervisorctl start celerybeat
Шаг 14: Настройка Telegram-ботов
Создайте файл /etc/systemd/system/sdbot.service:
[Unit]
Description=Django Servicedesk Telegram Bot Service
After=network.target
[Service]
Environment=DJANGO_SETTINGS_MODULE=config.settings
User=askprodadmin
Group=www-data
WorkingDirectory=/var/www/ask
ExecStart=/var/www/ask_env/bin/python /var/www/ask/manage.py sdbot
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Создайте файл /etc/systemd/system/tgbot.service:
[Unit]
Description=Django Employee Telegram Bot Service
After=network.target
[Service]
Environment=DJANGO_SETTINGS_MODULE=config.settings
User=askprodadmin
Group=www-data
WorkingDirectory=/var/www/ask
ExecStart=/var/www/ask_env/bin/python /var/www/ask/manage.py tgbot
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
Запуск:
sudo systemctl daemon-reload
sudo systemctl enable --now sdbot
sudo systemctl enable --now tgbot
Шаг 15: Финальная настройка прав
# Настройка прав на проект
sudo chown -R askprodadmin:www-data /var/www/ask
sudo find /var/www/ask -type d -exec chmod 750 {} \;
sudo find /var/www/ask -type f -exec chmod 640 {} \;
# Восстановление прав на исполняемые файлы
sudo chmod +x /var/www/ask_env/bin/python /var/www/ask_env/bin/pip
sudo chmod +x /var/www/ask_env/bin/gunicorn /var/www/ask_env/bin/daphne
sudo chmod +x /var/www/ask_env/bin/celery
sudo chmod +x /var/www/ask/manage.py
# Права на медиа и статику
sudo mkdir -p /var/www/ask/media /var/www/ask/assets
sudo chown -R askprodadmin:www-data /var/www/ask/media /var/www/ask/assets
sudo find /var/www/ask/media -type d -exec chmod 770 {} \;
sudo find /var/www/ask/media -type f -exec chmod 660 {} \;
sudo find /var/www/ask/assets -type d -exec chmod 750 {} \;
sudo find /var/www/ask/assets -type f -exec chmod 640 {} \;
Проверка установки
Проверьте статус всех сервисов:
sudo systemctl status gunicorn
sudo systemctl status daphne
sudo systemctl status nginx
sudo systemctl status redis-server
sudo systemctl status postgresql
sudo supervisorctl status
sudo systemctl status sdbot
sudo systemctl status tgbot
Полезные команды
Управление сервисами
# Перезапуск сервисов
sudo systemctl restart gunicorn
sudo systemctl restart daphne
sudo systemctl restart nginx
sudo supervisorctl restart celery
sudo supervisorctl restart celerybeat
# Просмотр логов
sudo journalctl -xeu gunicorn
sudo journalctl -xeu daphne
sudo journalctl -xeu nginx
sudo tail -f /var/log/celery/worker.log
sudo tail -f /var/log/django/*.log
Обновление проекта
# Остановка сервисов
sudo systemctl stop gunicorn daphne sdbot tgbot
sudo supervisorctl stop celery celerybeat
# Обновление кода (скопируйте новую версию)
sudo cp -r /path/to/new/ask /var/www/ask
sudo chown -R askprodadmin:www-data /var/www/ask
# Применение миграций
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py migrate
# Сбор статики
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py collectstatic --noinput
# Компиляция переводов
sudo -u askprodadmin env DJANGO_SETTINGS_MODULE=config.settings /var/www/ask_env/bin/python /var/www/ask/manage.py compilemessages --locale=ru
# Запуск сервисов
sudo systemctl start gunicorn daphne sdbot tgbot
sudo supervisorctl start celery celerybeat
Решение проблем
Проблемы с подключением к базе данных
Проверьте настройки в config/prod_settings.py и убедитесь, что:
- База данных создана
- Пользователь существует и имеет правильный пароль
- PostgreSQL запущен:
sudo systemctl status postgresql
Проблемы с правами доступа
Убедитесь, что все файлы принадлежат правильному пользователю:
sudo chown -R askprodadmin:www-data /var/www/ask
Проблемы с Nginx
Проверьте конфигурацию:
sudo nginx -t
Просмотрите логи:
sudo tail -f /var/log/nginx/error.log
Проблемы с WebSocket
Убедитесь, что Daphne запущен:
sudo systemctl status daphne
Проверьте конфигурацию Nginx для /ws/ location.
Поддержка
При возникновении проблем проверьте логи сервисов и убедитесь, что все шаги выполнены корректно.
Для получения дополнительной помощи обратитесь к разработчикам системы.