OpceanAI commited on
Commit
5105a07
·
verified ·
1 Parent(s): 7eca0d6

Update start-container.sh

Browse files
Files changed (1) hide show
  1. start-container.sh +128 -32
start-container.sh CHANGED
@@ -5,71 +5,167 @@ LOG_PREFIX="[start-container]"
5
  log() { echo "${LOG_PREFIX} $(date -u +%Y-%m-%dT%H:%M:%SZ) $*"; }
6
  die() { log "FATAL: $*"; exit 1; }
7
 
8
- FORGEJO_HEALTH_URL="http://localhost:3000"
9
- MAX_START_SECS=120 # Forgejo arranca en segundos, no minutos
10
- SLEEP_INTERVAL=2
11
- MAX_ATTEMPTS=$(( MAX_START_SECS / SLEEP_INTERVAL ))
12
-
13
  # =============================================================
14
- # PASO 1 — Lanzar proxy PRIMERO para satisfacer HF health check
15
  # =============================================================
16
- log "PASO 1: Arrancando proxy FastAPI en puerto 7860..."
17
-
18
- [ -f /app.py ] || die "No se encuentra /app.py"
19
 
20
  python3 /app.py &
21
  PROXY_PID=$!
22
- log "Proxy lanzado con PID ${PROXY_PID}"
23
-
24
  sleep 2
25
-
26
- kill -0 "${PROXY_PID}" 2>/dev/null || die "El proxy murió al arrancar. Revisa app.py."
27
  log "Proxy activo en :7860 ✓"
28
 
29
  # =============================================================
30
- # PASO 2 — Preparar directorio de datos de Forgejo
31
  # =============================================================
32
- log "PASO 2: Preparando directorios de Forgejo..."
 
 
 
 
 
 
 
 
 
 
33
 
34
- mkdir -p /data/forgejo /data/ssh
35
- chown -R git:git /data 2>/dev/null || true
36
 
37
  # =============================================================
38
- # PASO 3 — Lanzar Forgejo en background
39
  # =============================================================
40
- log "PASO 3: Arrancando Gitea como usuario git..."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  su git -c "gitea web" &
42
- FORGEJO_PID=$!
43
- log "Gitea lanzado con PID ${FORGEJO_PID}"
 
44
  # =============================================================
45
- # PASO 4 — Health check (mucho más rápido que GitLab)
46
  # =============================================================
47
- log "PASO 4: Esperando que Forgejo esté disponible en :3000..."
48
 
49
  attempt=0
50
  while true; do
51
- if curl -sSf --max-time 3 "${FORGEJO_HEALTH_URL}" >/dev/null 2>&1; then
52
- log "✓ Forgejo está listo y respondiendo"
53
  break
54
  fi
55
 
56
  attempt=$(( attempt + 1 ))
57
 
58
- kill -0 "${PROXY_PID}" 2>/dev/null || die "Proxy murió mientras esperábamos a Forgejo."
 
59
 
60
- if [ "${attempt}" -ge "${MAX_ATTEMPTS}" ]; then
61
- log "ERROR: Forgejo no respondió en ${MAX_START_SECS}s. Continuando igual."
62
  break
63
  fi
64
 
65
- (( attempt % 10 == 0 )) && log "Esperando Forgejo... ${attempt}/${MAX_ATTEMPTS}"
66
- sleep "${SLEEP_INTERVAL}"
67
  done
68
 
69
  # =============================================================
70
- # PASO 5 — Mantener container vivo
71
  # =============================================================
72
- log "PASO 5: Todo listo. Container vivo via proxy PID ${PROXY_PID}"
73
  wait "${PROXY_PID}"
74
 
75
  EXIT_CODE=$?
 
5
  log() { echo "${LOG_PREFIX} $(date -u +%Y-%m-%dT%H:%M:%SZ) $*"; }
6
  die() { log "FATAL: $*"; exit 1; }
7
 
 
 
 
 
 
8
  # =============================================================
9
+ # PASO 1 — Proxy PRIMERO para satisfacer HF health check
10
  # =============================================================
11
+ log "PASO 1: Arrancando proxy en puerto 7860..."
 
 
12
 
13
  python3 /app.py &
14
  PROXY_PID=$!
 
 
15
  sleep 2
16
+ kill -0 "${PROXY_PID}" 2>/dev/null || die "Proxy murió al arrancar."
 
17
  log "Proxy activo en :7860 ✓"
18
 
19
  # =============================================================
20
+ # PASO 2 — Inicializar MySQL (solo primera vez)
21
  # =============================================================
22
+ log "PASO 2: Preparando MySQL..."
23
+
24
+ if [ ! -d /var/lib/mysql/mysql ]; then
25
+ log "Primera vez — inicializando directorio de datos MySQL..."
26
+ mysql_install_db \
27
+ --user=mysql \
28
+ --datadir=/var/lib/mysql \
29
+ --skip-test-db \
30
+ >/dev/null 2>&1
31
+ log "Directorio MySQL inicializado ✓"
32
+ fi
33
 
34
+ # Asegurar permisos correctos
35
+ chown -R mysql:mysql /var/lib/mysql /run/mysqld
36
 
37
  # =============================================================
38
+ # PASO 3 — Arrancar MySQL con TCP habilitado explícitamente
39
  # =============================================================
