Ctrl K
ComunidadGuías…

compose.prod.local.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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