글 목차:
1. AWS EC2 인스턴스 생성 및 접속
2. AWS EC2 서버 환경 구성 및 Streamlit 앱 배포
3. AWS EC2 CI/CD 구축
4. AWS EC2 및 Let's Encrypt 활용 Streamlit 앱 https 활성화
5. AWS EC2 활용 Streamlit 앱에 GA4 연결
6. AWS EC2 활용 Streamlit SEO 설정
실습 사전 준비
- '가비아'를 통한 사용할 도메인 구매 (https://www.gabia.com/)
- Github 회원가입 및 streamlit 앱 생성 (https://github.com/)
- Putty 설치 (https://www.putty.org/)
CI/CD 구축
CI/CD란?
개념 | 설명 |
CI (Continuous Integration, 지속적 통합) | 코드 변경을 자동으로 빌드 & 테스트하여 문제를 빠르게 발견 |
CD (Continuous Deployment/Delivery, 지속적 배포/전달) | 코드가 문제없으면 자동으로 배포하거나, 운영 환경에 전달 |
즉 간단히 말하면 코드를 수정할 때마다 서버를 껐다켰다 할 필요없이 자동으로 적용되도록하는 과정입니다.
GitHub에서는 GitHub Actions를 사용해 CI/CD를 구현할 수 있습니다.
Github의 레포지토리로 이동합니다.
화면 중앙 상단의 'Settings'를 클릭합니다.
'Security' > 'Secrets and variables' > 'Actions'로 이동합니다.
'Repository secrets'의 'New repository secret'를 클릭합니다.
'Name'에는 'HOST'를 'Secrets'에는 AWS EC2 인스턴스에 있는 퍼블릭 IPv4 주소를 입력하고 'Add secret'를 클릭합니다.
다시 한번 'Repository secrets'의 'New repository secret'를 클릭합니다.
'Name'에는 'SSH_PRIVATE_KEY'를 'Secrets'에는 이전에 다운받은 .pem 파일의 전체 내용을 복사하여 붙여넣습니다.
이때 '-----BEGIN RSA PRIVATE KEY-----'부터 '-----END RSA PRIVATE KEY-----'까지 모든 내용을 다 포함합니다.
마지막으로 다시 한번 'Repository secrets'의 'New repository secret'를 클릭합니다.
'Name'에는 'USER'를 'Secrets'에는 'ubuntu'를 입력합니다.
이제 화면 상단의 'Actions'를 클릭하고 중앙의 'Skip this nad set up a workflow yourself'를 클릭합니다.
위 화면처럼 'main.yml' 파일을 입력하는 창이 열립니다.
name: deploy
on:
push:
branches:
- main
jobs:
SSH:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: ssh to ec2
uses: appleboy/ssh-action@master
with:
key: ${{ secrets.SSH_PRIVATE_KEY }}
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
script: |
cd [폴더명]
git pull
위 코드에서 폴더명만 수정하여 입력하고 화면 우측 상단의 'Commit changes ...'을 클릭합니다.
작은 팝업 창의 'Commit changes'를 클릭합니다.
메세지 작성할 것이 있으면 작성합니다.
화면과 같이 된다면 완료되었습니다.
지금부터는 잘 작동하는지 체크하는 단계입니다. 꼭 필요한 단계는 아닙니다.
'SSH'를 클릭합니다.
화면에 'Successfully'가 있다면 잘 작동하고 있다는 표시입니다.
이제 다시 PuTTY 창으로 돌아옵니다.
CI/CD를 적용하는 명령어는 뒤에 '--server.runOnsave true'를 추가해주면 됩니다.
또한 '--server.port 8501' 명령어는 서버 포틑 8501로 고정한다는 의미입니다. 이 명령어를 생략하면 다른 포트로 연결될 수 있습니다.
그렇게 되면 저희가 이전에 인바운드 규칙에서 8501포트만 열도록 설정을 하여 서버가 열리지 않을 수 있습니다.
최종 명령어는 아래와 같습니다.
nohup streamlit run app.py --server.port 8501 --server.runOnSave true &
이상으로 Github를 활용해 CI/CD를 적용했습니다.
이제 streamlit 앱과 관련하여 코드를 수정하고 git push를 하면 자동으로 배포한 streamlit 앱에 적용됩니다.
이후 내용은 맨위 혹은 아래의 글 목차를 확인 부탁드립니다.
글 목차:
1. AWS EC2 인스턴스 생성 및 접속
2. AWS EC2 서버 환경 구성 및 Streamlit 앱 배포
3. AWS EC2 CI/CD 구축
4. AWS EC2 및 Let's Encrypt 활용 Streamlit 앱 https 활성화
5. AWS EC2 활용 Streamlit 앱에 GA4 연결
6. AWS EC2 활용 Streamlit SEO 설정
참고
https://fletcher-seth.tistory.com/44
[Streamlit 앱 서비스 배포] 4. AWS EC2 스트림릿 서비스 배포하기
※때에 따라서 소프트웨어 또는 프레임워크의 버전 및 인터페이스에 대해,조회하시는 시간과 본 포스트 작성의 시간적 격차가 있는 경우해당 설명과 상이한 부분이 있을 수 있습니다! 안녕
fletcher-seth.tistory.com