AWS 배포한 후 추가로 코드를 수정했을 때 자동으로 서버에 적용해주면 좋을것 같다라는 생각으로 시작했다.
찾아보니 여러 툴이 있었지만 가장 간편하게 보였던 github action을 이용해봤다.
아래는 완성 코드이다.
name: Continuous Deployment
on:
push:
branches:
- prod
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Deploy to prod
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST_DEV }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: 22
script: |
cd projectName/
npx pm2 kill
git pull
npm i
npx pm2 start server.js
1. 환경 구축
EC2 : Amazon Linux
(1) EC2 아이디, 비밀번호 설정
EC2 터미널 이동 -> 아이디, 비밀번호 설정 -> 비밀번호로 접근 허용
깃허브에서 EC2에 접근하는 방법은 비밀키를 만들 수도 있지만 간단하게 아이디, 비밀번호를 통해 접근할 수도 있다.
위 링크에서 키를 만드는 방법을 볼 수 있다.
나는 비밀번호를 통해 접근하도록 설정할 것이다.
EC2 터미널 이동후 아래 코드 작성
sudo passwd ec2-user
나는 기본으로 주어지는 ec2-user 에 대해서 비밀번호를 설정하고 접근을 허용해줄 예정이다.
sudo vi /etc/ssh/sshd_config
PasswordAuthentication 부분을 yes로 변경하고 저장
sudo service sshd restart
sshd 다시 시작하면 아이디, 비밀번호로 ec2에 접근할 수 있다.
(2) NodeJs 설치
curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs
(3) git 설치 & git pull
sudo yum install git
git pull을 불러올 때 프라이빗, 퍼블릭 둘다 가능하도록 ssh로 클론 할 것이다.
ssh-keygen
cd ~/.ssh
ls -al
cat id_rsa.pub
순서대로 입력해주면 ssh키가 나온다. 이를 모두 복사해서 github에 세팅 해주면 된다.
github -> 오른쪽 위 내 프로필 클릭 -> settings -> SSH and GPG keys -> New SSH key -> Key에 붙여넣기
위와 같이 키가 생성되면 해당 ec2 인스턴스에 ssh로 레퍼지토리를 클론할 자격을 주는 것이다.
위와 같이 SSH로 프로젝트를 클론하면 된다.
git clone [ssh주소]
나는 서버가 터져도 계속 실행시켜주기 위해 pm2 라이브러리를 사용하여 서버를 실행시킬 것이다.
2. Actions 추가
깃 허브 레퍼지토리에 Actions가 있다 클릭해서 추가한다.
그러면 .github/workflows에 yml파일이 하나 생성된다. git hub에서 조건에 맞으면 이 파일을 자동으로 읽는 것이다.
3. yml 파일 작성
on:
push:
branches:
- prod
yml파일을 작동시킬 조건을 적는 곳이다.
위 같은 경우는 prod 브런치에 push 하는 이벤트를 on 하도록 설정해줬다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Deploy to prod
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST_DEV }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: 22
script: |
cd citylabsBack/
npx pm2 kill
git pull
npm i
npx pm2 start server.js
ubuntu-latest 환경에서 작동하도록 설정하고
name은 적고 싶은걸 적으면 된다.
uses는 정해진 형식이 있다.
나는 appleboy/ssh-action@master 라는 정해진 action을 사용했고 틀을 맞춰주었다.
screts 는 github에서 제공하는 비밀 변수이다. .env라고 생각하면 된다.
해당 github 레퍼지토리 -> settings -> secrets and variables -> Actions 에서 키값과 밸류값을 설정할 수 있다.
HOST_DEV는 이부분을 넣으면 된다.
USERNAME 은 ec2-user, PASSWORD는 아까 설정한 비밀번호를 넣어주면 된다.
그리고 script 부분에 서버를 끄고 git pull 한 후 다시 서버를 키는 과정을 코드로 적으면 된다.
git pull 하는 경우 해당 레퍼지토리 폴더 이동하는 cd 명령어를 빼먹으면 안된다.
4. 자동배포
prod 브런치에 푸시하면 자동배포가 시작된다.
이렇게 볼수 있고 클릭해서 보면 실시간으로 진행되는 과정도 볼수 있다.
'개발 > Devops' 카테고리의 다른 글
[Devops] ELK 디스크 부족 이슈 S3로 해결하기 - ubuntu 22.04 (0) | 2023.11.23 |
---|---|
[Devops] ELK Stack 8.x 설치 - ubuntu 22.04 (0) | 2023.11.13 |
[Devops] spring boot 블루/그린 무중단 배포 (gitlab ci, docker, nginx) (0) | 2023.06.19 |
[Devops] react 무중단 배포 (gitlab ci, s3, cloudfront) (0) | 2023.06.19 |
[Devops] github actions로 자동 배포 설정하기 (react docker 배포) (1) | 2023.02.16 |