Ctrl K
ComunidadGuías…

docker-compose.prod.yml

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

Archivo original ↗Preguntar a KiBot
services:
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - internal

  minio:
    image: minio/minio:latest
    restart: unless-stopped
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: ${S3_ACCESS_KEY_ID:-minioadmin}
      MINIO_ROOT_PASSWORD: ${S3_SECRET_ACCESS_KEY:-minioadmin}
    ports:
      - "127.0.0.1:9001:9001"
      - "127.0.0.1:9000:9000"
    volumes:
      - minio_data:/data
    healthcheck:
      test: ["CMD", "mc", "ready", "local"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - internal

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - internal

  core:
    image: ghcr.io/vladosuscocosus/odi-core:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.core
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      NODE_ENV: ${NODE_ENV}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
      GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}
      GOOGLE_REDIRECT_URI: ${GOOGLE_REDIRECT_URI}
      FRONTEND_URL: ${FRONTEND_URL}
      SITE_URL: ${SITE_URL:-https://odinvestor.net}
      SESSION_MAX_AGE: ${SESSION_MAX_AGE:-2592000}
      DATABASE_URL: postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}
      REDIS_URL: redis://redis:6379
      EXCHANGE_ENCRYPTION_KEY: ${EXCHANGE_ENCRYPTION_KEY}
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      MAILGUN_API_KEY: ${MAILGUN_API_KEY}
      MAILGUN_DOMAIN: ${MAILGUN_DOMAIN}
      MAILGUN_FROM: ${MAILGUN_FROM}
      S3_ENDPOINT: http://minio:9000
      S3_REGION: ${S3_REGION:-eu-central-1}
      S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-minioadmin}
      S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-minioadmin}
      S3_BUCKET: ${S3_BUCKET:-blog-images}
      S3_PUBLIC_URL: ${S3_PUBLIC_URL}
      MARKET_URL: http://market:3002
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
      minio:
        condition: service_healthy
    networks:
      - internal

  analytics:
    image: ghcr.io/vladosuscocosus/odi-analytics:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.analytics
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    environment:
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      FRONTEND_URL: ${FRONTEND_URL}
      SITE_URL: ${SITE_URL:-https://odinvestor.net}
    depends_on:
      db:
        condition: service_healthy
    networks:
      - internal

  market:
    image: ghcr.io/vladosuscocosus/odi-market:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.market
    restart: unless-stopped
    ports:
      - "127.0.0.1:3002:3002"
    environment:
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      FRONTEND_URL: ${FRONTEND_URL}
      SITE_URL: ${SITE_URL:-https://odinvestor.net}
      REDIS_URL: redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    networks:
      - internal

  reminder:
    image: ghcr.io/vladosuscocosus/odi-reminder:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.reminder
    restart: unless-stopped
    environment:
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      NODE_ENV: ${NODE_ENV}
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      FRONTEND_URL: ${FRONTEND_URL}
      MAILGUN_API_KEY: ${MAILGUN_API_KEY}
      MAILGUN_DOMAIN: ${MAILGUN_DOMAIN}
      MAILGUN_FROM: ${MAILGUN_FROM}
    depends_on:
      db:
        condition: service_healthy
    networks:
      - internal

  blog:
    image: ghcr.io/vladosuscocosus/odi-blog:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.blog
    restart: unless-stopped
    ports:
      - "127.0.0.1:3003:3003"
    environment:
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      BLOG_POSTGRES_DB: ${BLOG_POSTGRES_DB:-blog}
      S3_ENDPOINT: http://minio:9000
      S3_REGION: ${S3_REGION:-eu-central-1}
      S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-minioadmin}
      S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-minioadmin}
      S3_BUCKET: ${S3_BUCKET:-blog-images}
      S3_PUBLIC_URL: ${S3_PUBLIC_URL}
      OG_SERVICE_URL: http://og:3004
      FRONTEND_URL: ${FRONTEND_URL:-https://odinvestor.net}
    depends_on:
      db:
        condition: service_healthy
      minio:
        condition: service_healthy
    networks:
      - internal

  og:
    image: ghcr.io/vladosuscocosus/odi-og:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.og
    restart: unless-stopped
    environment:
      S3_ENDPOINT: http://minio:9000
      S3_REGION: ${S3_REGION:-eu-central-1}
      S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-minioadmin}
      S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-minioadmin}
      S3_BUCKET: ${S3_BUCKET:-blog-images}
    depends_on:
      minio:
        condition: service_healthy
    networks:
      - internal

  site:
    image: ghcr.io/vladosuscocosus/odi-site:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.site
    restart: unless-stopped
    ports:
      - "127.0.0.1:3005:3005"
    environment:
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      SITE_URL: ${SITE_URL:-https://odinvestor.net}
      DASHBOARD_URL: ${DASHBOARD_URL:-https://dashboard.odinvestor.net}
      BLOG_URL: ${BLOG_URL:-https://blog.odinvestor.net}
      FRONTEND_URL: ${FRONTEND_URL:-https://dashboard.odinvestor.net}
      CORE_URL: ${CORE_URL:-https://core.odinvestor.net}
      MARKET_URL: ${MARKET_URL:-https://market.odinvestor.net}
      ANALYTICS_URL: ${ANALYTICS_URL:-https://analytics.odinvestor.net}
    depends_on:
      db:
        condition: service_healthy
    networks:
      - internal

  frontend:
    image: ghcr.io/vladosuscocosus/odi-frontend:${IMAGE_TAG:-latest}
    build:
      context: .
      dockerfile: docker/Dockerfile.frontend
      args:
        VITE_API_URL: ${VITE_API_URL}
        VITE_ANALYTICS_URL: ${VITE_ANALYTICS_URL}
        VITE_MARKET_URL: ${VITE_MARKET_URL}
        VITE_BLOG_URL: ${VITE_BLOG_URL:-https://blog.odinvestor.net}
        VITE_S3_PUBLIC_URL: ${S3_PUBLIC_URL}
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:8080"
    networks:
      - internal

volumes:
  pgdata:
  minio_data:
  redis_data:

networks:
  internal: