services: db: image: timescale/timescaledb:latest-pg16 restart: unless-stopped volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_DB: landale POSTGRES_USER: landale POSTGRES_PASSWORD: landale ports: - '5433:5432' healthcheck: test: ['CMD-SHELL', 'pg_isready -U landale -d landale'] interval: 10s timeout: 5s retries: 5 command: ['postgres', '-c', 'log_min_messages=error'] tailscale-server: image: tailscale/tailscale:latest hostname: landale-server environment: - TS_AUTHKEY=${TAILSCALE_CLIENT_SECRET} - TS_EXTRA_ARGS=--advertise-tags=tag:container - TS_STATE_DIR=/var/lib/tailscale - TS_USERSPACE=false volumes: - tailscale_state:/var/lib/tailscale devices: - /dev/net/tun:/dev/net/tun cap_add: - net_admin restart: unless-stopped ports: - '7175:7175' - '8080:8080' - '8081:8081' - '8008:8008' server: build: context: ./apps/server dockerfile: Dockerfile target: runtime restart: unless-stopped volumes: - server_data:/app/data environment: DATABASE_URL: postgres://landale:landale@db:5432/landale MIX_ENV: prod SECRET_KEY_BASE: ${SECRET_KEY_BASE:-insecure_default_key_for_development_only} PHX_HOST: ${PHX_HOST:-localhost} PORT: ${PORT:-7175} env_file: - .env depends_on: db: condition: service_healthy tailscale-server: condition: service_started network_mode: service:tailscale-server healthcheck: test: ['CMD', '/app/bin/server', 'rpc', ':ok'] interval: 30s timeout: 10s retries: 3 start_period: 40s overlays: build: context: . dockerfile: apps/overlays/Dockerfile args: VITE_WEBSOCKET_URL: ws://saya:7175 restart: unless-stopped volumes: - emotes_cache:/workspace/apps/overlays/public/emotes environment: VITE_WEBSOCKET_URL: ws://saya:7175 depends_on: server: condition: service_healthy network_mode: service:tailscale-server volumes: postgres_data: emotes_cache: server_data: tailscale_state: