services: # ── Gitea ──────────────────────────────────────────────────── gitea: image: gitea/gitea:latest environment: - GITEA__database__DB_TYPE=postgres - GITEA__database__HOST=gitea-db:5432 - GITEA__database__NAME=gitea - GITEA__database__USER=gitea - GITEA__database__PASSWD=gitea volumes: - gitea-data:/data networks: - proxy - internal labels: - "traefik.enable=true" - "traefik.http.routers.git.rule=Host(`git.gigafibre.ca`)" - "traefik.http.routers.git.entrypoints=websecure" - "traefik.http.routers.git.tls.certresolver=letsencrypt" - "traefik.http.services.git.loadbalancer.server.port=3000" restart: unless-stopped gitea-db: image: postgres:14-alpine environment: - POSTGRES_DB=gitea - POSTGRES_USER=gitea - POSTGRES_PASSWORD=gitea volumes: - gitea-db-data:/var/lib/postgresql/data networks: - internal restart: unless-stopped # ── Targo Timesheet Frontend ───────────────────────────────── targo-frontend: image: nginx:alpine volumes: - targo-frontend-data:/usr/share/nginx/html networks: - proxy labels: - "traefik.enable=true" - "traefik.http.routers.targo-app.rule=Host(`timesheet.gigafibre.ca`)" - "traefik.http.routers.targo-app.entrypoints=websecure" - "traefik.http.routers.targo-app.tls.certresolver=letsencrypt" - "traefik.http.services.targo-app.loadbalancer.server.port=80" restart: unless-stopped # ── Dispatch App Frontend ──────────────────────────────────── dispatch-frontend: image: nginx:alpine volumes: - dispatch-frontend-data:/usr/share/nginx/html networks: - proxy labels: - "traefik.enable=true" - "traefik.http.routers.dispatch.rule=Host(`dispatch.gigafibre.ca`)" - "traefik.http.routers.dispatch.entrypoints=websecure" - "traefik.http.routers.dispatch.tls.certresolver=letsencrypt" - "traefik.http.services.dispatch.loadbalancer.server.port=80" restart: unless-stopped # ── Targo Backend + DB ─────────────────────────────────────── targo-db: image: postgres:14-alpine environment: - POSTGRES_DB=targo - POSTGRES_USER=targo - POSTGRES_PASSWORD=targo volumes: - targo-db-data:/var/lib/postgresql/data networks: - internal restart: unless-stopped networks: proxy: external: true internal: driver: bridge volumes: gitea-data: gitea-db-data: targo-frontend-data: dispatch-frontend-data: targo-db-data: