services: reverse-proxy: image: traefik:latest command: - "--api.insecure=true" - "--providers.docker" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" ports: - "80:80" - "8080:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock labels: - "traefik.enable=false" emly-mysql-db: image: mysql:lts labels: - "traefik.enable=false" environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_USER: ${MYSQL_USER:-emly} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE:-emly_bugreports} volumes: - mysql-data:/var/lib/mysql - ./init:/docker-entrypoint-initdb.d restart: unless-stopped healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 emly-api: build: . environment: INSTANCE_ID: ${HOSTNAME} MYSQL_HOST: ${MYSQL_HOST:-mysql} MYSQL_PORT: ${MYSQL_PORT:-3306} MYSQL_USER: ${MYSQL_USER:-emly} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE:-emly_bugreports} API_KEY: ${API_KEY} ADMIN_KEY: ${ADMIN_KEY} PORT: 3000 RATE_LIMIT_MAX: ${RATE_LIMIT_MAX:-5} RATE_LIMIT_WINDOW_HOURS: ${RATE_LIMIT_WINDOW_HOURS:-24} volumes: - emly-api-logs:/app/logs restart: unless-stopped deploy: mode: replicated replicas: 3 resources: limits: cpus: '1' memory: 1024M reservations: cpus: '0.5' memory: 512M labels: - "traefik.enable=true" - "traefik.http.routers.emly-api.entrypoints=web" - "traefik.http.routers.emly-api.rule=PathPrefix(`/`)" - "traefik.http.services.emly-api.loadbalancer.server.port=3000" depends_on: - emly-mysql-db volumes: mysql-data: emly-api-logs: