-
NCP를 이용한 프로젝트 배포 - (2) 배포☁️ infra/Naver Cloud Platform 2025. 2. 28. 00:54
Spring Boot로 개발한 애플리케이션을 Docker Hub에 올리고 이를 NCP 서버에서 자동으로 pull 받아 실행하도록 설정하는 과정
또한, GitHub Actions을 이용해 main 브랜치에 코드가 push될 때 자동으로 배포가 이루어지도록 설정
⤴️ Github Actions
GitHub Actions을 이용하여 CI/CD 파이프라인을 구축하는 설정입니다.
name: github-actions on: push: branches: [ "develop", "main" ] pull_request: branches: [ "develop", "main" ] jobs: build: name: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' - name: Cache Gradle packages uses: actions/cache@v2 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Make application.yml run: | mkdir ./src/main/resources touch ./src/main/resources/application.yml echo "${{ secrets.APPLICATION_YML }}" >> ./src/main/resources/application.yml shell: bash - uses: actions/upload-artifact@v4 with: name: application.yml path: ./src/main/resources/application.yml - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew clean build --exclude-task test - name: Docker build & push run: | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} -p ${{ secrets.DOCKER_HUB_PASSWORD }} docker build -f Dockerfile -t ${{ secrets.DOCKER_HUB_REPO }} . docker push ${{ secrets.DOCKER_HUB_REPO }} - name: Deploy Service uses: appleboy/ssh-action@master with: host: ${{ secrets.NCP_HOST }} username: ${{ secrets.NCP_USERNAME }} password: ${{ secrets.NCP_PASSWORD }} port: ${{ secrets.NCP_PORT }} script: | echo "${{ secrets.DOCKER_HUB_PASSWORD }}" | sudo docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin sudo docker rm -f ${docker ps -qa} sudo docker pull ${{ secrets.DOCKER_HUB_REPO }} sudo docker-compose up -d sudo docker image prune -f
📍 설정 설명
- Gradle 빌드 캐싱: 빌드 속도를 높이기 위해 캐싱을 사용합니다.
- 환경 변수(application.yml) 적용: GitHub Secrets에 저장된 설정을 application.yml 파일로 생성합니다.
- Gradle 빌드: 테스트 제외 후 빌드 실행
- Docker Build & Push: 생성된 이미지를 Docker Hub에 push
- 배포(Deploy Service): NCP 서버에서 최신 이미지를 pull하여 실행
📌 NCP Server 환경 설정
1️⃣ Docker 설치
패키지 업데이트
sudo apt update
필수 패키지 설치
- Docker에 설치 전 필요한 필수 패키지를 먼저 설치
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
Docker 공식 GPG Key 추가
curl -fsSL <https://download.docker.com/linux/ubuntu/gpg> | sudo apt-key add -
Docker Repository 등록
sudo add-apt-repository \\ "deb [arch=amd64] <https://download.docker.com/linux/ubuntu> \\ $(lsb_release -cs) \\ stable"
Docker 설치
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.i
설치 확인
sudo docker run hello-world
2️⃣ Docker compose 설치
도커 컴포즈 다운로드 및 설치
- 도커 컴포즈 최신 버전은 https://github.com/docker/compose/releases
sudo curl -L "<https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
3️⃣ docker-compose.yml
version: "3" services: spring-app: image: ${{ secrets.DOCKER_HUB_REPO }} container_name: spring_app_container ports: - "8080:8080"
👟 전체 과정
- main 브랜치에 코드 push
- GitHub Actions 실행
- Gradle build
- Docker build & push
- NCP 서버에 SSH 접속 후 최신 이미지 pull 및 실행
- NCP 서버에서 최신 컨테이너 실행
📖 참고자료
'☁️ infra > Naver Cloud Platform' 카테고리의 다른 글
CLOVA Studio API 이용하여 답변 받기 (1) 2025.03.07 NCP를 이용한 프로젝트 배포 - (3) 도메인 및 SSL 적용 (0) 2025.02.28 NCP를 이용한 프로젝트 배포 - (1) 서버 (0) 2025.02.28