(feature): docker health checks (#12124)

* Add Docker container health checks

* Use invoke tasks for Docker container health checks

Updates server and worker healthchecks to use invoke server-health
and invoke worker-health as requested in #12124 review.

Refs #12124

* Added HTTP host check to server health check

* Add health-check endpoint for Caddyfile

* Simplify health check for Caddy

* Remove test file

---------

Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
Co-authored-by: DESKTOP-691E36A\Administrator <br198064@gmail.com>
Co-authored-by: Matthias Mair <code@mjmair.com>
This commit is contained in:
getpwnam
2026-08-31 16:46:46 +10:00
committed by GitHub
co-authored by Oliver DESKTOP-691E36A\Administrator Matthias Mair
parent 02da01dfec
commit 773ed4eb3a
3 changed files with 76 additions and 6 deletions
+12
View File
@@ -30,6 +30,18 @@
}
}
# Internal-only health check endpoint, on port 9090
# This only serves to check that the Caddy container is running correctly
:9090 {
handle /api/system/health/* {
reverse_proxy {$INVENTREE_SERVER:"http://inventree-server:8000"}
}
handle {
respond 404
}
}
# The default server address is configured in the .env file
# If not specified, the proxy listens for all http/https traffic
# If you need to listen on multiple addresses, or use a different port, you can modify this section directly
+44 -4
View File
@@ -54,6 +54,12 @@ services:
volumes:
# Map 'data' volume such that postgres database is stored externally
- ${INVENTREE_EXT_VOLUME:?You must specify the 'INVENTREE_EXT_VOLUME' variable in the .env file!}:/var/lib/postgresql/data/:z
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U "$${POSTGRES_USER}" -d "$${POSTGRES_DB}"']
interval: 15s
timeout: 5s
retries: 10
start_period: 20s
restart: unless-stopped
# redis acts as database cache manager
@@ -69,6 +75,12 @@ services:
- ${INVENTREE_CACHE_PORT:-6379}
volumes:
- ${INVENTREE_EXT_VOLUME}/redis:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 15s
timeout: 5s
retries: 10
start_period: 10s
restart: always
# InvenTree web server service
@@ -81,8 +93,10 @@ services:
expose:
- ${INVENTREE_WEB_PORT:-8000}
depends_on:
- inventree-db
- inventree-cache
inventree-db:
condition: service_healthy
inventree-cache:
condition: service_healthy
env_file:
- .env
environment:
@@ -90,6 +104,16 @@ services:
volumes:
# Data volume must map to /home/inventree/data
- ${INVENTREE_EXT_VOLUME}:/home/inventree/data:z
healthcheck:
test:
[
'CMD-SHELL',
'invoke server-health --address "http://localhost:$${INVENTREE_WEB_PORT:-8000}"',
]
interval: 20s
timeout: 5s
retries: 10
start_period: 60s
restart: unless-stopped
# Background worker process handles long-running or periodic tasks
@@ -99,12 +123,19 @@ services:
container_name: inventree-worker
command: invoke worker
depends_on:
- inventree-server
inventree-server:
condition: service_healthy
env_file:
- .env
volumes:
# Data volume must map to /home/inventree/data
- ${INVENTREE_EXT_VOLUME}:/home/inventree/data:z
healthcheck:
test: ['CMD-SHELL', 'invoke worker-health']
interval: 60s
timeout: 10s
retries: 3
start_period: 180s
restart: unless-stopped
# caddy acts as reverse proxy and static file server
@@ -115,12 +146,21 @@ services:
image: caddy:alpine
restart: always
depends_on:
- inventree-server
inventree-server:
condition: service_healthy
inventree-worker:
condition: service_healthy
ports:
- ${INVENTREE_HTTP_PORT:-80}:80
- ${INVENTREE_HTTPS_PORT:-443}:443
env_file:
- .env
healthcheck:
test: ['CMD', 'wget', '--spider', '-q', 'http://127.0.0.1:9090/api/system/health/']
interval: 20s
timeout: 5s
retries: 10
start_period: 20s
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro,z
- ${INVENTREE_EXT_VOLUME}/static:/var/www/static:z