민프
[DevOps][NCP] NCP-Server + Docker + NCP-Container Register로 Nestjs어플리케이션 배포하기 (feat. CICD-github Actions) 본문
[DevOps][NCP] NCP-Server + Docker + NCP-Container Register로 Nestjs어플리케이션 배포하기 (feat. CICD-github Actions)
민프야 2025. 4. 8. 19:531. 사전 준비
NCP - Server, VPC
2. 공인 IP 설정
Server에 적용 할 공인 IP를 생성합니다.
3. ACG 설정
Server에 적용되어있는 ACG를 설정합니다.
(각 포트 등..)
4. Root 비밀번호 받기
서버를 생성하면서 받은 pem키로 비밀번호를 받으면 됩니다.
(서버 선택 -> 서버 관리 및 설정 변경 -> 관리자 비밀번호 확인)
5. VScode에서 서버 접근 (Remote-SSH)
Host {서버 별명}
HostName {포트포워딩에서 확인한 서버 접속용 공인 IP}
Port {포트포워딩에서 확인한 서버 접속용 외부 포트} <- SSH는 22번
User {관리자 이름} <- root
IdentityFile {pem 파일 경로}
접근 성공
6. Container Reistry 생성 방법
6-1. Object Storage 이용 신청 및 버킷 생성
6-2 Container Registry 생성 - 6-1에서 생성한 버킷 선택
버킷을 생성하면 이렇게 이용 가이드가 나오게 됩니다.
이제 로컬에서 이미지 생성 후 Container Registry에 이미지를 Push해보도록 하겠습니다.
7. 로컬에서 NCP - Container Reistry로 이미지 PUSH
# 1. 빌드
docker buildx build --platform linux/amd64 -t your-nest-app .
# 2. NCR용 태그 붙이기 (NCR 주소 확인)
docker tag your-nest-app kr.ncr.ntruss.com/your-nest-app:latest
# 3. 로그인 (가이드 참고)
docker login kr.ncr.ntruss.com -u ncp -p 'YOUR_NCP_CONTAINER_TOKEN'
로그인 시 Username, password를 요구하는데
API 인증키 관리에 들어가셔서
- username : AccessKey
- password : Secret Key
입력해주시면 됩니다.
# 4. 이미지 푸시
docker push kr.ncr.ntruss.com/your-registry/your-nest-app:latest
이미지 PUSH를 성공하였습니다.
8. NCP Server에서 Container Reistry 이미지 pull
8-1. NCP Server에서 Docker 설치
sudo apt update -y
sudo apt install -y docker.io
sudo systemctl start docker
sudo usermod -aG docker $USER
설치확인
docker --version
8-2 NCP Server에서 NCP 로그인 (Container Registry 이용 가이드 참고)
docker login public
Accesskey, Secret Key 잘 입력해주시면 아래와 같이 로그인이 성공적으로 되게 됩니다.
8-3. NCP Server에서 Container Registry 이미지 PUSH
docker push 레지스트리 주소/<TARGET_IMAGE[:TAG]>
성공 하시면 이미지 리스트에 이미지가 생성 됩니다.
8-4. NCP Server에서 Container Registry 이미지 PULL
docker push 레지스트리 주소/<TARGET_IMAGE[:TAG]>
8-5. NCP Server에서 Container RUN
3000포트로 여시는거면 ACG에서 포트 열어주셔야합니다.
8-6. 해당 과정을 Github Actions로 자동배포하기
Github Actions 사용하려면 ACG에서 22번 포트를 열어주셔야합니다.
- NCP_CP_PASSWORD : API Secret Key
- NCP_CP_USERNAME : API Access Key
- NCP_SERVER_HOST : NPC Server Public IP
- NCP_SERVER_PASSWORD : NPC Server관리자 비밀번호
- NCP_SERVER_SSH_KEY : SSH키
- NCP_SERVER_USER : root
name: Deploy to NCP Server from NCP Container Registry
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: ✅ Checkout source code
uses: actions/checkout@v3
- name: 🐳 Build Docker image
run: |
docker buildx build --platform linux/amd64 --no-cache -t bvc-ordering .
- name: 🔐 Login to NCP Container Registry
run: |
echo "${{ secrets.NCP_CR_PASSWORD }}" | docker login container주소 -u ${{ secrets.NCP_CR_USERNAME }} --password-stdin
- name: 📦 Tag and Push Docker image to NCP Container Registry
run: |
docker tag 이미지이름 Container주소/이미지이름:latest
docker push 태그된이미지이름(Container주소/이미지이름:latest)
- name: 🚀 Deploy to NCP Server via SSH
uses: appleboy/ssh-action@v1.2.2
with:
host: ${{ secrets.NCP_SERVER_HOST }}
username: ${{ secrets.NCP_SERVER_USER }}
password: ${{ secrets.NCP_SERVER_PASSWORD }}
port: 22
script: |
echo "SSH login success"
docker pull 태그된이미지이름(Container주소/이미지이름:latest)
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker run -d -p 3000:3000 --name 컨테이너이름 태그된이미지이름
위 CD 쪽에서 SSH 접속하는 부분이
Password으로 인증하는 방법과 SSH로 나뉘는데
저는 password로 구현하였습니다.
'DevOps > [NCP]' 카테고리의 다른 글
[DevOps][NCP] Slack말고 네이버 웍스(naver works) API를 이용한 푸시 알림을 해보자 (2) | 2025.06.11 |
---|---|
[Devops][NCP] Server 구축 (2) | 2025.04.07 |
[DevOps][NCP] Cloud DB for MySQL 생성하기, 로컬에서 접속하기(VPC 설정) (1) | 2025.04.07 |
[DevOps][NCP] VPC, 서브넷 생성하기 (0) | 2025.04.07 |