$ ssh -i "path-to-your-ec2-key.pem" ubuntu@your-ec2-public-ip
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ cat ~/.ssh/id_rsa.pub
$ cat ~/.ssh/id_rsa
공개 키 및 개인 키의 값이 올바르게 저장되었음에도 권한 에러(Permission denied)가 발생한다면 "cat ~/.ssh/authorized_keys" 을 통해서 파일 내용이 공개 키의 내용과 일치하는지 확인 후 일치하지 않는다면 공개 키의 내용을 그대로 복사한다.
name: CI/CD Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: "20"
- name: Install dependencies
run: npm install
- name: Build project
run: npm run build
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Add SSH key
uses: webfactory/ssh-agent@v0.5.3
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Deploy to server
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} 'bash -s' < ./deploy.sh
#!/bin/bash
# 로그 파일 설정
LOG_FILE="$HOME/deploy.log"
exec > >(tee -i $LOG_FILE)
exec 2>&1
# NVM 초기화
export NVM_DIR="$HOME/.nvm"
if [ -s "$NVM_DIR/nvm.sh" ]; then
source "$NVM_DIR/nvm.sh"
else
echo "NVM is not installed. Installing NVM..."
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source "$NVM_DIR/nvm.sh"
fi
# Node.js 설치 확인 및 설치
if ! command -v node &> /dev/null
then
echo "Node.js is not installed. Installing Node.js...."
nvm install --lts
fi
# 디렉토리 확인 및 생성
if [ ! -d "/home/ubuntu/nest-template" ]; then
echo "Creating directory /home/ubuntu/nest-template..."
mkdir -p /home/ubuntu/nest-template || { echo "Failed to create directory"; exit 1; }
fi
# 서버로 이동
cd /home/ubuntu/nest-template || { echo "Directory does not exist"; exit 1; }
# Git 저장소 업데이트
echo "Pulling latest code from GitHub..."
git pull git@github.com:wlduq0150/nest-template.git main || { echo "Failed to pull code from GitHub"; exit 1; }
# 종속성 설치
echo "Installing dependencies..."
npm install || { echo "Failed to install dependencies"; exit 1; }
# 빌드
echo "Building the application..."
npm run build || { echo "Failed to build the application"; exit 1; }
# 애플리케이션 재시작
echo "Restarting the application with PM2..."
pm2 restart all || { echo "Failed to restart the application"; exit 1; }
echo "Deployment completed successfully."
서버가 원활하게 실행할 수 있도록 최초 세팅을 끝내면 이제 main 브랜치의 변화를 감지해 자동으로 배포가 된다.