Skip to content

Docker 기반 운영 배포 환경 구성 #34

Description

@exijn

작업 배경

PR #33 병합으로 캡슐 암호화 기능이 develop에 반영된 이후, GSMSV 학교 VM에서 MUDDA를 최초 수동 배포할 수 있도록 Docker 기반 운영 환경을 구성했습니다.

기존 docker-compose.yml은 로컬 개발용 PostgreSQL/PostGIS·Redis 구성으로 유지하고, 운영 환경은 별도 Compose 파일로 분리했습니다.

완료 내용

  • Java 21·Gradle Wrapper 기반 멀티 스테이지 운영 Dockerfile 추가
  • 비 root 애플리케이션 실행, 레이어 캐시, JVM 메모리 옵션, graceful shutdown 구성
  • 운영 전용 docker-compose.prod.yml 추가
  • App·PostgreSQL/PostGIS·Redis Health Check 구성
  • PostgreSQL·Redis 외부 포트 비공개, App 8080만 공개
  • PostgreSQL·Redis 영구 볼륨, 재시작 정책, Docker 로그 회전 구성
  • Asia/Seoul 운영 시간대 및 2 vCPU·8GB RAM 환경에 맞춘 JVM 설정 구성
  • 운영 Profile 및 .env.production.example 추가
  • Firebase Credential·운영 .env·Secret 제외 규칙 확인
  • GSMSV 수동 배포 안내 문서 작성
  • Health Endpoint 접근을 위한 최소 SecurityConfig 변경 및 테스트 보강

운영 환경

  • GSMSV Project Owner VM: Ubuntu 22.04.5 LTS, x86_64, 2 vCPU, RAM 7.9GB, 디스크 40GB
  • GSMSV HTTPS Reverse Proxy가 mudda-api.https.gsmsv.site의 HTTPS를 종료하고 VM 내부 8080으로 전달
  • Nginx·Certbot은 사용하지 않음
  • PostgreSQL/PostGIS와 Redis는 Compose 내부 네트워크에서만 접근

산출물

  • Dockerfile
  • .dockerignore
  • docker-compose.prod.yml
  • .env.production.example
  • src/main/resources/application-prod.yaml
  • src/main/kotlin/team/cklob/mudda/global/config/SecurityConfig.kt
  • src/test/kotlin/team/cklob/mudda/global/config/SecurityConfigTest.kt
  • docs/GSMSV_MANUAL_DEPLOYMENT.md
  • .gitignore 운영 Secret·Credential 제외 규칙

검증 결과

  • SecurityConfigTest 통과
  • ./gradlew build -x test 통과
  • git diff --check 통과
  • 운영 Compose 설정 정적 검증 통과
  • Secret·Firebase Credential·빌드 산출물 미포함 확인
  • 자체 코드 리뷰 2회 완료

전체 ./gradlew test·./gradlew check와 Docker 이미지 빌드·Compose 통합 기동은 Docker Desktop Linux Engine이 실행되지 않은 환경에서 Testcontainers가 Docker 데몬을 찾지 못해 실행하지 못했습니다. 실제 GSMSV VM 배포 전에 Docker 환경에서 PostgreSQL/PostGIS·Redis·App 기동, Flyway, Health, 볼륨, 재시작, 포트 노출을 추가 확인해야 합니다.

제외 범위 및 후속 작업

  • GSMSV VM 최초 실제 배포 및 도메인 생성
  • PostgreSQL 백업 구성
  • develop 기반 GitHub Actions CD 및 GHCR 배포
  • Discord 웹훅 임베드 알림
  • Nginx·Certbot, 자동 롤백, Blue-Green, Kubernetes, 모니터링 스택
  • Redis 인증 추가

관련 PR

대상 브랜치: develop

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions