From f04e93ddb4ef6d612038a6bab6bd5c83f84f27b0 Mon Sep 17 00:00:00 2001 From: Matt Date: Thu, 5 Jun 2025 18:00:12 +0200 Subject: [PATCH] Fix container health checks and expose services externally - Replace artisan-based health check with php-fpm process check - Change port bindings from localhost to all interfaces (0.0.0.0) - Add restart policies to ensure service availability - Extend API startup period from 60s to 90s - Add comprehensive restart instructions and troubleshooting guide This allows external access to the application and improves container reliability by fixing health check failures. --- RESTART_INSTRUCTIONS.md | 43 +++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 11 +++++++---- 2 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 RESTART_INSTRUCTIONS.md diff --git a/RESTART_INSTRUCTIONS.md b/RESTART_INSTRUCTIONS.md new file mode 100644 index 00000000..8863b26c --- /dev/null +++ b/RESTART_INSTRUCTIONS.md @@ -0,0 +1,43 @@ +# How to Restart OpnForm Containers + +Since you're using a web-based Docker management interface, follow these steps: + +## 1. Stop All Containers +In your Docker management interface: +- Select all OpnForm containers +- Click "Stop" or use the stop button +- Wait for all containers to stop + +## 2. Start Containers in Correct Order +Start the containers in this order: +1. **opnform-db** - Wait until healthy +2. **opnform-redis** - Wait until healthy +3. **opnform-api** - Wait until it shows as running +4. **opnform-api-nginx** - This should now start successfully +5. **opnform-api-worker** - Start this +6. **opnform-api-scheduler** - Start this +7. **opnform-client** - Start this last + +## 3. Verify Services +After all containers are running: +- Check that `opnform-api-nginx` is healthy (not "starting") +- Access the UI at: http://YOUR-SERVER-IP:7655 +- API should be available at: http://YOUR-SERVER-IP:7654 + +## What Changed +1. **Fixed PHP-FPM health check** - Changed from running artisan command to checking if php-fpm process exists +2. **Added restart policies** - Containers will restart unless manually stopped +3. **Changed port bindings** - From 127.0.0.1 (localhost only) to 0.0.0.0 (accessible from any IP) +4. **Extended start period** - Gave API container more time to start before health checks + +## Troubleshooting +If api-nginx is still unhealthy: +1. Check logs of opnform-api container +2. Verify PHP-FPM is running: Look for php-fpm processes in the api container +3. Check api-nginx logs for connection errors + +## Security Note +The services are now exposed on all network interfaces. For production: +- Use a firewall to restrict access +- Configure your host nginx with SSL +- Or revert to localhost binding after testing diff --git a/docker-compose.yml b/docker-compose.yml index 13803b8e..840170c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -26,11 +26,12 @@ services: redis: condition: service_healthy healthcheck: - test: ["CMD-SHELL", "php /usr/share/nginx/html/artisan about || exit 1"] + test: ["CMD-SHELL", "pgrep php-fpm > /dev/null || exit 1"] interval: 30s timeout: 15s retries: 3 - start_period: 60s + start_period: 90s + restart: unless-stopped api-nginx: image: nginx:alpine @@ -39,7 +40,7 @@ services: - ./docker/api-nginx.conf:/etc/nginx/nginx.conf:ro - opnform_storage:/usr/share/nginx/html/storage:ro ports: - - "127.0.0.1:7654:80" # API on port 7654 + - "0.0.0.0:7654:80" # API on port 7654 - accessible from any IP depends_on: - api healthcheck: @@ -47,6 +48,7 @@ services: interval: 30s timeout: 10s retries: 3 + restart: unless-stopped api-worker: image: jhumanj/opnform-api:latest @@ -120,7 +122,7 @@ services: image: jhumanj/opnform-client:latest container_name: opnform-client ports: - - "127.0.0.1:7655:3000" # UI on port 7655 + - "0.0.0.0:7655:3000" # UI on port 7655 - accessible from any IP env_file: - ./client/.env healthcheck: @@ -129,6 +131,7 @@ services: timeout: 10s retries: 3 start_period: 45s + restart: unless-stopped redis: image: redis:7