#!/bin/bash # init_pg.sh — Inicia PostgreSQL + restaura backup + sobe app FastAPI com 2 workers set -e echo "🔧 [INIT] Iniciando PostgreSQL..." # ✅ Cria diretório persistente se não existir mkdir -p /data/pgdata chown -R postgres:postgres /data/pgdata 2>/dev/null || true chmod 700 /data/pgdata # Verifica se PostgreSQL já inicializado (dados persistidos) if [ ! -f "$PGDATA/PG_VERSION" ]; then echo "📦 [INIT] Primeira execução — inicializando PostgreSQL..." su - postgres -c "initdb -D $PGDATA" 2>/dev/null || true fi su - postgres -c "pg_ctl -D $PGDATA start" 2>/dev/null || pg_ctlcluster 15 main start 2>/dev/null || service postgresql start for i in $(seq 1 30); do if pg_isready -q 2>/dev/null; then echo "✅ [INIT] PostgreSQL pronto" break fi sleep 1 done su - postgres -c "psql -tc \"SELECT 1 FROM pg_roles WHERE rolname='akira'\" | grep -q 1" || \ su - postgres -c "psql -c \"CREATE USER akira WITH PASSWORD 'akira' SUPERUSER;\"" su - postgres -c "psql -tc \"SELECT 1 FROM pg_database WHERE datname='akira'\" | grep -q 1" || \ su - postgres -c "psql -c \"CREATE DATABASE akira OWNER akira;\"" # Historico de conversas: sem Persistent Storage, o /data/pgdata morre em cada # deploy — so o dump no dataset HF sobrevive. Tenta baixar o ultimo antes de # subir a app (dentro de pg_backup.sh so restaura se a BD estiver vazia). echo "[INIT] A restaurar historico (dataset HF -> PostgreSQL)..." bash /akira/scripts/pg_backup.sh restore-from-hf || true # Loop de backup periodico (dump local + upload para o dataset HF). # Antes este script existia mas NUNCA era lancado => nenhum backup era feito. echo "[INIT] A iniciar backup periodico..." mkdir -p /akira/data/cloud_sync nohup bash /akira/scripts/pg_backup.sh >> /akira/data/cloud_sync/backup.log 2>&1 & echo "🚀 [INIT] Iniciando Training Worker em background..." python /akira/treinamento_worker.py & TRAINING_PID=$! trap "kill $TRAINING_PID 2>/dev/null" EXIT echo "🚀 [INIT] Iniciando Akira FastAPI com 2 workers..." exec uvicorn main:app \ --host 0.0.0.0 \ --port 7860 \ --workers 2 \ --timeout-keep-alive 30 \ --limit-concurrency 200