Add idle auto-shutdown configuration to deployment

- IDLE_TIMEOUT_MINUTES env var (default 30 min)
- restart: no policy so container stays stopped
- Optional wakeup service for auto-restart
- Document three restart options in readme
This commit is contained in:
2026-01-29 21:09:53 +00:00
parent b7663d5a31
commit cc5a8191b0
4 changed files with 301 additions and 0 deletions

64
deploy/docker-compose.yml Normal file
View File

@@ -0,0 +1,64 @@
services:
streamlit:
build:
context: ..
dockerfile: Dockerfile
container_name: py-dvt-ate-streamlit
restart: "no" # Don't auto-restart - we want it to stay stopped when idle
environment:
- IDLE_TIMEOUT_MINUTES=${IDLE_TIMEOUT_MINUTES:-30}
expose:
- "8080"
volumes:
- ./data:/app/data
networks:
- dvt-ate
nginx:
image: nginx:alpine
container_name: py-dvt-ate-nginx
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
expose:
- "80"
depends_on:
- streamlit
networks:
- dvt-ate
cloudflared:
image: cloudflare/cloudflared:latest
container_name: py-dvt-ate-tunnel
restart: unless-stopped
command: tunnel run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
depends_on:
- nginx
networks:
- dvt-ate
# Optional: Auto-start streamlit when stopped (checks every 30s)
# Uncomment if you want fully automatic restart on visit
# wakeup:
# image: docker:cli
# container_name: py-dvt-ate-wakeup
# restart: unless-stopped
# entrypoint: /bin/sh
# command:
# - -c
# - |
# while true; do
# sleep 30
# if ! docker inspect -f '{{.State.Running}}' py-dvt-ate-streamlit 2>/dev/null | grep -q true; then
# echo "[$(date)] Starting streamlit..."
# docker start py-dvt-ate-streamlit
# fi
# done
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock:ro
networks:
dvt-ate:
driver: bridge