Ctrl K
ComunidadGuías…

docker-compose.yml

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

Archivo original ↗Preguntar a KiBot
version: '3.8'

services:
  # AgentRQ main application
  agentrq:
    image: agentrq/agentrq:latest
    container_name: agentrq
    restart: unless-stopped
    ports:
      - "${PORT:-2026}:${PORT:-2026}"
    environment:
      # Core settings
      ENV: ${ENV:-production}
      PORT: ${PORT:-2026}
      AGENTRQ_BASE_URL: ${AGENTRQ_BASE_URL}
      AGENTRQ_DOMAIN: ${AGENTRQ_DOMAIN}
      AGENTRQ_BASE_PATH: ${AGENTRQ_BASE_PATH:-}
      AGENTRQ_COOKIE_SECURE: ${AGENTRQ_COOKIE_SECURE:-}
      AGENTRQ_PROXY_DOMAIN: ${AGENTRQ_PROXY_DOMAIN:-}

      # Auth (required)
      AGENTRQ_AUTH_JWT_SECRET: ${AGENTRQ_AUTH_JWT_SECRET}
      AGENTRQ_AUTH_WORKSPACE_TOKEN_KEY: ${AGENTRQ_AUTH_WORKSPACE_TOKEN_KEY}
      AGENTRQ_AUTH_ROOT_LOGIN_ENABLED: ${AGENTRQ_AUTH_ROOT_LOGIN_ENABLED:-false}
      AGENTRQ_AUTH_ROOT_ACCESS_TOKEN: ${AGENTRQ_AUTH_ROOT_ACCESS_TOKEN:-}
      AGENTRQ_AUTH_ALLOWED_REDIRECT_DOMAINS: ${AGENTRQ_AUTH_ALLOWED_REDIRECT_DOMAINS:-}

      # Google OAuth (required)
      AGENTRQ_ACCOUNTS_OAUTH2_CLI_GOOGLE_CLIENT_ID: ${AGENTRQ_ACCOUNTS_OAUTH2_CLI_GOOGLE_CLIENT_ID}
      AGENTRQ_ACCOUNTS_OAUTH2_CLI_GOOGLE_CLIENT_SECRET: ${AGENTRQ_ACCOUNTS_OAUTH2_CLI_GOOGLE_CLIENT_SECRET}

      # GitHub OAuth (optional)
      AGENTRQ_ACCOUNTS_OAUTH2_CLI_GITHUB_CLIENT_ID: ${AGENTRQ_ACCOUNTS_OAUTH2_CLI_GITHUB_CLIENT_ID:-}
      AGENTRQ_ACCOUNTS_OAUTH2_CLI_GITHUB_CLIENT_SECRET: ${AGENTRQ_ACCOUNTS_OAUTH2_CLI_GITHUB_CLIENT_SECRET:-}

      # Database: SQLite (default)
      AGENTRQ_SQLITE_ENABLED: ${AGENTRQ_SQLITE_ENABLED:-true}
      AGENTRQ_SQLITE_DSN: ${AGENTRQ_SQLITE_DSN:-/storage/agentrq.db}

      # Database: PostgreSQL (optional, disable SQLite if using Postgres)
      AGENTRQ_POSTGRES_ENABLED: ${AGENTRQ_POSTGRES_ENABLED:-false}
      AGENTRQ_POSTGRES_HOST: ${AGENTRQ_POSTGRES_HOST:-postgres}
      AGENTRQ_POSTGRES_PORT: ${AGENTRQ_POSTGRES_PORT:-5432}
      AGENTRQ_POSTGRES_USER: ${AGENTRQ_POSTGRES_USER:-postgres}
      AGENTRQ_POSTGRES_PASSWORD: ${AGENTRQ_POSTGRES_PASSWORD:-}
      AGENTRQ_POSTGRES_DBNAME: ${AGENTRQ_POSTGRES_DBNAME:-agentrq}

      # TLS (for production)
      AGENTRQ_SSL_ENABLED: ${AGENTRQ_SSL_ENABLED:-false}
      AGENTRQ_SSL_LETSENCRYPT_EMAIL: ${AGENTRQ_SSL_LETSENCRYPT_EMAIL:-}
      AGENTRQ_SSL_CACHE_DIR: ${AGENTRQ_SSL_CACHE_DIR:-/_certs}
      AGENTRQ_SSL_CLOUDFLARE_API_TOKEN: ${AGENTRQ_SSL_CLOUDFLARE_API_TOKEN:-}
      AGENTRQ_SSL_S3_ENABLED: ${AGENTRQ_SSL_S3_ENABLED:-false}
      AGENTRQ_SSL_S3_ENDPOINT: ${AGENTRQ_SSL_S3_ENDPOINT:-}
      AGENTRQ_SSL_S3_ACCESS_KEY: ${AGENTRQ_SSL_S3_ACCESS_KEY:-}
      AGENTRQ_SSL_S3_SECRET_ACCESS_KEY: ${AGENTRQ_SSL_S3_SECRET_ACCESS_KEY:-}
      AGENTRQ_SSL_S3_REGION: ${AGENTRQ_SSL_S3_REGION:-us-east-1}
      AGENTRQ_SSL_S3_BUCKET: ${AGENTRQ_SSL_S3_BUCKET:-}

      # Email notifications (optional)
      AGENTRQ_SMTP_ENABLED: ${AGENTRQ_SMTP_ENABLED:-false}
      AGENTRQ_SMTP_HOST: ${AGENTRQ_SMTP_HOST:-}
      AGENTRQ_SMTP_PORT: ${AGENTRQ_SMTP_PORT:-587}
      AGENTRQ_SMTP_USERNAME: ${AGENTRQ_SMTP_USERNAME:-}
      AGENTRQ_SMTP_PASSWORD: ${AGENTRQ_SMTP_PASSWORD:-}
      AGENTRQ_SMTP_FROM: ${AGENTRQ_SMTP_FROM:-}

      # Slack integration (optional)
      AGENTRQ_SLACK_ENABLED: ${AGENTRQ_SLACK_ENABLED:-false}
      AGENTRQ_SLACK_CLIENT_ID: ${AGENTRQ_SLACK_CLIENT_ID:-}
      AGENTRQ_SLACK_CLIENT_SECRET: ${AGENTRQ_SLACK_CLIENT_SECRET:-}
      AGENTRQ_SLACK_SIGNING_SECRET: ${AGENTRQ_SLACK_SIGNING_SECRET:-}
      AGENTRQ_SLACK_APP_ID: ${AGENTRQ_SLACK_APP_ID:-}

      # Skill and attachment storage: local (default) or s3
      AGENTRQ_SKILLS_STORAGE: ${AGENTRQ_SKILLS_STORAGE:-local}
      AGENTRQ_ARTIFACTS_STORAGE: ${AGENTRQ_ARTIFACTS_STORAGE:-local}
      AGENTRQ_PANO_STORAGE: ${AGENTRQ_PANO_STORAGE:-local}
      AGENTRQ_PANO_MAX_TTL_DAYS: ${AGENTRQ_PANO_MAX_TTL_DAYS:-365}

      # Memory and skill size limits
      AGENTRQ_MEMORY_MAX_FILE_SIZE: ${AGENTRQ_MEMORY_MAX_FILE_SIZE:-16384}
      AGENTRQ_SKILLS_MAX_FILE_SIZE: ${AGENTRQ_SKILLS_MAX_FILE_SIZE:-98304}
      AGENTRQ_SKILLS_MAX_FILES: ${AGENTRQ_SKILLS_MAX_FILES:-256}
      AGENTRQ_ACP_V1_ENABLED: ${AGENTRQ_ACP_V1_ENABLED:-true}
      AGENTRQ_MCP_OPENAI_APPS_CHALLENGE: ${AGENTRQ_MCP_OPENAI_APPS_CHALLENGE:-}
      AGENTRQ_S3_ENDPOINT: ${AGENTRQ_S3_ENDPOINT:-}
      AGENTRQ_S3_ACCESS_KEY: ${AGENTRQ_S3_ACCESS_KEY:-}
      AGENTRQ_S3_SECRET_ACCESS_KEY: ${AGENTRQ_S3_SECRET_ACCESS_KEY:-}
      AGENTRQ_S3_REGION: ${AGENTRQ_S3_REGION:-us-east-1}
      AGENTRQ_S3_BUCKET: ${AGENTRQ_S3_BUCKET:-}
      AGENTRQ_S3_PUBLIC_URL: ${AGENTRQ_S3_PUBLIC_URL:-}

      # Web Push notifications (optional)
      AGENTRQ_WEBPUSH_VAPID_PUBLIC_KEY: ${AGENTRQ_WEBPUSH_VAPID_PUBLIC_KEY:-}
      AGENTRQ_WEBPUSH_VAPID_PRIVATE_KEY: ${AGENTRQ_WEBPUSH_VAPID_PRIVATE_KEY:-}
      AGENTRQ_WEBPUSH_SUBSCRIBER: ${AGENTRQ_WEBPUSH_SUBSCRIBER:-mailto:hi@example.com}

      # Attachments and local skills, on the mounted volume
      AGENTRQ_STORAGE_DIR: ${AGENTRQ_STORAGE_DIR:-/storage}

      # Attachment retention
      AGENTRQ_APP_ATTACHMENT_RETENTION: ${AGENTRQ_APP_ATTACHMENT_RETENTION:-7d}

      # Instance identity
      MONOFLAKE_NODE: ${MONOFLAKE_NODE:-}
      AGENTRQ_INSTANCE_ID: ${AGENTRQ_INSTANCE_ID:-}
      AGENTRQ_APP_DRAIN_DELAY: ${AGENTRQ_APP_DRAIN_DELAY:-0s}

      # Security
      AGENTRQ_DDOS_ENABLED: ${AGENTRQ_DDOS_ENABLED:-true}
      AGENTRQ_DDOS_MAX_REQ_PER_SEC: ${AGENTRQ_DDOS_MAX_REQ_PER_SEC:-20}
      AGENTRQ_DDOS_BLOCK_DURATION: ${AGENTRQ_DDOS_BLOCK_DURATION:-5m}
      AGENTRQ_RATELIMIT_ENABLED: ${AGENTRQ_RATELIMIT_ENABLED:-true}
      AGENTRQ_RATELIMIT_MAX_PER_IP: ${AGENTRQ_RATELIMIT_MAX_PER_IP:-60}
      AGENTRQ_RATELIMIT_MAX_PER_USER: ${AGENTRQ_RATELIMIT_MAX_PER_USER:-100}
      AGENTRQ_RATELIMIT_WINDOW: ${AGENTRQ_RATELIMIT_WINDOW:-60s}
      AGENTRQ_TRUSTED_PROXIES: ${AGENTRQ_TRUSTED_PROXIES:-}
      AGENTRQ_CLIENT_IP_HEADER: ${AGENTRQ_CLIENT_IP_HEADER:-X-Real-IP}

    volumes:
      - ./storage:/storage
      - ./certs:/_certs
    depends_on:
      postgres:
        condition: service_healthy
        required: false

  # Optional: PostgreSQL database (for production)
  postgres:
    image: postgres:16-alpine
    container_name: agentrq-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${AGENTRQ_POSTGRES_DBNAME:-agentrq}
      POSTGRES_USER: ${AGENTRQ_POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${AGENTRQ_POSTGRES_PASSWORD:-postgres}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U ${AGENTRQ_POSTGRES_USER:-postgres}']
      interval: 10s
      timeout: 5s
      retries: 5
    # Only start if AGENTRQ_POSTGRES_ENABLED=true
    profiles:
      - postgres

volumes:
  postgres_data:
    driver: local

networks:
  default:
    name: agentrq-network