배포 아키텍처 (Deployment Architecture)
[개발자 작업] --> [GitHub Repository (main 브랜치)] --> [GitHub Actions] --> [Docker Hub] --> [운영 서버]
자동 배포 프로세스 (CI/CD Pipeline):
- 트리거 (Trigger):
• main 브랜치에 코드 푸시 시 GitHub Actions 워크플로우 자동 실행
- 빌드 단계 (Build Phase):
• Ubuntu 환경에서 소스코드 체크아웃
• npm 캐시 활용하여 의존성 설치 (npm ci)
• NestJS 프로젝트 빌드 (npm run build)
- Docker 이미지 생성 및 푸시 (Docker Build & Push):
• Docker Buildx 설정
• Docker Hub 로그인 (시크릿 사용)
• Docker 이미지 빌드 (linux/arm64 플랫폼용)
• 이미지를 gooch1744/jujeopton:latest 태그로 Docker Hub에 푸시
- 서버 배포 (Deployment):
• SSH를 통해 운영 서버에 접속 (포트 12000)
• Docker Hub에서 최신 이미지 풀
• 기존 컨테이너 중지 및 제거
• 환경 변수 파일(/home/gooch123/env/.env.dev)을 사용하여 새 컨테이너 실행
• 서버의 4000 포트를 컨테이너의 3000 포트에 매핑
Docker 컨테이너 구성:
- 베이스 이미지: Node.js 20 Alpine (경량화 이미지)
• 작업 디렉토리: /app
• 빌드 최적화: 레이어 캐싱을 위한 단계적 빌드 프로세스
• 포트: 컨테이너 내부 3000 포트 노출 (서버에서는 4000 포트로 매핑)