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 tinybird-local: container_name: openstatus-tinybird image: tinybirdco/tinybird-local:latest platform: linux/amd64 networks: - openstatus ports: - "7181:7181" environment: - COMPATIBILITY_MODE=1 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:7181/"] interval: 15s timeout: 5s retries: 5 start_period: 20s restart: unless-stopped # Internal Services workflows: container_name: openstatus-workflows build: context: . dockerfile: apps/workflows/Dockerfile image: openstatus/workflows:latest networks: - openstatus ports: - "3000:3000" volumes: - ./data:/app/data env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 - PORT=3000 depends_on: libsql: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/ping || exit 1"] interval: 15s timeout: 10s retries: 3 start_period: 30s restart: unless-stopped server: container_name: openstatus-server build: context: . dockerfile: apps/server/Dockerfile image: openstatus/server:latest networks: - openstatus ports: - "3001:3000" env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 - PORT=3000 depends_on: workflows: condition: service_healthy libsql: condition: service_healthy healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:3000/ping || exit 1"] interval: 15s timeout: 10s retries: 3 start_period: 30s restart: unless-stopped private-location: container_name: openstatus-private-location build: context: apps/private-location dockerfile: Dockerfile image: openstatus/private-location:latest networks: - openstatus ports: - "8081:8080" env_file: - .env.docker environment: - DB_URL=http://libsql:8080 - TINYBIRD_URL=http://tinybird-local:7181 - GIN_MODE=release - PORT=8080 depends_on: server: condition: service_healthy healthcheck: test: [ "CMD", "wget", "--spider", "-q", "http://localhost:8080/health", ] interval: 15s timeout: 10s retries: 3 start_period: 30s restart: unless-stopped dashboard: container_name: openstatus-dashboard build: context: . dockerfile: apps/dashboard/Dockerfile image: openstatus/dashboard:latest networks: - openstatus ports: - "3002:3000" env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 - PORT=3000 - HOSTNAME=0.0.0.0 - AUTH_TRUST_HOST=true depends_on: workflows: condition: service_healthy libsql: condition: service_healthy server: 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: - "3003:3000" env_file: - .env.docker environment: - DATABASE_URL=http://libsql:8080 - PORT=3000 - HOSTNAME=0.0.0.0 - AUTH_TRUST_HOST=true depends_on: workflows: condition: service_healthy libsql: condition: service_healthy server: 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