Files
FarmaFinder/apps/pip-platform/docker-compose.yml
Antoni Nuñez Romeu 190b3d163d
Run Tests on Branches / Backend Tests (push) Successful in 3m38s
Run Tests on Branches / Frontend Tests (push) Successful in 3m28s
Restructure with Turborepo
2026-07-06 15:51:53 +02:00

123 lines
3.4 KiB
YAML

services:
pip-api:
build:
context: .
dockerfile: Dockerfile
restart: unless-stopped
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql+asyncpg://pip:${PG_PASSWORD:-pip-secret}@postgres:5432/pip
REDIS_URL: redis://redis:6379/0
RABBITMQ_URL: amqp://pip:${RABBITMQ_PASSWORD:-pip-secret}@rabbitmq:5672/pip
JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-me-in-production}
NODE_ENV: production
LOG_LEVEL: INFO
LOG_JSON_FORMAT: "true"
CORS_ORIGINS: '["*"]'
# Re-routed to the shared Grafana Alloy collector on srv84-macos.
# host.docker.internal resolves to the Docker host gateway from
# inside the container — works because this stack runs on the same
# host as the monitoring stack.
OTEL_EXPORTER_OTLP_ENDPOINT: ${OTEL_EXPORTER_OTLP_ENDPOINT:-http://host.docker.internal:4317}
OTEL_TRACES_ENABLED: "true"
extra_hosts:
# `host-gateway` is the standard Docker engine alias for the bridge
# gateway (host.docker.internal is mac/Windows-native; this covers bare Linux).
- "host.docker.internal:host-gateway"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
rabbitmq:
condition: service_healthy
healthcheck:
test: ["CMD", "python", "-c", "import httpx; r = httpx.get('http://localhost:8000/api/v1/system/health'); exit(0 if r.status_code == 200 else 1)"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
deploy:
resources:
limits:
cpus: "2.0"
memory: 1G
reservations:
cpus: "0.5"
memory: 256M
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: pip
POSTGRES_USER: pip
POSTGRES_PASSWORD: ${PG_PASSWORD:-pip-secret}
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U pip -d pip"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
command: >
postgres
-c max_connections=200
-c shared_buffers=256MB
-c effective_cache_size=768MB
-c work_mem=4MB
-c maintenance_work_mem=64MB
-c checkpoint_completion_target=0.9
-c wal_buffers=16MB
-c default_statistics_target=100
-c random_page_cost=1.1
-c effective_io_concurrency=200
-c max_worker_processes=8
redis:
image: redis:7-alpine
restart: unless-stopped
ports:
- "6380:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
command: >
redis-server
--maxmemory 256mb
--maxmemory-policy allkeys-lru
--appendonly yes
--appendfsync everysec
rabbitmq:
image: rabbitmq:3-management-alpine
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: pip
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-pip-secret}
RABBITMQ_DEFAULT_VHOST: pip
ports:
- "5672:5672"
- "15672:15672"
volumes:
- rabbitmq_data:/var/lib/rabbitmq
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
volumes:
postgres_data:
redis_data:
rabbitmq_data: