Ctrl K
ComunidadGuías…

docker-compose.prod.yml

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

Archivo original ↗Preguntar a KiBot
# This is a production version of the Bigcapital docker-compose.yml file.

version: '3.3'

services:
  proxy:
    image: envoyproxy/envoy:v1.30-latest
    depends_on:
      - server
      - webapp
    ports:
      - '${PUBLIC_PROXY_PORT:-80}:80'
      - '${PUBLIC_PROXY_SSL_PORT:-443}:443'
    tty: true
    volumes:
      - ./docker/envoy/envoy.yaml:/etc/envoy/envoy.yaml
    restart: on-failure
    networks:
      - bigcapital_network

  webapp:
    container_name: bigcapital-webapp
    image: bigcapitalhq/webapp:latest
    restart: on-failure
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
      - bigcapital_network

  server:
    container_name: bigcapital-server
    image: bigcapitalhq/server:latest
    expose:
      - '3000'
    links:
      - mysql
      - redis
    depends_on:
      - mysql
      - redis
      - garage
    restart: on-failure
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    networks:
      - bigcapital_network
    environment:
      # Mail
      - MAIL_HOST=${MAIL_HOST}
      - MAIL_USERNAME=${MAIL_USERNAME}
      - MAIL_PASSWORD=${MAIL_PASSWORD}
      - MAIL_PORT=${MAIL_PORT}
      - MAIL_SECURE=${MAIL_SECURE}
      - MAIL_FROM_NAME=${MAIL_FROM_NAME}
      - MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}

      # Database
      - DB_HOST=mysql
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_CHARSET=${DB_CHARSET}

      # System database
      - SYSTEM_DB_NAME=${SYSTEM_DB_NAME}

      # Redis
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - QUEUE_HOST=redis
      - QUEUE_PORT=6379

      # Tenants databases
      - TENANT_DB_NAME_PERFIX=${TENANT_DB_NAME_PERFIX}

      # ClickHouse analytics store
      - CLICKHOUSE_ENABLED=${CLICKHOUSE_ENABLED:-false}
      - CLICKHOUSE_HOST=clickhouse
      - CLICKHOUSE_PORT=8123
      - CLICKHOUSE_USER=${CLICKHOUSE_USER:-default}
      - CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:?CLICKHOUSE_PASSWORD is required in .env - generate one with openssl rand -base64 32}
      - CLICKHOUSE_DATABASE=${CLICKHOUSE_DATABASE:-bigcapital_analytics}

      # Authentication
      - 'APP_JWT_SECRET=${APP_JWT_SECRET:?APP_JWT_SECRET is required in .env - generate one with openssl rand -base64 48}'

      # Application
      - BASE_URL=${BASE_URL}

      # Sign-up restrictions
      - SIGNUP_DISABLED=${SIGNUP_DISABLED}
      - SIGNUP_ALLOWED_DOMAINS=${SIGNUP_ALLOWED_DOMAINS}
      - SIGNUP_ALLOWED_EMAILS=${SIGNUP_ALLOWED_EMAILS}

      # Sign-up email confirmation
      - SIGNUP_EMAIL_CONFIRMATION=${SIGNUP_EMAIL_CONFIRMATION}

      # Gotenberg (Pdf generator)
      - GOTENBERG_URL=${GOTENBERG_URL}
      - GOTENBERG_DOCS_URL=${GOTENBERG_DOCS_URL}

      # Exchange Rate
      - EXCHANGE_RATE_SERVICE=${EXCHANGE_RATE_SERVICE}
      - OPEN_EXCHANGE_RATE_APP_ID=${OPEN_EXCHANGE_RATE_APP_ID}

      # Bank Sync
      - BANK_FEED_ENABLED=${BANK_FEED_ENABLED}

      # Plaid
      - PLAID_ENV=${PLAID_ENV}
      - PLAID_CLIENT_ID=${PLAID_CLIENT_ID}
      - PLAID_SECRET=${PLAID_SECRET}
      - PLAID_LINK_WEBHOOK=${PLAID_LINK_WEBHOOK}
      - PLAID_CLIENT_NAME=${PLAID_CLIENT_NAME}

      # Stripe Billing (Bigcapital Cloud)
      - FREE_TRIAL_DAYS=${FREE_TRIAL_DAYS:-15}
      - STRIPE_BILLING_SECRET_KEY=${STRIPE_BILLING_SECRET_KEY}
      - STRIPE_BILLING_WEBHOOK_SECRET=${STRIPE_BILLING_WEBHOOK_SECRET}
      - STRIPE_BILLING_PORTAL_CONFIGURATION_ID=${STRIPE_BILLING_PORTAL_CONFIGURATION_ID}
      - STRIPE_BILLING_SUCCESS_URL=${STRIPE_BILLING_SUCCESS_URL}
      - STRIPE_BILLING_CANCEL_URL=${STRIPE_BILLING_CANCEL_URL}

      # New Relic matrics tracking.
      - NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=${NEW_RELIC_DISTRIBUTED_TRACING_ENABLED}
      - NEW_RELIC_LOG=${NEW_RELIC_LOG}
      - NEW_RELIC_AI_MONITORING_ENABLED=${NEW_RELIC_AI_MONITORING_ENABLED}
      - NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED=${NEW_RELIC_CUSTOM_INSIGHTS_EVENTS_MAX_SAMPLES_STORED}
      - NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED=${NEW_RELIC_SPAN_EVENTS_MAX_SAMPLES_STORED}
      - NEW_RELIC_LICENSE_KEY=${NEW_RELIC_LICENSE_KEY}
      - NEW_RELIC_APP_NAME=${NEW_RELIC_APP_NAME}

      # S3
      - S3_REGION=${S3_REGION}
      - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID}
      - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY}
      - S3_ENDPOINT=${S3_ENDPOINT}
      - S3_BUCKET=${S3_BUCKET}
      - S3_FORCE_PATH_STYLE=${S3_FORCE_PATH_STYLE}

      # Stripe
      - STRIPE_PAYMENT_SECRET_KEY=${STRIPE_PAYMENT_SECRET_KEY}
      - STRIPE_PAYMENT_PUBLISHABLE_KEY=${STRIPE_PAYMENT_PUBLISHABLE_KEY}
      - STRIPE_PAYMENT_CLIENT_ID=${STRIPE_PAYMENT_CLIENT_ID}
      - STRIPE_PAYMENT_WEBHOOKS_SECRET=${STRIPE_PAYMENT_WEBHOOKS_SECRET}
      - STRIPE_PAYMENT_REDIRECT_URL=${STRIPE_PAYMENT_REDIRECT_URL}

      # API rate limiting (see .env.example)
      - THROTTLE_GLOBAL_TTL=${THROTTLE_GLOBAL_TTL}
      - THROTTLE_GLOBAL_LIMIT=${THROTTLE_GLOBAL_LIMIT}
      - THROTTLE_AUTH_TTL=${THROTTLE_AUTH_TTL}
      - THROTTLE_AUTH_LIMIT=${THROTTLE_AUTH_LIMIT}

  database_migration:
    container_name: bigcapital-database-migration
    build:
      context: ./
      dockerfile: docker/migration/Dockerfile
    environment:
      # Database
      - DB_HOST=mysql
      - DB_USER=${DB_USER}
      - DB_PASSWORD=${DB_PASSWORD}
      - DB_CHARSET=${DB_CHARSET}
      - SYSTEM_DB_NAME=${SYSTEM_DB_NAME}
      # Tenants databases
      - TENANT_DB_NAME_PERFIX=${TENANT_DB_NAME_PERFIX}
      # Cloud trial backfill (system migration)
      - STRIPE_BILLING_SECRET_KEY=${STRIPE_BILLING_SECRET_KEY}
      - STRIPE_BILLING_WEBHOOK_SECRET=${STRIPE_BILLING_WEBHOOK_SECRET}
      - FREE_TRIAL_DAYS=${FREE_TRIAL_DAYS:-15}
    depends_on:
      - mysql
    networks:
      - bigcapital_network

  mysql:
    container_name: bigcapital-mysql
    restart: on-failure
    build:
      context: ./docker/mariadb
    environment:
      - MYSQL_DATABASE=${SYSTEM_DB_NAME}
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASSWORD}
      - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - mysql:/var/lib/mysql
    expose:
      - '3306'
    networks:
      - bigcapital_network

  redis:
    container_name: bigcapital-redis
    restart: on-failure
    build:
      context: ./docker/redis
    expose:
      - '6379'
    volumes:
      - redis:/data
    networks:
      - bigcapital_network

  gotenberg:
    image: gotenberg/gotenberg:7
    expose:
      - '9000'
    networks:
      - bigcapital_network

  garage:
    container_name: bigcapital-garage
    image: dxflrs/garage:v1.3.1
    restart: on-failure
    environment:
      - GARAGE_CONFIG_FILE=/etc/garage.toml
      - GARAGE_RPC_SECRET=${GARAGE_RPC_SECRET}
      - GARAGE_ADMIN_TOKEN=${GARAGE_ADMIN_TOKEN}
    volumes:
      - ./docker/garage/garage.toml:/etc/garage.toml
      - ./docker/garage/setup.sh:/garage-setup/setup.sh
      - garage:/var/lib/garage
    expose:
      - '3900'
      - '3903'
    networks:
      - bigcapital_network

  clickhouse:
    container_name: bigcapital-clickhouse
    image: clickhouse/clickhouse-server:24.8
    restart: on-failure
    environment:
      - CLICKHOUSE_USER=${CLICKHOUSE_USER:-default}
      - CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD:?CLICKHOUSE_PASSWORD is required in .env - generate one with openssl rand -base64 32}
      - CLICKHOUSE_DB=${CLICKHOUSE_DATABASE:-bigcapital_analytics}
    expose:
      - '8123'
    volumes:
      - clickhouse:/var/lib/clickhouse
    networks:
      - bigcapital_network

  # Auto-updates the containers labelled "com.centurylinklabs.watchtower.enable=true"
  # (webapp and server) by polling the registry for newer :latest images.
  # Everything else (mysql, redis, gotenberg, garage, clickhouse, proxy) is untouched.
  auto-update:
    container_name: bigcapital-auto-update
    image: containrrr/watchtower:1.7.1
    restart: on-failure
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command: --label-enable --cleanup --interval ${AUTO_UPDATE_INTERVAL:-3600}
    networks:
      - bigcapital_network

# Volumes
volumes:
  mysql:
    name: bigcapital_prod_mysql
    driver: local

  redis:
    name: bigcapital_prod_redis
    driver: local

  garage:
    name: bigcapital_prod_garage
    driver: local

  clickhouse:
    name: bigcapital_prod_clickhouse
    driver: local

# Networks
networks:
  bigcapital_network:
    driver: bridge