akra35567 commited on
Commit
c08f1c8
·
verified ·
1 Parent(s): 3a840e3

Upload 2 files

Browse files
Files changed (2) hide show
  1. scripts/init_pg.sh +49 -0
  2. scripts/pg_backup.sh +80 -0
scripts/init_pg.sh ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # init_pg.sh — Inicia PostgreSQL + restaura backup + sobe app com 2 workers
3
+
4
+ set -e
5
+
6
+ echo "🔧 [INIT] Iniciando PostgreSQL..."
7
+
8
+ # Inicia PostgreSQL como usuário postgres
9
+ pg_ctlcluster 14 main start 2>/dev/null || pg_ctlcluster 15 main start 2>/dev/null || \
10
+ su - postgres -c "pg_ctl -D $PGDATA start" 2>/dev/null || \
11
+ service postgresql start
12
+
13
+ # Aguarda PostgreSQL estar pronto
14
+ for i in $(seq 1 30); do
15
+ if pg_isready -q 2>/dev/null; then
16
+ echo "✅ [INIT] PostgreSQL pronto"
17
+ break
18
+ fi
19
+ sleep 1
20
+ done
21
+
22
+ # Cria usuário e banco se não existirem
23
+ su - postgres -c "psql -tc \"SELECT 1 FROM pg_roles WHERE rolname='akira'\" | grep -q 1" || \
24
+ su - postgres -c "psql -c \"CREATE USER akira WITH PASSWORD 'akira' SUPERUSER;\""
25
+
26
+ su - postgres -c "psql -tc \"SELECT 1 FROM pg_database WHERE datname='akira'\" | grep -q 1" || \
27
+ su - postgres -c "psql -c \"CREATE DATABASE akira OWNER akira;\""
28
+
29
+ # Tenta restaurar backup se existir
30
+ echo "🔄 [INIT] Verificando backup..."
31
+ BACKUP_FILE="/akira/data/cloud_sync/akira_dump.sql"
32
+ if [ -f "$BACKUP_FILE" ]; then
33
+ echo "📥 [INIT] Restaurando backup do PostgreSQL..."
34
+ PGPASSWORD=akira psql -h localhost -U akira -d akira -f "$BACKUP_FILE" 2>/dev/null || \
35
+ echo "⚠️ [INIT] Restauração falhou (banco pode já ter dados)"
36
+ fi
37
+
38
+ echo "🚀 [INIT] Iniciando Akira com 2 workers..."
39
+
40
+ # Inicia aplicação com 2 workers + 8 threads cada
41
+ exec gunicorn \
42
+ --bind 0.0.0.0:7860 \
43
+ --workers 2 \
44
+ --threads 8 \
45
+ --timeout 180 \
46
+ --preload \
47
+ --graceful-timeout 30 \
48
+ --keep-alive 5 \
49
+ main:app
scripts/pg_backup.sh ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ # pg_backup.sh — Backup periódico do PostgreSQL → HF Dataset
3
+ # Executa a cada 2 horas via cron ou background loop
4
+
5
+ set -e
6
+
7
+ BACKUP_DIR="/akira/data/cloud_sync"
8
+ BACKUP_FILE="$BACKUP_DIR/akira_dump.sql"
9
+ DATASET_NAME="${HF_BACKUP_DATASET:-akira-db-backup}"
10
+ SYNC_INTERVAL=${BACKUP_SYNC_INTERVAL:-7200}
11
+
12
+ mkdir -p "$BACKUP_DIR"
13
+
14
+ backup_pg() {
15
+ echo "🔄 [BACKUP] Iniciando backup do PostgreSQL..."
16
+
17
+ PGPASSWORD=akira pg_dump -h localhost -U akira -d akira \
18
+ --format=custom \
19
+ --compress=9 \
20
+ --file="$BACKUP_DIR/akira_dump.custom" 2>/dev/null
21
+
22
+ PGPASSWORD=akira pg_dump -h localhost -U akira -d akira \
23
+ > "$BACKUP_FILE" 2>/dev/null
24
+
25
+ if [ $? -eq 0 ]; then
26
+ echo "✅ [BACKUP] Dump concluído: $(du -h $BACKUP_FILE | cut -f1)"
27
+
28
+ # Upload para HF Dataset se HF_TOKEN estiver configurado
29
+ if [ -n "$HF_TOKEN" ]; then
30
+ echo "📤 [BACKUP] Enviando para HF Dataset: $DATASET_NAME"
31
+ python3 -c "
32
+ import os, sys
33
+ from huggingface_hub import HfApi
34
+ try:
35
+ api = HfApi(token='$HF_TOKEN')
36
+ repo_id = os.environ.get('HF_AUTHOR', 'akra35567') + '/' + '$DATASET_NAME'
37
+ api.upload_folder(
38
+ folder_path='$BACKUP_DIR',
39
+ repo_id=repo_id,
40
+ repo_type='dataset',
41
+ allow_patterns=['akira_dump.*'],
42
+ )
43
+ print('✅ [BACKUP] Upload concluído')
44
+ except Exception as e:
45
+ print(f'⚠️ [BACKUP] Upload falhou: {e}')
46
+ " 2>/dev/null || echo "⚠️ [BACKUP] Upload pulado"
47
+ fi
48
+ else
49
+ echo "❌ [BACKUP] Dump falhou"
50
+ fi
51
+ }
52
+
53
+ restore_pg() {
54
+ echo "📥 [RESTORE] Verificando backup para restaurar..."
55
+
56
+ if [ -f "$BACKUP_FILE" ]; then
57
+ echo "📥 [RESTORE] Restaurando backup..."
58
+ PGPASSWORD=akira psql -h localhost -U akira -d akira -f "$BACKUP_FILE" 2>/dev/null
59
+ echo "✅ [RESTORE] Concluído"
60
+ elif [ -f "$BACKUP_DIR/akira_dump.custom" ]; then
61
+ echo "📥 [RESTORE] Restaurando backup custom..."
62
+ PGPASSWORD=akira pg_restore -h localhost -U akira -d akira "$BACKUP_DIR/akira_dump.custom" 2>/dev/null
63
+ echo "✅ [RESTORE] Concluído"
64
+ else
65
+ echo "ℹ️ [RESTORE] Nenhum backup encontrado"
66
+ fi
67
+ }
68
+
69
+ # Se chamado com argumento "restore"
70
+ if [ "$1" = "restore" ]; then
71
+ restore_pg
72
+ exit 0
73
+ fi
74
+
75
+ # Loop de backup periódico
76
+ echo "⏱️ [BACKUP] Loop iniciado (intervalo: ${SYNC_INTERVAL}s)"
77
+ while true; do
78
+ backup_pg
79
+ sleep $SYNC_INTERVAL
80
+ done