Поиск

Релиз

Содержание

Нужна помощь?

Не нашли ответ на свой вопрос? Свяжитесь с нашей службой поддержки.

Обратиться в поддержку

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.


Поддержка

При возникновении проблем проверьте логи сервисов и убедитесь, что все шаги выполнены корректно.

Для получения дополнительной помощи обратитесь к разработчикам системы.