services: nginx: build: ./nginx networks: - traefik-public - internal depends_on: - frontend - backend restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.commander.rule=Host(`commander.bussenet.ca`)" - "traefik.http.routers.commander.entrypoints=web" - "traefik.http.services.commander.loadbalancer.server.port=80" frontend: build: ./frontend networks: - internal restart: unless-stopped backend: build: ./backend environment: - SECRET_KEY=${SECRET_KEY} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} - ADMIN_EMAIL=${ADMIN_EMAIL} - ADMIN_PASSWORD=${ADMIN_PASSWORD} depends_on: - db - cache networks: - internal restart: unless-stopped db: image: postgres:16-alpine environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres_data:/var/lib/postgresql/data networks: - internal restart: unless-stopped cache: image: redis:7-alpine volumes: - redis_data:/data networks: - internal restart: unless-stopped volumes: postgres_data: redis_data: networks: traefik-public: external: true internal: driver: bridge