2025SELab2-project-Dwengo/docker-compose.production.yml
2025-03-12 17:46:11 +00:00

111 lines
3.6 KiB
YAML

services:
web:
build:
context: .
dockerfile: ./frontend/Dockerfile
restart: unless-stopped
networks:
- dwengo-1
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.web.rule=PathPrefix(`/`)'
- 'traefik.http.services.web.loadbalancer.server.port=80'
api:
build:
context: .
dockerfile: ./backend/Dockerfile
restart: unless-stopped
volumes:
# TODO Replace with environment keys
- ./backend/.env:/app/.env
networks:
- dwengo-1
depends_on:
- db
- logging
labels:
- 'traefik.enable=true'
- 'traefik.http.middlewares.api-prefix.stripprefix.prefixes=/api'
- 'traefik.http.routers.api.rule=Host(`sel2-1.ugent.be`)'
- 'traefik.http.routers.api.rule=PathPrefix(`/api`)'
- 'traefik.http.routers.api.middlewares=api-prefix'
- 'traefik.http.services.api.loadbalancer.server.port=3000'
db:
image: postgres:latest
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
restart: unless-stopped
volumes:
- dwengo_postgres_data:/var/lib/postgresql/data
networks:
- dwengo-1
reverse-proxy:
image: traefik:v3.3
command: >
--api.insecure=true
--providers.docker=true
--providers.docker.exposedbydefault=false
--entrypoints.web.address=:80/tcp
--entrypoints.web.http.redirections.entryPoint.to=websecure
--entrypoints.web.http.redirections.entrypoint.scheme=https
--entrypoints.websecure.address=:443/tcp
--entrypoints.websecure.http.tls=true
--entrypoints.websecure.http.tls.certResolver=letsencrypt
--entrypoints.websecure.http.tls.domains[0].main=sel2-1.ugent.be
--certificatesresolvers.letsencrypt.acme.email=timo.demeyst@ugent.be
--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
--certificatesresolvers.letsencrypt.acme.httpChallenge=true
--certificatesresolvers.letsencrypt.acme.httpChallenge.entrypoint=web
ports:
- '8080:8080'
- '80:80/tcp'
- '443:443/tcp'
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- dwengo_letsencrypt:/letsencrypt:ro
networks:
- dwengo-1
logging:
image: grafana/loki:latest
ports:
- '3102:3102'
- '9095:9095'
volumes:
- ./config/loki/config.yml:/etc/loki/config.yaml
- dwengo_loki_data:/loki
command: -config.file=/etc/loki/config.yaml
restart: unless-stopped
networks:
- dwengo-1
labels:
- 'traefik.enable=true'
- 'traefik.http.middlewares.logging-prefix.stripprefix.prefixes=/logging'
- 'traefik.http.routers.web.rule=PathPrefix(`/logging`)'
- 'traefik.http.routers.web.middlewares=logging-prefix'
- 'traefik.http.services.web.loadbalancer.server.port=3102'
dashboards:
image: grafana/grafana:latest
ports:
- '3100:3000'
volumes:
- dwengo_grafana_data:/var/lib/grafana
restart: unless-stopped
networks:
- dwengo-1
volumes:
dwengo_postgres_data:
dwengo_letsencrypt:
dwengo_loki_data:
dwengo_grafana_data:
networks:
dwengo-1: