[INFRA-06] prod override + .env.prod
작업 내용 (설계 의도)
변경 사항
근거 TDD: ../TDD.md “스택 격리”, “env 라벨 주입”, “FR-9”. ADR-004/005. base에 prod 환경 값을 얹는 override와 env 파일을 신설한다. ⑧ 소유 파일. dev override(INFRA-05)와 다른 파일 — 같은 wave 병렬 안전.
docker-compose.prod.yml: prod 호스트 포트(backend 18080, minio 19000/19001, mock 19101-19103, mailhog 11025/18025). DB 포트(mysql/mongo/redis/kafka)는 미노출(FR-9: prod 직접 변경 경로 최소화).- backend
environment에APP_ENV: prod리터럴 주입. - backend image 태그 핀:
sports-backend:${DOCKER_TAG}—.env.prod의DOCKER_TAG가 배포된 커밋 SHA를 가리킴(롤백 = 이전 SHA로 치환). .env.prod:DOCKER_TAG=<sha>, DB 크리덴셜, 포트 변수.- 실행 규약:
docker compose -p sports-prod -f docker-compose.yml -f docker-compose.prod.yml up -d.
롤백: rollback.sh prod <prev_sha>가 .env.prod DOCKER_TAG를 이전 값으로 치환 후 재배포(5분 내, NFR).
의존
- INFRA-02 (base 서비스명·내부 포트 계약)
다이어그램
클래스 의존
flowchart LR Base["docker-compose.yml"] --> Merge["-f 병합"] ProdOv["docker-compose.prod.yml"] --> Merge EnvProd[".env.prod DOCKER_TAG=sha"] --> Merge Merge --> Stack["sports-prod 스택 APP_ENV=prod, DB 미노출"]
테스트 케이스
docker compose -p sports-prod -f docker-compose.yml -f docker-compose.prod.yml config가 exit 0이다- 기동 후 backend env
APP_ENV가prod를 반환한다 - prod는 backend를 18080에 노출하고 DB 포트는 노출하지 않는다(
docker port sports-prod-mysql-1비어있음) - backend 이미지가
${DOCKER_TAG}SHA 태그로 핀된다 - dev·prod 동시 기동 시 포트·볼륨 충돌이 0건이다