name: remotelink services: postgres: image: postgres:17-alpine container_name: remotelink-db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-remotelink} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB:-remotelink} volumes: - postgres_data:/var/lib/postgresql/data - ./db/migrations/0001_initial.sql:/docker-entrypoint-initdb.d/0001_initial.sql:ro - ./db/migrations/0002_agent_relay.sql:/docker-entrypoint-initdb.d/0002_agent_relay.sql:ro - ./db/migrations/0003_enhancements.sql:/docker-entrypoint-initdb.d/0003_enhancements.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-remotelink}"] interval: 10s timeout: 5s retries: 5 app: build: context: . dockerfile: Dockerfile args: NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000} NEXT_PUBLIC_RELAY_URL: ${NEXT_PUBLIC_RELAY_URL:-localhost:8765} image: remotelink:latest container_name: remotelink-app restart: unless-stopped ports: - "3000:3000" environment: DATABASE_URL: postgresql://${POSTGRES_USER:-remotelink}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-remotelink} AUTH_SECRET: ${AUTH_SECRET} NEXT_PUBLIC_APP_URL: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000} NEXT_PUBLIC_RELAY_URL: ${NEXT_PUBLIC_RELAY_URL:-localhost:8765} OPEN_ENROLLMENT: ${OPEN_ENROLLMENT:-false} OPEN_ENROLLMENT_USER_EMAIL: ${OPEN_ENROLLMENT_USER_EMAIL:-} env_file: - .env depends_on: postgres: condition: service_healthy relay: build: context: ./relay dockerfile: Dockerfile image: remotelink-relay:latest container_name: remotelink-relay restart: unless-stopped ports: - "8765:8765" environment: DATABASE_URL: postgresql://${POSTGRES_USER:-remotelink}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-remotelink} ALLOWED_ORIGINS: ${NEXT_PUBLIC_APP_URL:-http://localhost:3000} depends_on: postgres: condition: service_healthy volumes: postgres_data: