compose.prod.local.yaml
Rama main · réplica de lectura del repositorio original.
services:
web:
image: younes60/web:${DOCKER_TAGS}
build:
context: .
dockerfile: ./apps/web/prod.Dockerfile
deploy:
labels:
- "traefik.enable=true"
- "traefik.http.routers.web.entrypoints=web-secure"
- "traefik.http.routers.web.rule=Host(`web.localhost`)"
- "traefik.http.routers.web.tls=true"
- "traefik.http.routers.web.tls.certresolver=deliveryresolver"
- "traefik.http.services.web.loadbalancer.server.port=3000"
environment:
- AUTH_SECRET=${AUTH_SECRET}
- JOBS_BEARER_TOKEN=${JOBS_BEARER_TOKEN}
- JOBS_API_BASEURL=${JOBS_API_BASEURL}
- WEB_BASE_URL=${WEB_BASE_URL}
volumes:
- ./apps/web/src:/app/src
ports:
- 3000:3000
networks:
- proxy
jobs:
image: younes60/jobs:${DOCKER_TAGS}
build:
context: .
dockerfile: ./apps/jobs/prod.Dockerfile
environment:
- PUBLIC_IP=${PUBLIC_IP}
- PORT=${PORT}
- DATABASE_URL=${DATABASE_URL}
- LOG_LEVEL=${LOG_LEVEL}
- NODE_ENV=${NODE_ENV}
- SSH_HOST=${SSH_HOST}
- BEARER_TOKEN=${BEARER_TOKEN}
- REDIS_PASSWORD=${REDIS_PASSWORD}
- TEST_USERS_PASSWORD=${TEST_USERS_PASSWORD}
- ENABLE_DEPLOYMENT_QUEUE_MONITORING=${ENABLE_DEPLOYMENT_QUEUE_MONITORING}
- DOCKER_GID=${DOCKER_GID}
- AUTH_SECRET=${AUTH_SECRET}
volumes:
- /data/delivery/ssh/keys:/var/ssh/keys
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 3090:3090
networks:
- proxy
extra_hosts:
- "host.docker.internal:host-gateway"
database:
image: postgres:17.5
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=productiondb
- POSTGRES_DB=productiondb
networks:
- proxy
volumes:
- ${PWD}/db-data/:/var/lib/postgresql@16/data
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 5s
timeout: 5s
retries: 5
database-test:
image: postgres:17.5
ports:
- ${POSTGRES_TEST_PORT}:5432
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_USER=testdb
- POSTGRES_DB=testdb
networks:
- proxy
volumes:
- ${PWD}/db-data/:/var/lib/postgresql@16/data
bull_queue:
image: redis
command: redis-server --requirepass ${REDIS_PASSWORD} --save 60 1 --loglevel warning --maxmemory-policy noeviction --maxmemory 2gb
ports:
- 6379:6379
networks:
- proxy
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
adminer:
image: adminer
ports:
- 3050:8080
networks:
- proxy
traefik:
image: "traefik:v3.3.6"
deploy:
placement:
constraints:
- node.role == manager
labels:
- "traefik.enable=true"
- "traefik.swarm.network=proxy"
# define traefik dashboard router and service
- "traefik.http.routers.traefik.rule=Host(`traefik.localhost`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.tls.certresolver=deliveryresolver"
- "traefik.http.routers.traefik.entrypoints=web-secure"
- "traefik.http.routers.traefik.middlewares=autodetectContenttype@file"
- "traefik.http.services.traefik.loadbalancer.server.port=8080"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- ./infrastructure/traefik-config/traefik.yaml:/etc/traefik/traefik.yaml:ro # static traefik configuration
- ./infrastructure/traefik-config/dynamic.yaml:/etc/traefik/dynamic.yaml:ro # dynamic traefik configuration
- ./infrastructure/traefik-config/acme.json:/etc/traefik/acme.json # TLS certificate storage
networks:
- proxy
networks:
proxy:
name: proxy
volumes:
postgres_data:
name: postgres_data
letsencrypt:
name: letsencrypt