Akiragpu / scripts /init_pg.sh
Isaac Quarenta
feat(backup): liga o pg_backup.sh (existia mas nunca era lancado) + restore remoto no arranque
891dd4c
Raw History Blame Contribute Delete
2.24 kB
#!/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