안녕하세요 JK 입니다.
github 에 push 되면 AWS EC2 에 배포 되는 환경을 설정 하려고 합니다.
git action 을 이용하면 EC2 뿐만 아니라 OCI 등에도 자동 배포 할수 있습니다.
.github/workflows/deploy.yml 파일이 있으면 github 에서 자동으로 읽어서 스크립트 를 수행 합니다.
절차는 민감 정보를 github 에 설정하고 deploy.yml 을 만들어 git push 하면 됩니다.
Step 01. GitHub Secrets 설정
- GitHub 레포지토리 : Settings > Secrets and variables > Actions

- 외부로 드러나면 안되는 설정을 환경 변수로 설정
- EC2_SSH_KEY
- HOST_DNS
- USERNAME

Step 02. workflows 설정
- local git repo root 위치에
.github/workflows/deploy.yml파일 생성
name: Deploy Streamlit to EC2
on:
push:
branches:
- main # main 브랜치에 푸시할 때 실행
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
# SSH 키 설정 및 EC2에 배포
- name: Deploy to EC2
env:
PRIVATE_KEY: ${{ secrets.EC2_SSH_KEY }}
HOSTNAME: ${{ secrets.HOST_DNS }}
USERNAME: ${{ secrets.USERNAME }}
run: |
# SSH 키 파일 생성
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
# EC2에 SSH로 접속해 배포
ssh -o StrictHostKeyChecking=no -i private_key ${USERNAME}@${HOSTNAME} << 'EOF'
# 작업 디렉토리로 이동 및 코드 업데이트
mkdir -p ~/JMD
cd ~/JMD
git clone https://github.com/taein2301/JMD.git . || git pull
# 가상환경 생성 및 활성화
python3 -m venv jmd_venv
source jmd_venv/bin/activate
# 의존성 설치
pip3 install -r requirements.txt
# 기존 Streamlit 프로세스 종료
pkill -f "streamlit" || true
# Streamlit 실행 (백그라운드)
nohup streamlit run main.py --server.port 8501 --server.address 0.0.0.0 &
EOF
# 로컬 SSH 키 삭제
rm -f private_key- 설명:
- on: push: main 브랜치에 푸시할 때마다 실행.
- actions/checkout@v3: 최신 코드를 가져옴.
- env: GitHub Secrets에서 가져온 값을 환경 변수로 설정.
- ssh 명령어: EC2에 접속해 코드를 클론하거나 업데이트하고, Streamlit을 백그라운드에서 실행.
설정이 끝나고 git push 하면 github 에서 확인 가능합니다.
최종 적으로 EC2 에서 streamlit 이 실행 되었음을 확인 합니다.
git action 을 이용 하여 AWS EC2 에 배포 할 여러 서비스들을 scp 나 git pull 을 수동으로 안할수 있어서 편리 합니다.
-EOF-