SSH 비밀번호 아이디 접속을 통해 배포 하는 방법에 대해 다루겠습니다
✅ 공식문서 🔎
😇 항상 공식 문서가 중요한 법 입니다.!!
👉 공식 홈페이지, 공식 문서
- 🌻 특정 소프트웨어 workflow를 자동화할 수 있도록 도와주는 도구로써 사용을 보통 합니다.
이와 비슷한 자동화 도구는 저가 생각 하기에는 🌻 Jenkins를 이와 같이 쓸 수 있다고 생각합니다.
- ☕ Workflow의 대표적인 예시
- 1) Test Code
- ex) 내가 작성한 Test Code가 통과 하는가?
- ex) 서버가 스트레스트 테스트를 통과 하는가?
- 2) 배포
- 서버에 새로운 기능, 버전 등을 배포
- 3) 기타 자동화하고 싶은 스크립트
- 크롤링을 이용한 데이터 수집 및 cron을 이용한 배포
- 1) Test Code
✅ Github Action Core 개념 🔎
글 참조( https://zzsza.github.io/development/2020/06/06/github-action/ )
- Github Action을 이해하기 위해서 알아야 하는 개념은 Workflow, Event, Job, Step, Action, Runner 등이 있음
- 1) Workflow
- 여러 Job으로 구성되고, Event에 의해 트리거될 수 있는 자동화된 프로세스
- 최상위 개념
- Workflow 파일은 YAML으로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장됨
- 2) Event
- Workflow를 Trigger(실행)하는 특정 활동이나 규칙
- 예를 들어 다음과 같은 상황을 사용할 수 있음
- 특정 브랜치로 Push, Pull Request 할 경우
- 특정 시간대에 반복(Cron)
- Webhook을 사용해 외부 이벤트를 통해 실행
- 자세한 내용은 Events that trigger workflows 참고
- 3) Job
- Job은 여러 Step으로 구성되고, 가상 환경의 인스턴스에서 실행됨
- 다른 Job에 의존 관계를 가질 수 있고, 독립적으로 병렬 실행도 가능함
- 4) Step
- Task들의 집합으로, 커맨드를 날리거나 action을 실행할 수 있음
이외에도 여러 개념이 있습니다. 하지만 저는 지금 해당 글에서 사용하는 개념만 가져 오도록 하며 더욱 깊이 내용을 알고 싶으신 분은 위 공식 문서를 참조 하면 되겠습니다.
⚡ 실습 1(Workflow 작성)
1. Docker build
2. Docker push
3. Docker rm, rmi
4. Docker run
name: deploy-every-fastapi
on:
push:
branches: master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy FastApi MainServer(master)
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_PORT }}
script: |
cd ~/Fastapi-cpu-bound
git pull
docker build -t ehghksvjscl/fastapi-cpu-bound .
docker push ehghksvjscl/fastapi-cpu-bound
docker rm fastapi-test --force
docker rmi ehghksvjscl/fastapi-cpu-bound:latest
nohup docker run -p 8888:8888 --name fastapi-test ehghksvjscl/fastapi-cpu-bound > nohup.out 2>&1 &
- on = Event
- 어떤 조건에 Workflow를 Trigger 시킬지 명시 할 수 있습니다.
- push할 경우 Workflow를 실행
on:
push:
branches: [ master ]
- jobs
- Workflow는 다양한 Job으로 구성됩니다.
- 여러 Job이 있을 경우, Default로 병렬 실행 하며
- runs-on은 어떤 OS에서 실행될지 지정 해 줍니다.
- steps의 uses는 어떤 액션을 사용할지 지정함. 이미 만들어진 액션을 사용합니다. 누눈가가 appleboy/ssh-action@master 라는 액션을 만들어 놓은 거져
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy FastApi MainServer(master)
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
password: ${{ secrets.SERVER_PASSWORD }}
port: ${{ secrets.SERVER_PORT }}
script: |
cd ~/Fastapi-cpu-bound
git pull
docker build -t ehghksvjscl/fastapi-cpu-bound .
docker push ehghksvjscl/fastapi-cpu-bound
docker rm fastapi-test --force
docker rmi ehghksvjscl/fastapi-cpu-bound:latest
nohup docker run -p 8888:8888 --name fastapi-test ehghksvjscl/fastapi-cpu-bound > nohup.out 2>&1 &
- jobs의 이름은 deploy입니다.
- docker images는 저의 개인 계정의 Public으로 올려 놓은 fastapi-cpu-bound를 사용합니다.
https://unocoings.tistory.com/16를 참조 하시면 만드는 방법이 있습니다. - nohup 명령어는 리눅스에서 프로세스를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어입니다.
⚡ 실습 2(Secret Key 저장하기)
- Secret Key 등록하기
-
- Repository의 Settings - 왼쪽에 Secrets 클릭
- New secret 클릭하고 Name과 Value 입력하기
- Repository access 쪽으로 가면, access policy를 정할 수 있음
- workflow에서 사용할 땐 $ 으로 사용하고, python에선 os.getenv(변수 이름)으로 사용
✅ 확인 해 보기
확인 하기 위한 절차
1. 확인
😀😀 배포 성공!!!
'Backend & 인프라' 카테고리의 다른 글
[Nginx] 로드 밸런싱(Load balancing) (0) | 2022.07.05 |
---|---|
[FastApi] CPU를 많이 사용하는 APP 만들기 (CPU Bound) (0) | 2022.06.30 |
[Docker] Permission Denied (0) | 2022.06.30 |