compose.production.yml
Rama main · réplica de lectura del repositorio original.
services:
maskgate:
build:
context: .
image: ${MASKGATE_IMAGE:-maskgate:local}
init: true
ports:
- "${BIND_HOST:-127.0.0.1}:${APP_PORT:-8080}:8080"
environment:
APP_ENV: production
APP_HOST: 0.0.0.0
APP_PORT: 8080
ENABLE_DEBUG_ENDPOINTS: "false"
ENABLE_PLAYGROUND: "false"
REQUIRE_AUTH: "true"
MASKGATE_API_KEYS: ${MASKGATE_API_KEYS:?set MASKGATE_API_KEYS}
TRUSTED_HOSTS: ${TRUSTED_HOSTS:?set TRUSTED_HOSTS}
LLM_PROVIDER: ${LLM_PROVIDER:-openai}
LLM_BASE_URL: ${LLM_BASE_URL:?set LLM_BASE_URL}
LLM_API_KEY: ${LLM_API_KEY:?set LLM_API_KEY}
LLM_DEFAULT_MODEL: ${LLM_DEFAULT_MODEL:?set LLM_DEFAULT_MODEL}
DETECTOR_PROFILE: ${DETECTOR_PROFILE:-strict}
POLICY_V2_FILE: ${POLICY_V2_FILE:-}
MASKGATE_APPLICATION_ID: ${MASKGATE_APPLICATION_ID:-maskgate}
MASKGATE_JURISDICTION: ${MASKGATE_JURISDICTION:-unspecified}
MASKGATE_DEFAULT_PURPOSE: ${MASKGATE_DEFAULT_PURPOSE:-remote_llm_processing}
RATE_LIMIT_REQUESTS: ${RATE_LIMIT_REQUESTS:-60}
RATE_LIMIT_WINDOW_SECONDS: ${RATE_LIMIT_WINDOW_SECONDS:-60}
LOG_LEVEL: ${LOG_LEVEL:-INFO}
read_only: true
tmpfs:
- /tmp:size=256m,mode=1777
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
pids_limit: 256
mem_limit: ${MEMORY_LIMIT:-2g}
cpus: ${CPU_LIMIT:-2.0}
healthcheck:
test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8080/health/live', timeout=3).read()"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
stop_grace_period: 30s
restart: unless-stopped