Severian commited on
Commit
1c7d185
·
verified ·
1 Parent(s): 1140298

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +73 -29
Dockerfile CHANGED
@@ -199,6 +199,74 @@ wait_for_port() {
199
  return 1
200
  }
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  # Initialize PostgreSQL database if not already initialized
203
  if [ ! -f "$PGDATA/PG_VERSION" ]; then
204
  echo "Initializing PostgreSQL database..."
@@ -268,22 +336,15 @@ cd /app/api && poetry run python -m gunicorn app:app \
268
  echo "Waiting for API server to be ready..."
269
  wait_for_port 5001 "API" 30 2 "127.0.0.1"
270
 
271
- # Start frontend server with logging
272
  echo "Starting frontend server..."
273
- cd /app/web
274
- # Ensure the output log directory exists
275
- touch output.log
276
- echo "Starting Next.js server at $(date)" > output.log
277
-
278
- # Configure Next.js to listen on all interfaces
279
- export HOSTNAME="0.0.0.0"
280
- PORT=3000 node server.js >> output.log 2>&1 &
281
 
282
  # Get container IP
283
  CONTAINER_IP=$(hostname -i || ip route get 1 | awk '{print $7}' || echo "127.0.0.1")
284
  echo "Container IP: $CONTAINER_IP"
285
 
286
- # Wait for frontend to be ready with increased timeout
287
  echo "Waiting for frontend server to be ready..."
288
  if ! wait_for_port 3000 "Frontend" 60 5 "0.0.0.0"; then
289
  echo "Frontend server failed to start. Last 50 lines of frontend logs:"
@@ -300,25 +361,8 @@ wait_for_port 7860 "Nginx" 30 2 "0.0.0.0"
300
 
301
  echo "All services are running. Starting monitoring..."
302
 
303
- # Monitor all processes
304
- while true; do
305
- if ! pgrep -f "gunicorn" > /dev/null; then
306
- echo "API server died"
307
- tail -n 100 /app/api/gunicorn.error.log || true
308
- exit 1
309
- fi
310
- if ! pgrep -f "node server.js" > /dev/null; then
311
- echo "Frontend server died"
312
- tail -n 100 /app/web/output.log || true
313
- exit 1
314
- fi
315
- if ! pgrep -f "nginx" > /dev/null; then
316
- echo "Nginx died"
317
- tail -n 100 /var/log/nginx/error.log || true
318
- exit 1
319
- fi
320
- sleep 30
321
- done
322
  EOT
323
 
324
  # Set permissions for entrypoint script
 
199
  return 1
200
  }
201
 
202
+ # Function to start the frontend server
203
+ start_frontend() {
204
+ cd /app/web
205
+ # Kill any existing node processes
206
+ pkill -f "node server.js" || true
207
+ # Ensure the output log directory exists
208
+ touch output.log
209
+ echo "Starting Next.js server at $(date)" > output.log
210
+ # Configure Next.js to listen on all interfaces
211
+ export HOSTNAME="0.0.0.0"
212
+ export NODE_ENV=production
213
+ export PORT=3000
214
+ # Start the server with proper error handling
215
+ node server.js >> output.log 2>&1 &
216
+ local pid=$!
217
+ echo "Frontend server started with PID: $pid"
218
+ # Wait a bit to ensure process is stable
219
+ sleep 5
220
+ if ! kill -0 $pid 2>/dev/null; then
221
+ echo "Frontend server failed to start. Last 50 lines of logs:"
222
+ tail -n 50 output.log
223
+ return 1
224
+ fi
225
+ return 0
226
+ }
227
+
228
+ # Function to monitor and restart services if needed
229
+ monitor_services() {
230
+ local restart_count=0
231
+ local max_restarts=3
232
+
233
+ while true; do
234
+ if ! pgrep -f "gunicorn" > /dev/null; then
235
+ echo "API server died"
236
+ tail -n 100 /app/api/gunicorn.error.log || true
237
+ exit 1
238
+ fi
239
+
240
+ if ! pgrep -f "node server.js" > /dev/null; then
241
+ echo "Frontend server died. Attempting restart..."
242
+ if [ $restart_count -lt $max_restarts ]; then
243
+ restart_count=$((restart_count + 1))
244
+ echo "Restart attempt $restart_count of $max_restarts"
245
+ if start_frontend; then
246
+ echo "Frontend server restarted successfully"
247
+ # Reset counter on successful restart
248
+ restart_count=0
249
+ else
250
+ echo "Failed to restart frontend server"
251
+ tail -n 100 /app/web/output.log || true
252
+ exit 1
253
+ fi
254
+ else
255
+ echo "Maximum frontend restart attempts reached"
256
+ tail -n 100 /app/web/output.log || true
257
+ exit 1
258
+ fi
259
+ fi
260
+
261
+ if ! pgrep -f "nginx" > /dev/null; then
262
+ echo "Nginx died"
263
+ tail -n 100 /var/log/nginx/error.log || true
264
+ exit 1
265
+ fi
266
+ sleep 5
267
+ done
268
+ }
269
+
270
  # Initialize PostgreSQL database if not already initialized
271
  if [ ! -f "$PGDATA/PG_VERSION" ]; then
272
  echo "Initializing PostgreSQL database..."
 
336
  echo "Waiting for API server to be ready..."
337
  wait_for_port 5001 "API" 30 2 "127.0.0.1"
338
 
339
+ # Start frontend server
340
  echo "Starting frontend server..."
341
+ start_frontend
 
 
 
 
 
 
 
342
 
343
  # Get container IP
344
  CONTAINER_IP=$(hostname -i || ip route get 1 | awk '{print $7}' || echo "127.0.0.1")
345
  echo "Container IP: $CONTAINER_IP"
346
 
347
+ # Wait for frontend to be ready
348
  echo "Waiting for frontend server to be ready..."
349
  if ! wait_for_port 3000 "Frontend" 60 5 "0.0.0.0"; then
350
  echo "Frontend server failed to start. Last 50 lines of frontend logs:"
 
361
 
362
  echo "All services are running. Starting monitoring..."
363
 
364
+ # Start monitoring services
365
+ monitor_services
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
366
  EOT
367
 
368
  # Set permissions for entrypoint script