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.
This commit is contained in:
parent
878d72b785
commit
f04e93ddb4
|
|
@ -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
|
||||||
|
|
@ -26,11 +26,12 @@ services:
|
||||||
redis:
|
redis:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
healthcheck:
|
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
|
interval: 30s
|
||||||
timeout: 15s
|
timeout: 15s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 60s
|
start_period: 90s
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
api-nginx:
|
api-nginx:
|
||||||
image: nginx:alpine
|
image: nginx:alpine
|
||||||
|
|
@ -39,7 +40,7 @@ services:
|
||||||
- ./docker/api-nginx.conf:/etc/nginx/nginx.conf:ro
|
- ./docker/api-nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
- opnform_storage:/usr/share/nginx/html/storage:ro
|
- opnform_storage:/usr/share/nginx/html/storage:ro
|
||||||
ports:
|
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:
|
depends_on:
|
||||||
- api
|
- api
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
@ -47,6 +48,7 @@ services:
|
||||||
interval: 30s
|
interval: 30s
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
api-worker:
|
api-worker:
|
||||||
image: jhumanj/opnform-api:latest
|
image: jhumanj/opnform-api:latest
|
||||||
|
|
@ -120,7 +122,7 @@ services:
|
||||||
image: jhumanj/opnform-client:latest
|
image: jhumanj/opnform-client:latest
|
||||||
container_name: opnform-client
|
container_name: opnform-client
|
||||||
ports:
|
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:
|
env_file:
|
||||||
- ./client/.env
|
- ./client/.env
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|
@ -129,6 +131,7 @@ services:
|
||||||
timeout: 10s
|
timeout: 10s
|
||||||
retries: 3
|
retries: 3
|
||||||
start_period: 45s
|
start_period: 45s
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7
|
image: redis:7
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue