Files
acs/infra/docker-compose.yml
unknown 6946bf15bb feat(notify): 이메일 출입증 발송(EmailPassNotifier) 추가
- spring-boot-starter-mail 기반 EmailPassNotifier: acs.sms.provider=email일 때 활성.
  발신=acs.mail.from(기본 dept_itcm000@bok.or.kr), 수신=방문자 email,
  QR PNG를 첨부하고 공개 출입증 링크를 본문에 포함. 발송 실패는 log(승인 롤백 없음).
- provider 스위치에 email 추가(dev/hanbank/email). prod는 spring.mail.* 를 ACS_MAIL_*
  env로 주입(인증 선택), .env.example·docker-compose 반영.
- 테스트: EmailPassNotifierTest(발신/수신/제목/QR 첨부 구성, 이메일 없으면 미발송).

검증: 전체 5개 테스트 통과. 로컬 SMTP(aiosmtpd:1025)로 실발송 e2e 확인 —
MAIL FROM=dept_itcm000@bok.or.kr, RCPT=visitor, 제목/본문/pass-qr.png 첨부 수신 확인.

주의: 발신자가 bok.or.kr이면 SPF/DMARC상 실제 사내 SMTP 릴레이를 거쳐야 하며,
ACS_MAIL_HOST/PORT(및 필요 시 인증) 확보 후 실환경 발송 배선 필요.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-03 15:19:34 +09:00

85 lines
2.3 KiB
YAML

services:
db:
image: postgres:15
restart: unless-stopped
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- db_data:/var/lib/postgresql/data
networks:
- acs-net
app:
build:
context: ../backend
dockerfile: Dockerfile
image: acs-app:local
restart: unless-stopped
environment:
SPRING_PROFILES_ACTIVE: prod
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
# Pass delivery (dev = log only; hanbank = real LMS via DMZ API)
ACS_SMS_PROVIDER: ${ACS_SMS_PROVIDER:-dev}
ACS_SMS_API_URL: ${ACS_SMS_API_URL:-http://210.104.132.59:8000}
ACS_PUBLIC_BASE_URL: ${ACS_PUBLIC_BASE_URL:-http://localhost}
# Security: CORS origins (empty = same-origin via nginx); cookie Secure (enable under HTTPS)
ACS_CORS_ALLOWED_ORIGINS: ${ACS_CORS_ALLOWED_ORIGINS:-}
ACS_COOKIE_SECURE: ${ACS_COOKIE_SECURE:-false}
# Email pass delivery (used when ACS_SMS_PROVIDER=email)
ACS_MAIL_FROM: ${ACS_MAIL_FROM:-dept_itcm000@bok.or.kr}
ACS_MAIL_HOST: ${ACS_MAIL_HOST:-}
ACS_MAIL_PORT: ${ACS_MAIL_PORT:-25}
ACS_MAIL_USERNAME: ${ACS_MAIL_USERNAME:-}
ACS_MAIL_PASSWORD: ${ACS_MAIL_PASSWORD:-}
ACS_MAIL_SMTP_AUTH: ${ACS_MAIL_SMTP_AUTH:-false}
ACS_MAIL_STARTTLS: ${ACS_MAIL_STARTTLS:-false}
depends_on:
- db
networks:
- acs-net
web:
build:
context: ../frontend
dockerfile: Dockerfile
image: acs-web:local
restart: unless-stopped
ports:
- "${WEB_PORT:-80}:80"
depends_on:
- app
networks:
- acs-net
# One-shot user seeder (run manually): docker compose run --rm seed
seed:
image: python:3.12-slim
profiles: ["tools"]
working_dir: /work
volumes:
- ..:/work:rw
environment:
PGHOST: db
PGPORT: 5432
PGUSER: ${POSTGRES_USER}
PGPASSWORD: ${POSTGRES_PASSWORD}
PGDATABASE: ${POSTGRES_DB}
entrypoint: ["/bin/sh", "-c"]
command: ["pip install -q -r scripts/requirements.txt && python scripts/seed-load.py --file scripts/seeds/users.csv"]
depends_on:
- db
networks:
- acs-net
volumes:
db_data:
networks:
acs-net: