networks: openstatus: driver: bridge name: openstatus volumes: libsql-data: name: openstatus-libsql-data services: # External services libsql: container_name: openstatus-libsql image: ghcr.io/tursodatabase/libsql-server:latest networks: - openstatus ports: - "8080:8080" - "5001:5001" volumes: - libsql-data:/var/lib/sqld environment: - SQLD_NODE=primary healthcheck: test: [ "CMD-SHELL", 'perl -e ''use IO::Socket::INET; exit(IO::Socket::INET->new(PeerAddr=>"127.0.0.1:8080",Timeout=>1) ? 0 : 1);''', ] interval: 10s timeout: 5s retries: 5 start_period: 10s restart: unless-stopped # Idempotent: drizzle skips already-applied migrations on every up db-migrate: container_name: openstatus-db-migrate build: context: . dockerfile: packages/db/Dockerfile image: openstatus/db-migrate:latest # rebuild on every up so a stale image never skips new migrations pull_policy: build networks: - openstatus env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 depends_on: libsql: condition: service_healthy # retries absorb transient DB races; still settles to failure for the gates restart: on-failure:3 dashboard: container_name: openstatus-dashboard build: context: . dockerfile: apps/dashboard/Dockerfile image: openstatus/dashboard:latest networks: - openstatus ports: - "3000:3000" env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 - PORT=3000 - HOSTNAME=0.0.0.0 - AUTH_TRUST_HOST=true depends_on: db-migrate: condition: service_completed_successfully libsql: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/ || exit 1"] interval: 15s timeout: 10s retries: 3 start_period: 45s restart: unless-stopped status-page: container_name: openstatus-status-page build: context: . dockerfile: apps/status-page/Dockerfile image: openstatus/status-page:latest networks: - openstatus ports: - "3001:3000" env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 - PORT=3000 - HOSTNAME=0.0.0.0 - AUTH_TRUST_HOST=true depends_on: db-migrate: condition: service_completed_successfully libsql: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/ || exit 1"] interval: 15s timeout: 10s retries: 3 start_period: 45s restart: unless-stopped