v1.6.0: max_bot fixes — feature keys, flush→commit, test-run, categories, broadcast page, proxy error handling, deploy scripts
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
#!/bin/bash
|
||||
# ==========================================
|
||||
# MAX Bot — Deploy Script
|
||||
# ==========================================
|
||||
# Usage: bash max_bot_deploy.sh
|
||||
# Run on VPS as angel user (or from local with SSH)
|
||||
set -e
|
||||
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
|
||||
log() { echo -e "${CYAN}[$(date +%H:%M:%S)]${NC} $1"; }
|
||||
ok() { echo -e " ${GREEN}✅ $1${NC}"; }
|
||||
info() { echo -e " ${YELLOW}ℹ️ $1${NC}"; }
|
||||
fail() { echo -e " ${RED}❌ $1${NC}"; exit 1; }
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
echo -e "${CYAN}"
|
||||
echo "=========================================="
|
||||
echo " MAX Bot — Deploy"
|
||||
echo "=========================================="
|
||||
echo -e "${NC}"
|
||||
|
||||
BOT="/opt/projects/aegisone-py/max_bot"
|
||||
PY="/opt/projects/aegisone-py"
|
||||
NGX="/opt/projects/nginx-proxy"
|
||||
|
||||
# ==========================================
|
||||
# 1. Deploy max_bot files
|
||||
# ==========================================
|
||||
log "Deploying max_bot files..."
|
||||
mkdir -p "$BOT"
|
||||
rsync -a --delete ./ "$BOT/" 2>/dev/null || cp -r ./* "$BOT/"
|
||||
ok "Files deployed to $BOT"
|
||||
|
||||
# ==========================================
|
||||
# 2. Deploy nginx config
|
||||
# ==========================================
|
||||
log "Deploying nginx config for max.aegisone.ru..."
|
||||
cp max_bot/nginx/max-aegisone.conf "$NGX/conf.d/max-aegisone.conf"
|
||||
docker compose -f "$NGX/docker-compose.yml" exec nginx nginx -s reload 2>/dev/null || true
|
||||
ok "Nginx reloaded"
|
||||
|
||||
# ==========================================
|
||||
# 3. Run SQL migrations
|
||||
# ==========================================
|
||||
PG_CONTAINER=$(docker ps --filter "name=aegisone-postgres" --format "{{.ID}}" | head -1)
|
||||
if [ -n "$PG_CONTAINER" ]; then
|
||||
log "Running SQL migration v1.5.0..."
|
||||
cat "$PY/sql/v1.5.0_migration.sql" 2>/dev/null | docker exec -i "$PG_CONTAINER" psql -U aegisone -d aegisone 2>&1 | grep -v "^INSERT\|^CREATE\|^ALTER\|^CREATE INDEX" || true
|
||||
ok "SQL migration v1.5.0 applied"
|
||||
|
||||
log "Running SQL migration v1.5.2..."
|
||||
cat "$BOT/sql/migrations/v1.5.2_role_menu_permissions.sql" 2>/dev/null | docker exec -i "$PG_CONTAINER" psql -U aegisone -d aegisone 2>&1 | grep -v "^INSERT\|^CREATE\|^ALTER\|^CREATE INDEX" || true
|
||||
ok "SQL migration v1.5.2 applied"
|
||||
|
||||
log "Running SQL migration v1.5.5..."
|
||||
cat "$BOT/sql/migrations/v1.5.5_tables_and_seed.sql" 2>/dev/null | docker exec -i "$PG_CONTAINER" psql -U aegisone -d aegisone 2>&1 | grep -v "^INSERT\|^CREATE\|^ALTER\|^CREATE INDEX" || true
|
||||
ok "SQL migration v1.5.5 applied"
|
||||
else
|
||||
info "PostgreSQL container not found — run migration manually"
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 4. Run SQL migration v1.6.0 via docker exec pipe
|
||||
# ==========================================
|
||||
PG_CONTAINER=$(docker ps --filter "name=aegisone-postgres" --format "{{.ID}}" | head -1)
|
||||
if [ -n "$PG_CONTAINER" ]; then
|
||||
log "Running SQL migration v1.6.0..."
|
||||
cat "$BOT/sql/migrations/v1.6.0_fixes.sql" | docker exec -i "$PG_CONTAINER" psql -U aegisone -d aegisone 2>&1 | grep -v "^INSERT\|^UPDATE\|^DELETE\|^ALTER TABLE\|^CREATE INDEX\|^DROP VIEW" || true
|
||||
ok "SQL migration v1.6.0 applied"
|
||||
else
|
||||
info "PostgreSQL container not found — run migration manually"
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# 5. Build & start max_bot
|
||||
# ==========================================
|
||||
log "Building and starting max_bot..."
|
||||
cd "$BOT" && docker compose up -d --build
|
||||
ok "max_bot started on port 8002"
|
||||
|
||||
# ==========================================
|
||||
# 6. Health check
|
||||
# ==========================================
|
||||
log "Checking health..."
|
||||
sleep 3
|
||||
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8002/health 2>/dev/null || echo "000")
|
||||
if [ "$HTTP_CODE" = "200" ]; then
|
||||
ok "max_bot is healthy (HTTP $HTTP_CODE)"
|
||||
else
|
||||
info "Health check returned HTTP $HTTP_CODE — check logs: docker logs aegisone-max-bot"
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# Done
|
||||
# ==========================================
|
||||
echo ""
|
||||
echo -e "${GREEN}=========================================="
|
||||
echo " MAX Bot deploy complete!"
|
||||
echo "==========================================${NC}"
|
||||
echo ""
|
||||
echo " Bot webhook: https://max.aegisone.ru/webhook"
|
||||
echo " Bot API: https://max.aegisone.ru/api/"
|
||||
echo " Health check: http://localhost:8002/health"
|
||||
echo " Logs: docker logs -f aegisone-max-bot"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user