이번 포스팅에서는 Github Actions를 이용해 아주 간단하게 코드를 원격 리눅스 서버에 배포하는 기능을 구성해보도록 하겠다. 코드 배포에는 Ubuntu를 기준으로 작성되었으며 SSH와 SCP를 이용한다. 이게 제일 간단하다. SCP를 이용하면 복사할 때 중복되는 파일을 덮어쓰기 됨에 유의하자.
Prerequisites
- 서버의 public access 개방
- 배포할 서버에 접속할 수 있는 key pair (pem파일)
Quick Start
Github Actions에 들어가서 main 브랜치에 대해 actions를 생성한다. 아래 내용을 작성하면 자동으로 아래 경로에 yml파일이 만들어 진다.
.github/workflows/main.yml
name: Code deploy
on:
workflow_dispatch:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Create SSH Key
run: |
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/private-key.pem
chmod 600 ~/private-key.pem
- name: Create SSH directory
run: |
mkdir -p ~/.ssh
- name: Add known host
run: |
ssh-keyscan ${{ secrets.REMOTE_HOST }} >> ~/.ssh/known_hosts
- name: Copy files to remote server
run: |
cd ${{ github.workspace }}
scp -i ~/private-key.pem -r ./* ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}:${{ secrets.REMOTE_TARGET }}
echo "Copied files to remote server"
레포 Settings에 들어가서 Repository secrets에 아래 항목들을 만들어 준다.
- REMOTE_HOST
- REMOTE_TARGET
- REMOTE_USER
- SSH_PRIVATE_KEY
Github Actions 만들기
Github Actions 탭에 들어가서 workflow를 새로 만들어 준다. 사전에 정의된 Template를 사용할 수도 있겠으나 이번엔 'set up a workflow yourself'를 눌러서 직접 workflow를 작성하자.
Worflow 작성
작성화면에 본문 상단의 내용을 붙여넣기 한다. 코드의 내용을 주석과 함께 자세히 뜯어 보자.
name: Code deploy
on:
workflow_dispatch: # 이 태그가 있으면 workflow를 매뉴얼하게 트리거할 수 있음.
push: # push할 때 작동
branches: # 대상이 될 브랜치
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Create SSH Key
run: | # access key를 actions 내부 워크스페이스에 pem파일로 저장하고 권한을 확보
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/private-key.pem
chmod 600 ~/private-key.pem
- name: Create SSH directory # .ssh 디렉토리 생성
run: |
mkdir -p ~/.ssh
- name: Add known host # known host에 해당 키를 추가
run: |
ssh-keyscan ${{ secrets.REMOTE_HOST }} >> ~/.ssh/known_hosts
- name: Copy files to remote server # github repo의 모든 파일을 target 경로에 복사함.
run: |
cd ${{ github.workspace }}
scp -i ~/private-key.pem -r ./* ${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}:${{ secrets.REMOTE_TARGET }}
echo "Copied files to remote server"
Secrets 등록
Actions의 내용은 코드로 관리된다. 코드에 노출되면 안되는 부분은 Actions 머신이 접근할 수 있게 github에서 제공하는 secrets라는 숨겨진 환경변수에 등록해주어야 한다. Settings탭에서 Secrets and variables -> Actions에 들어간 후 Repository secrets에 아래 항목들을 만들어 준다.
- REMOTE_HOST : 서버의 public 주소. eg. 1.1.1.1 or [도메인]
- REMOTE_TARGET : 파일을 복사하고자 하는 원격 서버의 디렉토리. 당연하게도 해당 디렉토리에 쓰기 권한이 있어야 한다.
- REMOTE_USER : 접속할 사용자. root가 아닌 일반사용자를 권장한다.
- SSH_PRIVATE_KEY : SSH 키 <- pem파일을 메모장으로 열어서 전체 내용을 그대로 복사해 넣으면 된다.
모든 작업이 끝났으면 main에 push하거나 actions탭에서 run workflow를 눌러 직접 실행해볼 수 있다.
'Software Engineering' 카테고리의 다른 글
How to use TaskFlow API (@task) while using an Operator other than Python (0) | 2024.02.02 |
---|---|
PolarDB에서 OSS에 있는 csv파일 로드하기 (FOREIGN TABLE) (0) | 2024.02.02 |
How to read csv file in OSS with PolarDB (1) | 2023.12.27 |
벡터 데이터베이스로 검색을 강화하다. (0) | 2023.12.02 |
[Python 문제 풀이] 프로그래머스 '배달' (0) | 2023.10.24 |