Simplify deployment - use physics pause instead of container shutdown

- IDLE_PAUSE_SECONDS replaces IDLE_TIMEOUT_MINUTES
- Container stays running, physics pauses when idle
- No restart mechanism needed
- Remove wakeup service (no longer needed)
This commit is contained in:
2026-01-29 21:37:18 +00:00
parent 9d6086a4e5
commit ddf2c9439d
3 changed files with 14 additions and 49 deletions

View File

@@ -2,7 +2,7 @@
# Get this from: Cloudflare Zero Trust > Networks > Tunnels > Create > Docker # Get this from: Cloudflare Zero Trust > Networks > Tunnels > Create > Docker
CLOUDFLARE_TUNNEL_TOKEN=your-tunnel-token-here CLOUDFLARE_TUNNEL_TOKEN=your-tunnel-token-here
# Idle auto-shutdown (minutes) # Idle auto-pause (seconds)
# App exits after this many minutes with no active viewers # Physics engine pauses after this many seconds with no viewers
# Set to 0 to disable (app runs forever) # CPU drops to ~0% when paused, resumes instantly on visit
IDLE_TIMEOUT_MINUTES=30 IDLE_PAUSE_SECONDS=30

View File

@@ -4,9 +4,9 @@ services:
context: .. context: ..
dockerfile: Dockerfile dockerfile: Dockerfile
container_name: py-dvt-ate-streamlit container_name: py-dvt-ate-streamlit
restart: "no" # Don't auto-restart - we want it to stay stopped when idle restart: unless-stopped
environment: environment:
- IDLE_TIMEOUT_MINUTES=${IDLE_TIMEOUT_MINUTES:-30} - IDLE_PAUSE_SECONDS=${IDLE_PAUSE_SECONDS:-30} # Pause physics after 30s idle
expose: expose:
- "8080" - "8080"
volumes: volumes:
@@ -39,26 +39,6 @@ services:
networks: networks:
- dvt-ate - 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: networks:
dvt-ate: dvt-ate:
driver: bridge driver: bridge

View File

@@ -2,37 +2,22 @@
Deploy the DVT Simulation Platform dashboard with Cloudflare Tunnel for public access. Deploy the DVT Simulation Platform dashboard with Cloudflare Tunnel for public access.
## Idle Auto-Shutdown ## Idle Auto-Pause
The app automatically shuts down after a period of inactivity to save resources. The physics simulation automatically pauses when no one is viewing the dashboard.
**Configuration:** **Configuration:**
```bash ```bash
# In .env or docker-compose.yml # In .env or docker-compose.yml
IDLE_TIMEOUT_MINUTES=30 # Shutdown after 30 min idle (0 = disabled) IDLE_PAUSE_SECONDS=30 # Pause physics after 30s idle
``` ```
**Behaviour:** **Behaviour:**
- App tracks activity when someone has the dashboard open - When someone views the dashboard, physics runs normally
- After `IDLE_TIMEOUT_MINUTES` with no viewers, the container exits - After `IDLE_PAUSE_SECONDS` with no viewers, physics engine pauses
- nginx will show a 502 error until the container is restarted - CPU drops to ~0% while paused
- Physics resumes instantly when someone visits
**Restart Options:** - Container stays running (no restart needed)
1. **Manual restart** (simplest):
```bash
docker start py-dvt-ate-streamlit
```
2. **Auto-restart on poll** (uncomment `wakeup` service in docker-compose.yml):
- Checks every 30 seconds if streamlit is stopped
- Automatically restarts it
- Adds ~30 second delay before app is available
3. **Always running** (set `IDLE_TIMEOUT_MINUTES=0`):
- App never auto-shuts down
- Uses minimal CPU when idle (~0.1%)
- Memory stays allocated (~300-400MB)
## Architecture ## Architecture