services: trackeep-landing: build: context: . dockerfile: Dockerfile ports: - "8080:80" environment: - NODE_ENV=production restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s labels: - "traefik.enable=true" - "traefik.http.routers.trackeep-landing.rule=Host(`trackeep.org`, `www.trackeep.org`)" - "traefik.http.routers.trackeep-landing.entrypoints=websecure" - "traefik.http.routers.trackeep-landing.tls.certresolver=letsencrypt" - "traefik.http.services.trackeep-landing.loadbalancer.server.port=80" # Optional: Add reverse proxy with Traefik for SSL termination traefik: image: traefik:v2.10 command: - "--api.dashboard=true" - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.letsencrypt.acme.email=admin@trackeep.org" - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" ports: - "80:80" - "443:443" - "8081:8080" # Traefik dashboard volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" - "./letsencrypt:/letsencrypt" restart: unless-stopped profiles: - ssl networks: default: name: trackeep-landing-network