40
+ log "PASO 3: Arrancando MySQL..."
41
+
42
+ mysqld \
43
+ --user=mysql \
44
+ --datadir=/var/lib/mysql \
45
+ --socket=/run/mysqld/mysqld.sock \
46
+ --pid-file=/run/mysqld/mysqld.pid \
47
+ --bind-address=127.0.0.1 \
48
+ --port=3306 \
49
+ --skip-networking=OFF \
50
+ --skip-grant-tables=OFF \
51
+ &
52
+
53
+ MYSQL_PID=$!
54
+ log "MySQL lanzado con PID ${MYSQL_PID}"
55
+
56
+ # Esperar a que MySQL acepte conexiones (máx 60s)
57
+ log "Esperando que MySQL esté listo..."
58
+ attempt=0
59
+ while true; do
60
+ if mysqladmin \
61
+ --socket=/run/mysqld/mysqld.sock \
62
+ --user=root \
63
+ ping --silent 2>/dev/null; then
64
+ log "MySQL responde al ping ✓"
65
+ break
66
+ fi
67
+
68
+ # Verificar también por TCP
69
+ if mysqladmin \
70
+ --host=127.0.0.1 \
71
+ --port=3306 \
72
+ --user=root \
73
+ ping --silent 2>/dev/null; then
74
+ log "MySQL responde por TCP ✓"
75
+ break
76
+ fi
77
+
78
+ attempt=$(( attempt + 1 ))
79
+ [ "${attempt}" -ge 30 ] && die "MySQL no arrancó en 60s"
80
+ sleep 2
81
+ done
82
+
83
+ # =============================================================
84
+ # PASO 4 — Crear base de datos y usuario para Gitea
85
+ # =============================================================
86
+ log "PASO 4: Configurando base de datos Gitea..."
87
+
88
+ mysql \
89
+ --socket=/run/mysqld/mysqld.sock \
90
+ --user=root \
91
+ 2>/dev/null <<EOF
92
+ CREATE DATABASE IF NOT EXISTS gitea
93
+ CHARACTER SET utf8mb4
94
+ COLLATE utf8mb4_unicode_ci;
95
+
96
+ CREATE USER IF NOT EXISTS 'gitea'@'127.0.0.1' IDENTIFIED BY 'gitea';
97
+ CREATE USER IF NOT EXISTS 'gitea'@'localhost' IDENTIFIED BY 'gitea';
98
+
99
+ GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'127.0.0.1';
100
+ GRANT ALL PRIVILEGES ON gitea.* TO 'gitea'@'localhost';
101
+
102
+ FLUSH PRIVILEGES;
103
+ EOF
104
+
105
+ log "Base de datos 'gitea' y usuario 'gitea' listos ✓"
106
+
107
+ # Verificar que la conexión TCP funciona con el usuario gitea
108
+ log "Verificando conexión TCP con usuario gitea..."
109
+ attempt=0
110
+ while true; do
111
+ if mysql \
112
+ --host=127.0.0.1 \
113
+ --port=3306 \
114
+ --user=gitea \
115
+ --password=gitea \
116
+ --execute="SELECT 1;" \
117
+ gitea >/dev/null 2>&1; then
118
+ log "Conexión TCP a MySQL con usuario gitea: OK ✓"
119
+ break
120
+ fi
121
+
122
+ attempt=$(( attempt + 1 ))
123
+ [ "${attempt}" -ge 15 ] && die "No se pudo conectar a MySQL por TCP como usuario gitea"
124
+ sleep 2
125
+ done
126
+
127
+ # =============================================================
128
+ # PASO 5 — Arrancar Gitea como usuario git
129
+ # =============================================================
130
+ log "PASO 5: Arrancando Gitea como usuario git..."
131
+
132
+ mkdir -p /data/gitea /data/ssh
133
+ chown -R git:git /data
134
+
135
  su git -c "gitea web" &
136
+ GITEA_PID=$!
137
+ log "Gitea lanzado con PID ${GITEA_PID}"
138
+
139
  # =============================================================
140
+ # PASO 6 — Health check Gitea
141
  # =============================================================
142
+ log "PASO 6: Esperando que Gitea esté disponible en :3000..."
143
 
144
  attempt=0
145
  while true; do
146
+ if curl -sSf --max-time 3 http://localhost:3000 >/dev/null 2>&1; then
147
+ log "✓ Gitea está listo y respondiendo"
148
  break
149
  fi
150
 
151
  attempt=$(( attempt + 1 ))
152
 
153
+ # Si el proxy murió, algo está muy mal
154
+ kill -0 "${PROXY_PID}" 2>/dev/null || die "Proxy murió mientras esperábamos Gitea."
155
 
156
+ if [ "${attempt}" -ge 60 ]; then
157
+ log "WARN: Gitea no respondió en 120s. El proxy seguirá mostrando spinner."
158
  break
159
  fi
160
 
161
+ (( attempt % 10 == 0 )) && log "Esperando Gitea... ${attempt}/60"
162
+ sleep 2
163
  done
164
 
165
  # =============================================================
166
+ # PASO 7 — Mantener container vivo
167
  # =============================================================
168
+ log "PASO 7: Todo listo. Container vivo via proxy PID ${PROXY_PID}"
169
  wait "${PROXY_PID}"
170
 
171
  EXIT_CODE=$?