added staging config

This commit is contained in:
PxlLoewe
2025-07-08 19:41:25 -07:00
parent 30a4f6488f
commit da26634422
3 changed files with 244 additions and 0 deletions

1
.gitignore vendored
View File

@@ -14,6 +14,7 @@ mkcert
.env
.env.local
.env.prod
.env.staging
# Testing
coverage

242
docker-compose.staging.yml Normal file
View File

@@ -0,0 +1,242 @@
networks:
default:
driver: bridge
postgres_network:
driver: bridge
core_network:
driver: bridge
redis_network:
driver: bridge
traefik:
external: true
moodle_db_network:
driver: bridge
services:
hub:
build:
context: .
dockerfile: ./apps/hub/Dockerfile
args:
- NEXT_PUBLIC_HUB_URL=$NEXT_PUBLIC_HUB_URL
- NEXT_PUBLIC_HUB_SERVER_URL=$NEXT_PUBLIC_HUB_SERVER_URL
- NEXT_PUBLIC_DISCORD_URL=$NEXT_PUBLIC_DISCORD_URL
- NEXT_PUBLIC_MOODLE_URL=$NEXT_PUBLIC_MOODLE_URL
- NEXT_PUBLIC_DISPATCH_URL=$NEXT_PUBLIC_DISPATCH_URL
labels:
- "traefik.enable=true"
- "traefik.http.routers.hub.rule=Host(`hub.premiumag.de`)"
- "traefik.http.routers.hub.entrypoints=websecure"
- "traefik.http.routers.hub.tls.certresolver=le"
- "traefik.http.services.hub.loadbalancer.server.port=3000"
ports:
- 3000:3000
environment:
- NEXTAUTH_URL=${AUTH_HUB_URL}
- NEXTAUTH_SECRET=${AUTH_HUB_SECRET}
env_file:
- .env.prod
networks:
- core_network
- postgres_network
- traefik
hub-server:
build:
context: .
dockerfile: ./apps/hub-server/Dockerfile
container_name: hub-server
labels:
- "traefik.enable=true"
- "traefik.http.routers.hub-server.rule=Host(`api.hub.premiumag.de`)"
- "traefik.http.routers.hub-server.entrypoints=websecure"
- "traefik.http.routers.hub-server.tls.certresolver=le"
- "traefik.http.services.hub-server.loadbalancer.server.port=3000"
env_file:
- .env.prod
networks:
- core_network
- postgres_network
- traefik
depends_on:
postgres:
condition: service_healthy
# Dispatch Service
dispatch:
build:
context: .
dockerfile: ./apps/dispatch/Dockerfile
args:
- NEXT_PUBLIC_DISPATCH_URL=$NEXT_PUBLIC_DISPATCH_URL
- NEXT_PUBLIC_HUB_URL=$NEXT_PUBLIC_HUB_URL
- NEXT_PUBLIC_DISPATCH_SERVICE_ID=1
- NEXT_PUBLIC_LIVEKIT_URL=$NEXT_PUBLIC_LIVEKIT_URL
- NEXT_PUBLIC_DISPATCH_SERVER_URL=$NEXT_PUBLIC_DISPATCH_SERVER_URL
env_file:
- .env.prod
deploy:
replicas: 2
labels:
- "traefik.enable=true"
- "traefik.http.routers.dispatch.rule=Host(`dispatch.premiumag.de`)"
- "traefik.http.routers.dispatch.entrypoints=websecure"
- "traefik.http.routers.dispatch.tls.certresolver=le"
- "traefik.http.services.dispatch.loadbalancer.server.port=3000"
environment:
- NEXTAUTH_URL=${AUTH_DISPATCH_URL}
- NEXTAUTH_SECRET=${AUTH_DISPATCH_SECRET}
networks:
- postgres_network
- traefik
dispatch-server:
build:
context: .
dockerfile: ./apps/dispatch-server/Dockerfile
env_file:
- .env.prod
deploy:
replicas: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.dispatch-server.rule=Host(`api.dispatch.premiumag.de`)"
- "traefik.http.routers.dispatch-server.entrypoints=websecure"
- "traefik.http.routers.dispatch-server.tls.certresolver=le"
- "traefik.http.services.dispatch-server.loadBalancer.sticky.cookie.name=server_id"
- "traefik.http.services.dispatch-server.loadBalancer.sticky.cookie.httpOnly=true"
- "traefik.http.services.dispatch-server.loadbalancer.server.port=3000"
networks:
- core_network
- postgres_network
- redis_network
- traefik
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
ports:
- "8090:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- core_network
restart: unless-stopped
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- "./packages/prometheus/prometheus.prod.yml:/etc/prometheus/prometheus.yml"
- /var/run/docker.sock:/var/run/docker.sock
- prometheus_data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--web.enable-remote-write-receiver"
networks:
- traefik
- core_network
core-server:
build:
context: .
dockerfile: ./apps/core-server/Dockerfile
env_file:
- .env.prod
deploy:
replicas: 1
labels:
- "traefik.enable=false"
networks:
- postgres_network
- core_network
docs:
build:
context: .
dockerfile: ./apps/docs/Dockerfile
labels:
- "traefik.enable=true"
- "traefik.http.routers.docs.rule=Host(`docs.premiumag.de`)"
- "traefik.http.routers.docs.entrypoints=websecure"
- "traefik.http.routers.docs.tls.certresolver=le"
- "traefik.http.services.docs.loadbalancer.server.port=80"
networks:
- traefik
postgres:
image: postgres:13
container_name: postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready -U persistant-data -d var"]
interval: 10s
timeout: 5s
retries: 3
ports:
- "5432:5432"
environment:
POSTGRES_USER: persistant-data
POSTGRES_PASSWORD: persistant-data-pw
POSTGRES_DB: var
volumes:
- postgres-data:/var/lib/postgresql/data
networks:
- postgres_network
- traefik
redis:
container_name: redis
image: redis/redis-stack:latest
ports:
- "6379:6379"
volumes:
- "redis_data:/data"
networks:
- redis_network
healthcheck:
test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
livekit:
image: livekit/livekit-server
command: --config /etc/livekit.yaml --node-ip 37.221.196.140
restart: unless-stopped
networks:
- traefik
- core_network
ports:
- "7881:7881"
- "7882:7882/udp"
depends_on:
- redis
volumes:
- ./packages/livekit/livekit.yaml:/etc/livekit.yaml
labels:
- "traefik.enable=true"
- "traefik.http.routers.livekit.rule=Host(`livekit.premiumag.de`)"
- "traefik.http.routers.livekit.entrypoints=websecure"
- "traefik.http.routers.livekit.tls=true"
- "traefik.http.routers.livekit.tls.certresolver=le"
- "traefik.http.routers.livekit.service=livekit"
- "traefik.http.services.livekit.loadbalancer.server.port=7880"
volumes:
postgres-data:
moodle_data:
moodle_database:
moodle_moodledata:
redis_data:
driver: local
portainer_data:
prometheus_data:

View File

@@ -8,6 +8,7 @@
"lint": "turbo lint",
"studio": "turbo run studio",
"prod-start": "docker-compose --env-file .env.prod -f 'docker-compose.prod.yml' up -d --build",
"staging-start": "docker-compose --env-file .env.staging -f 'docker-compose.staging.yml' up -d --build",
"format": "prettier --write \"**/*.{ts,tsx,md}\""
},
"devDependencies": {