본문 바로가기
카테고리 없음

[AWS/Streamlit] (3/6) AWS EC2 활용 Streamlit 앱 배포 및 CI/CD 구축

by WHDA 2025. 3. 28.

글 목차:

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 설정

 

실습 사전 준비

 

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