mirim-app/deploy/docker-compose.prod.yml
AWESOMEDEV 111590104e feat: 수습 학습 플랫폼 최초 구축 (React + Spring Boot + PostgreSQL)
- 로그인/회원가입/아이디찾기/비밀번호재설정 (세션 기반)
- 대시보드(주차별 진도 체크리스트), 학습 문서 뷰어(17종), 과제 제출/멘토 피드백
- 코딩 기초·개발 환경 설치 가이드 학습 페이지
- 전 소스 한국어 학습 주석 — 수습생 교육용 저장소
- Docker 배포 구성 (Caddy + Spring Boot + PG + Gitea)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 08:18:12 +09:00

84 lines
2.7 KiB
YAML

# 운영 배포용 컴포즈 — EC2에서 이 파일 하나로 전체 스택이 뜹니다.
# 사용법: cd deploy && cp .env.example .env (비밀번호 수정) && docker compose -f docker-compose.prod.yml up -d --build
# 학습 포인트: 개발(로컬)과 운영의 차이 —
# - DB 포트를 외부에 안 엽니다(컨테이너끼리 내부 네트워크로만 통신)
# - 비밀번호는 .env 파일로 주입 (코드/이미지에 안 넣음)
# - 재부팅해도 자동 시작(restart: unless-stopped)
services:
postgres:
image: postgres:17-alpine
container_name: mirim-postgres
environment:
POSTGRES_DB: mirim
POSTGRES_USER: mirim
POSTGRES_PASSWORD: ${DB_PASSWORD:?deploy/.env에 DB_PASSWORD를 설정하세요}
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mirim"]
interval: 10s
timeout: 5s
retries: 5
backend:
build: ../backend
container_name: mirim-backend
environment:
DB_HOST: postgres # 학습 포인트: 컨테이너끼리는 서비스 이름이 곧 주소예요
DB_PORT: 5432
DB_NAME: mirim
DB_USER: mirim
DB_PASSWORD: ${DB_PASSWORD}
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
# 프론트 빌드 결과물을 공유 볼륨(webroot)에 복사해 주고 종료하는 일회성 컨테이너
frontend-build:
build: ../frontend
container_name: mirim-frontend-build
volumes:
- webroot:/out
restart: "no"
caddy:
image: caddy:2-alpine
container_name: mirim-caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- webroot:/srv:ro
- caddy-data:/data # HTTPS 인증서 보관 (재시작해도 유지)
depends_on:
- backend
- frontend-build
restart: unless-stopped
# Gitea — 가벼운 사내 Git 서버. 학생들이 clone/commit/push를 연습하는 곳.
# 학습 포인트: GitHub 같은 서비스를 우리 서버 안에 직접 띄운 것. 웹 UI는 :3000.
gitea:
image: gitea/gitea:1.23
container_name: mirim-gitea
environment:
GITEA__server__ROOT_URL: http://${GIT_HOST:-3.36.160.246}:3000/
GITEA__server__SSH_PORT: "222"
GITEA__service__DISABLE_REGISTRATION: "false" # 학생 스스로 가입 가능
GITEA__security__INSTALL_LOCK: "true" # 웹 설치 마법사 건너뛰기(설정은 env로 완료)
ports:
- "3000:3000" # 웹 UI + HTTP clone/push
- "222:22" # SSH clone/push (선택)
volumes:
- gitea-data:/data
restart: unless-stopped
volumes:
pgdata:
webroot:
caddy-data:
gitea-data: