이 문서로 해결할 질문
- Docker Compose 인프라용
.env.docker.local에는 어떤 변수가 있나요?
- 각 변수는 어떤 Compose 파일에서 쓰이나요?
- 앱 패키지 env와 어떻게 맞춰야 하나요?
루트 .env.docker.local은 앱 패키지 env와 별도이며, MongoDB·PostgreSQL·Redis·Kafka·Kafka UI·Prometheus·Pushgateway·Grafana Compose 기동에 사용합니다.
cp .env.docker.example .env.docker.local
docker compose --env-file .env.docker.local -f docker/mongodb/compose.yml -f docker/postgres/compose.yml -f docker/redis/compose.yml -f docker/kafka/compose.yml -f docker/kafka-ui/compose.yml -f docker/pushgateway/compose.yml -f docker/prometheus/compose.yml -f docker/grafana/compose.yml up -d
앱 패키지의 DATABASE_URL·MONGODB_URI·REDIS_URL·KAFKA_BROKERS는 이 파일의 계정·호스트·포트와 동일한 접속 정보를 가리키도록 맞춥니다. 변수 준비 절차는 로컬 개발/온보딩 — 환경 변수 준비를 참고하세요.
MongoDB
docker/mongodb/compose.yml에서 root 계정을 설정합니다.
MONGO_ROOT_USERNAME / MONGO_ROOT_PASSWORD
| 항목 | 내용 |
|---|
| 설명 | MongoDB root 사용자·비밀번호 |
| 예시 | devuser / devpassword |
| Compose | docker/mongodb/compose.yml |
| 앱 env 정합 | MONGODB_URI의 사용자·비밀번호와 일치 |
PostgreSQL
docker/postgres/compose.yml에서 초기 DB·계정을 설정합니다.
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB
| 항목 | 내용 |
|---|
| 설명 | PostgreSQL 슈퍼유저·비밀번호·초기 데이터베이스명 |
| 예시 | devuser / devpassword / devdb |
| Compose | docker/postgres/compose.yml |
| 앱 env 정합 | DATABASE_URL의 user·password·database와 일치 |
Grafana PostgreSQL view는 prisma migrate deploy로 적용한다 (20260628000000_add_grafana_readonly_views).
Redis
docker/redis/compose.yml에서 비밀번호 인증·호스트 포트를 설정합니다.
REDIS_PASSWORD / REDIS_EXTERNAL_PORT
| 항목 | 내용 |
|---|
| 설명 | Redis requirepass 비밀번호·호스트에서 접속할 때 바인딩 포트 |
| 예시 | devpassword / 6379 |
| Compose | docker/redis/compose.yml |
| 앱 env 정합 | REDIS_URL에 동일 비밀번호 포함 (redis://:devpassword@127.0.0.1:6379) |
Kafka
docker/kafka/compose.yml에서 브로커 외부 리스너를 설정합니다.
KAFKA_EXTERNAL_HOST / KAFKA_EXTERNAL_PORT
| 항목 | 내용 |
|---|
| 설명 | 호스트에서 Kafka에 접속할 때 사용하는 호스트명·포트 |
| 예시 | localhost / 9092 |
| Compose | docker/kafka/compose.yml |
| 앱 env 정합 | KAFKA_BROKERS는 {KAFKA_EXTERNAL_HOST}:{KAFKA_EXTERNAL_PORT}와 일치 |
Kafka UI
개발 전용 UI이며 docker/kafka-ui/compose.yml에서 기동합니다.
KAFKA_UI_PORT / KAFKA_UI_CLUSTER_NAME / KAFKA_UI_BOOTSTRAP_SERVERS
| 항목 | 내용 |
|---|
| 설명 | Kafka UI 호스트 포트·클러스터 표시명·브로커 부트스트랩 주소 |
| 예시 | 8080 / mealio / kafka:19092 |
| Compose | docker/kafka-ui/compose.yml |
| 패턴 | KAFKA_UI_BOOTSTRAP_SERVERS는 Docker 네트워크 내부 주소(kafka:19092)를 사용 |
Prometheus
docker/prometheus/compose.yml에서 스크랩 대상을 host:port 형식으로 지정합니다.
PROMETHEUS_PORT
| 항목 | 내용 |
|---|
| 설명 | Prometheus UI 호스트 바인딩 포트 |
| 예시 | 9090 |
| Compose | docker/prometheus/compose.yml |
PROMETHEUS_PRODUCER_TARGET / PROMETHEUS_CONSUMER_TARGET
| 항목 | 내용 |
|---|
| 설명 | producer·consumer /metrics 스크랩 대상 (host:port) |
| 기본값 | producer:9100 / consumer:9101 |
| 예시 (호스트 개발) | host.docker.internal:9100 / host.docker.internal:9101 |
| Compose | docker/prometheus/compose.yml |
| 패턴 | producer·consumer METRICS_PORT와 포트를 맞춥니다. Compose 앱은 서비스명, 호스트 개발은 host.docker.internal을 사용합니다. |
PROMETHEUS_PUSHGATEWAY_TARGET
| 항목 | 내용 |
|---|
| 설명 | Prometheus가 Pushgateway를 스크랩할 때 사용하는 대상 (host:port) |
| 기본값 | pushgateway:9091 |
| 예시 (호스트 개발) | host.docker.internal:9091 |
| Compose | docker/prometheus/compose.yml |
| 패턴 | PUSHGATEWAY_PORT와 포트를 맞춥니다. Compose 앱은 서비스명, 호스트 개발은 host.docker.internal을 사용합니다. |
Pushgateway
docker/pushgateway/compose.yml에서 recipe-ingestion CLI batch job 메트릭 push 수집을 제공합니다.
PUSHGATEWAY_PORT
| 항목 | 내용 |
|---|
| 설명 | Pushgateway 호스트 바인딩 포트 (컨테이너 내부 9091) |
| 예시 | 9091 |
| Compose | docker/pushgateway/compose.yml |
| 앱 env 정합 | Consumer PUSHGATEWAY_URL의 호스트·포트와 일치 (호스트 CLI: http://localhost:9091, Compose 내부: http://pushgateway:9091) |
Grafana
docker/grafana/compose.yml에서 대시보드·알림을 설정합니다.
GRAFANA_PORT / GRAFANA_ADMIN_USER / GRAFANA_ADMIN_PASSWORD
| 항목 | 내용 |
|---|
| 설명 | Grafana UI 포트·초기 관리자 계정 |
| 예시 | 3030 / admin / admin |
| Compose | docker/grafana/compose.yml |
GRAFANA_MONGODB_CONNECTION_SCHEME
| 항목 | 내용 |
|---|
| 설명 | Grafana MongoDB 데이터소스 연결 스킴 |
| 허용 값 | mongodb(표준), mongodb+srv(Atlas 등 DNS seed list) |
| 예시 (로컬) | mongodb |
| 예시 (Atlas) | mongodb+srv |
| Compose | docker/grafana/compose.yml (미설정 시 mongodb) |
| 패턴 | GRAFANA_MONGODB_HOST 형식과 쌍으로 맞춤 — mongodb는 host:port, mongodb+srv는 호스트명만 |
GRAFANA_MONGODB_HOST / GRAFANA_MONGODB_USER / GRAFANA_MONGODB_PASSWORD / GRAFANA_MONGODB_DATABASE
| 항목 | 내용 |
|---|
| 설명 | Grafana MongoDB 데이터소스 접속 정보 |
| 예시 (로컬) | mongodb:27017 / devuser / devpassword / devdb |
| 예시 (Atlas) | cluster0.xxxxx.mongodb.net / Atlas 사용자 / 비밀번호 / DB명 |
| Compose | docker/grafana/compose.yml |
| 패턴 | Docker 네트워크 내부 호스트명(mongodb)과 MONGO_*·POSTGRES_* 계정과 일치. Atlas는 GRAFANA_MONGODB_CONNECTION_SCHEME=mongodb+srv와 함께 설정 |
GRAFANA_POSTGRES_SSL_MODE
| 항목 | 내용 |
|---|
| 설명 | Grafana PostgreSQL 데이터소스 TLS/SSL 모드 (datasources/postgresql.yml의 jsonData.sslmode) |
| 허용 값 | disable(기본), require, verify-ca, verify-full |
| 예시 (로컬) | disable |
| 예시 (RDS 등 TLS 필수) | require 또는 verify-full |
| Compose | docker/grafana/compose.yml (미설정 시 disable) |
| 패턴 | 로컬 Compose PostgreSQL은 SSL 미사용이므로 disable. 관리형 DB는 호스트 정책에 맞춤 |
GRAFANA_POSTGRES_HOST / GRAFANA_POSTGRES_USER / GRAFANA_POSTGRES_PASSWORD / GRAFANA_POSTGRES_DATABASE
| 항목 | 내용 |
|---|
| 설명 | Grafana PostgreSQL 데이터소스 접속 정보 (도메인 SSOT 스냅샷) |
| 예시 | postgres:5432 / devuser / devpassword / devdb |
| Compose | docker/grafana/compose.yml |
| 패턴 | POSTGRES_*·POSTGRESQL_URL과 자격 증명 일치. TLS는 GRAFANA_POSTGRES_SSL_MODE로 별도 설정 |
SLACK_OPS_WEBHOOK_URL / SLACK_PRODUCT_WEBHOOK_URL
| 항목 | 내용 |
|---|
| 설명 | Grafana 알림용 Slack 웹훅 |
| 예시 (비활성) | none |
| Compose | docker/grafana/compose.yml |
| 패턴 | 실제 URL이 없으면 none으로 두어 provisioning 오류를 방지 |
컨테이너 메모리 limit
루트 .env.docker.local의 *_MEMORY_LIMIT 변수는 Compose deploy.resources.limits.memory에 매핑됩니다. 값은 Docker 단위(512M, 1G 등)를 사용합니다.
| 변수 | 기본값(예시) | Compose |
|---|
MONGODB_MEMORY_LIMIT | 768M | docker/mongodb/compose.yml |
POSTGRES_MEMORY_LIMIT | 1G | docker/postgres/compose.yml |
REDIS_MEMORY_LIMIT | 256M | docker/redis/compose.yml |
KAFKA_MEMORY_LIMIT | 768M | docker/kafka/compose.yml |
KAFKA_UI_MEMORY_LIMIT | 512M | docker/kafka-ui/compose.yml |
PROMETHEUS_MEMORY_LIMIT | 512M | docker/prometheus/compose.yml |
PUSHGATEWAY_MEMORY_LIMIT | 128M | docker/pushgateway/compose.yml |
GRAFANA_MEMORY_LIMIT | 512M | docker/grafana/compose.yml |
앱 컨테이너 limit은 각 패키지 .env.docker.local에서 관리합니다.
| 변수 | 패키지 env | 기본값(예시) | Compose |
|---|
MEMORY_LIMIT | server/producer/.env.docker.local | 768M | docker/producer/compose.yml |
MEMORY_LIMIT | server/consumer/.env.docker.local | 1G | docker/consumer/compose.yml |
MEMORY_LIMIT | client/.env.docker.local | 512M | docker/client/compose.yml |
관련 문서