# Advanced compose.yaml with additional options # Rename to compose.yaml to use this configuration services: portfolio: build: context: . dockerfile: Dockerfile container_name: portfolio restart: unless-stopped # Environment variables environment: - NODE_ENV=production # Add any custom Next.js environment variables here # - NEXT_PUBLIC_SITE_URL=https://portfolio.yourdomain.com # Health check healthcheck: test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - traefik labels: # Enable Traefik - "traefik.enable=true" # HTTP Router - "traefik.http.routers.portfolio.rule=Host(`portfolio.yourdomain.com`)" - "traefik.http.routers.portfolio.entrypoints=web" # HTTPS Router - "traefik.http.routers.portfolio-secure.rule=Host(`portfolio.yourdomain.com`)" - "traefik.http.routers.portfolio-secure.entrypoints=websecure" - "traefik.http.routers.portfolio-secure.tls=true" - "traefik.http.routers.portfolio-secure.tls.certresolver=letsencrypt" # HTTP to HTTPS Redirect - "traefik.http.routers.portfolio.middlewares=portfolio-redirect" - "traefik.http.middlewares.portfolio-redirect.redirectscheme.scheme=https" - "traefik.http.middlewares.portfolio-redirect.redirectscheme.permanent=true" # Optional: Security Headers - "traefik.http.routers.portfolio-secure.middlewares=portfolio-headers" - "traefik.http.middlewares.portfolio-headers.headers.customFrameOptionsValue=SAMEORIGIN" - "traefik.http.middlewares.portfolio-headers.headers.customResponseHeaders.X-Robots-Tag=index,follow" - "traefik.http.middlewares.portfolio-headers.headers.sslRedirect=true" - "traefik.http.middlewares.portfolio-headers.headers.stsSeconds=31536000" - "traefik.http.middlewares.portfolio-headers.headers.stsIncludeSubdomains=true" - "traefik.http.middlewares.portfolio-headers.headers.stsPreload=true" # Service - "traefik.http.services.portfolio.loadbalancer.server.port=3000" # Dockge metadata - "com.dockge.project=portfolio" - "com.dockge.description=Personal portfolio website" # Watchtower auto-update (optional, if you use Watchtower) - "com.centurylinklabs.watchtower.enable=true" networks: traefik: external: true