feat: add deploy scripts (deploy, nginx-setup, ssl-setup) and fix backup paths
This commit is contained in:
1 parent
c6048aeea0
commit
a506e5b2ee
6 files changed
+167
-7
No files matched your search
+2
-5
@@ -50,8 +50,5 @@ secrets/
|
|||||||
*.pem
|
*.pem
|
||||||
|
|
||||||
# Деплой
|
# Деплой
|
||||||
deploy.sh
|
# deploy.sh, nginx-setup.sh, ssl-setup.sh, dev.sh теперь коммитятся (не содержат секретов)
|
||||||
nginx-setup.sh
|
# README.md оставлен в игноре (может содержать реальные данные)
|
||||||
ssl-setup.sh
|
|
||||||
dev.sh
|
|
||||||
README.md
|
|
||||||
+1
-1
@@ -17,7 +17,7 @@ mkdir -p $BACKUP_DIR
|
|||||||
# Создание архива
|
# Создание архива
|
||||||
cd $APP_DIR
|
cd $APP_DIR
|
||||||
tar -czf $BACKUP_DIR/$BACKUP_NAME \
|
tar -czf $BACKUP_DIR/$BACKUP_NAME \
|
||||||
cabinet_service/users.db \
|
users.db \
|
||||||
cabinet_service/media \
|
cabinet_service/media \
|
||||||
--exclude='cabinet_service/media/*' \
|
--exclude='cabinet_service/media/*' \
|
||||||
--exclude='venv' \
|
--exclude='venv' \
|
||||||
|
|||||||
Executable
+75
@@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# === Деплой ИИ Пресс-секретарь ===
|
||||||
|
# Клонирует/обновляет код, ставит зависимости, настраивает systemd-сервис.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
APP_DIR="/opt/pressa"
|
||||||
|
REPO_URL="https://github.com/apuc/telegram-bussiness-bot.git"
|
||||||
|
SERVICE_NAME="pressa"
|
||||||
|
PYTHON_BIN="$APP_DIR/venv/bin/python"
|
||||||
|
|
||||||
|
echo "=== Деплой ИИ Пресс-секретарь ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 1. Клонирование или обновление кода
|
||||||
|
if [ -d "$APP_DIR/.git" ]; then
|
||||||
|
echo "[1/5] Обновление кода из git..."
|
||||||
|
cd "$APP_DIR"
|
||||||
|
git pull origin main
|
||||||
|
else
|
||||||
|
echo "[1/5] Клонирование репозитория..."
|
||||||
|
sudo mkdir -p "$APP_DIR"
|
||||||
|
sudo chown "$USER":"$USER" "$APP_DIR"
|
||||||
|
git clone "$REPO_URL" "$APP_DIR"
|
||||||
|
cd "$APP_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Виртуальное окружение и зависимости
|
||||||
|
echo "[2/5] Установка зависимостей..."
|
||||||
|
if [ ! -d "$APP_DIR/venv" ]; then
|
||||||
|
python3 -m venv "$APP_DIR/venv"
|
||||||
|
fi
|
||||||
|
"$APP_DIR/venv/bin/pip" install --upgrade pip
|
||||||
|
"$APP_DIR/venv/bin/pip" install -r "$APP_DIR/requirements.txt"
|
||||||
|
|
||||||
|
# 3. Проверка .env
|
||||||
|
echo "[3/5] Проверка .env..."
|
||||||
|
if [ ! -f "$APP_DIR/.env" ]; then
|
||||||
|
echo "⚠️ Файл .env не найден!"
|
||||||
|
echo " Скопируй его на сервер: scp .env apuc@SERVER:/opt/pressa/.env"
|
||||||
|
echo " Или создай вручную по образцу config.py"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. systemd-сервис
|
||||||
|
echo "[4/5] Настройка systemd-сервиса..."
|
||||||
|
sudo tee /etc/systemd/system/$SERVICE_NAME.service > /dev/null <<EOF
|
||||||
|
[Unit]
|
||||||
|
Description=AI Press Secretary (Telegram bot + Cabinet)
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=$USER
|
||||||
|
WorkingDirectory=$APP_DIR
|
||||||
|
EnvironmentFile=$APP_DIR/.env
|
||||||
|
ExecStart=$PYTHON_BIN $APP_DIR/main.py
|
||||||
|
Restart=always
|
||||||
|
RestartSec=5
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl enable $SERVICE_NAME
|
||||||
|
|
||||||
|
# 5. Перезапуск
|
||||||
|
echo "[5/5] Перезапуск сервиса..."
|
||||||
|
sudo systemctl restart $SERVICE_NAME
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Деплой завершён! ==="
|
||||||
|
echo "Статус: sudo systemctl status $SERVICE_NAME"
|
||||||
|
echo "Логи: sudo journalctl -u $SERVICE_NAME -f"
|
||||||
Executable
+59
@@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# === Настройка Nginx для ИИ Пресс-секретарь ===
|
||||||
|
# Создаёт reverse-proxy конфиг для домена на порт 8061.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DOMAIN="${1:-press.my-dpr.ru}"
|
||||||
|
PORT="${2:-8061}"
|
||||||
|
|
||||||
|
echo "=== Настройка Nginx для $DOMAIN ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Проверяем, что конфиг ещё не существует
|
||||||
|
if [ -f "/etc/nginx/sites-available/$DOMAIN" ]; then
|
||||||
|
echo "⚠️ Конфиг /etc/nginx/sites-available/$DOMAIN уже существует."
|
||||||
|
read -p "Перезаписать? (y/N): " CONFIRM
|
||||||
|
if [ "$CONFIRM" != "y" ] && [ "$CONFIRM" != "Y" ]; then
|
||||||
|
echo "Отмена"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Создаём конфиг (HTTP, SSL добавит certbot)
|
||||||
|
sudo tee /etc/nginx/sites-available/$DOMAIN > /dev/null <<EOF
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name $DOMAIN;
|
||||||
|
|
||||||
|
client_max_body_size 20M;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:$PORT;
|
||||||
|
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_connect_timeout 60s;
|
||||||
|
proxy_read_timeout 300s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Включаем сайт
|
||||||
|
sudo ln -sf /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/$DOMAIN
|
||||||
|
|
||||||
|
# Проверяем конфиг
|
||||||
|
echo "Проверка конфигурации Nginx..."
|
||||||
|
sudo nginx -t
|
||||||
|
|
||||||
|
# Перезагружаем Nginx
|
||||||
|
echo "Перезагрузка Nginx..."
|
||||||
|
sudo systemctl reload nginx
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== Nginx настроен! ==="
|
||||||
|
echo "Домен: http://$DOMAIN -> http://127.0.0.1:$PORT"
|
||||||
|
echo ""
|
||||||
|
echo "Следующий шаг — SSL: ./ssl-setup.sh $DOMAIN"
|
||||||
+1
-1
@@ -38,7 +38,7 @@ mkdir -p $APP_DIR/cabinet_service
|
|||||||
|
|
||||||
# Восстановление базы данных
|
# Восстановление базы данных
|
||||||
echo "Восстановление базы данных..."
|
echo "Восстановление базы данных..."
|
||||||
tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $APP_DIR cabinet_service/users.db
|
tar -xzf $BACKUP_DIR/$BACKUP_FILE -C $APP_DIR users.db
|
||||||
|
|
||||||
# Восстановление медиа
|
# Восстановление медиа
|
||||||
echo "Восстановление медиа..."
|
echo "Восстановление медиа..."
|
||||||
|
|||||||
Executable
+29
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# === Настройка SSL (Let's Encrypt) для ИИ Пресс-секретарь ===
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DOMAIN="${1:-press.my-dpr.ru}"
|
||||||
|
|
||||||
|
echo "=== Настройка SSL для $DOMAIN ==="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Проверяем наличие certbot
|
||||||
|
if ! command -v certbot &> /dev/null; then
|
||||||
|
echo "Установка certbot..."
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y certbot python3-certbot-nginx
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Выпускаем сертификат и настраиваем Nginx автоматически
|
||||||
|
echo "Выпуск SSL-сертификата..."
|
||||||
|
sudo certbot --nginx -d "$DOMAIN" --non-interactive --agree-tos --redirect
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=== SSL настроен! ==="
|
||||||
|
echo "Домен: https://$DOMAIN"
|
||||||
|
echo ""
|
||||||
|
echo "Проверка:"
|
||||||
|
echo " sudo certbot certificates"
|
||||||
|
echo " sudo systemctl status nginx"
|
||||||
Reference in new issue
Block a user