이때까지는 로컬과 깃에서 스트림릿을 푸시하고 풀해줬다면
이것을 AWS의 EC2를 활용해서 배포해야 한다.
깃에서 AWS로 Streamlit을 배포하려면:
- 소스코드를 깃허브에 올린다.
- 깃허브에서 AWS로 데이터를 클론해서 가져온다.
- 비어있는 리눅스 서버를 만들어서 필요한 프로그램들을 설치한다.
소스코드는:
https://startcod.tistory.com/67
[Streamlit] 실습: 자동차 가격 예측 앱 개발 (작성중)
1. 공공데이터나 캐글에서 데이터를 가져와서 코랩을 이용해서 분석한다. (EDA + ML) [이것을 파일로 저장한다.] 2. 로컬에서 스트림릿을 이용해서 웹 대시보드를 만든다. 3. AWS를 이용해서 배포한
startcod.tistory.com
이걸 사용해줄 예정이다.
먼저 AWS에서 EC2를 free tier로 만든다.
인스턴스 시작을 눌러 서버를 만들기 시작하면 된다.
서버를 만들기 전 필요한것들을 설정한다.
서버 이름을 짓고 어떤 AMI를 사용할지 정한다.
인스턴스 유형은 학습용도이기 때문에 프리티어로 설정한다.
원격으로 접속하기 위한 보안 키를 설정해준다.
옆의 새 키페어 생성을 누른다.
# 윈도우에서 접속하는 경우 프라이빗 키 파일형식을 .ppk로 설정한다.
# 키페어 생성을 누르면 보안키 파일이 생성된다.
※ 절대 잃어버리지 말 것
네트워크를 설정한다.
# 로컬과 연결하기 위해 SSH트래픽을 허용한다. (22)
# 깃허브와 연결되기 위하여 HTTPs 트래픽을 허용한다. (443)
스토리지 구성한다.
# 프리티어의 최대치인 30GiB까지 올린다.
오른쪽의 요약을 확인하여 의도한대로 설정됬는지 확인한다.
# 다 됬으면 인스턴스 시작을 누른다.
인스턴스로 돌아가 실행중인 인스턴스를 볼수있다.
키 페어를 생성할때 ppk를 설정했는데 PuTTY로 실행시켜야 한다.
PuTTY를 다운로드 하자.
PuTTY 다운로드 링크:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Download PuTTY: latest release (0.76)
This page contains download links for the latest released version of PuTTY. Currently this is 0.76, released on 2021-07-17. When new releases come out, this page will update to contain the latest, so this is a good page to bookmark or link to. Alternativel
www.chiark.greenend.org.uk
AWS에서 제공하는 매뉴얼을 따라서 해보겠다.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/putty.html
PuTTY를 사용하여 Windows에서 Linux 인스턴스에 연결 - Amazon Elastic Compute Cloud
프라이빗 키의 암호는 추가 보호 계층입니다. 프라이빗 키가 노출되더라도 암호 없이 사용할 수 없습니다. 암호문 사용의 단점은 인스턴스에 로그온하거나 인스턴스에 파일을 복사하기 위해 사
docs.aws.amazon.com
PuTTY를 다운로드 했으면 이제 리눅스 인스턴스에 연결한다.
PuTTY를 실행한다.
AWS EC2인스턴스 id를 눌러 퍼블릭 아이디를 확인하고 Host Name에 넣는다.
커넥션 설정에서 SSH의 Auth에서 보안키 파일을 연결시킨다.
# 최신버전은 Connection > SSH > Auth > Credentials 여기서 Private key file for the authentication에 Browse한다
세션에서 설정을 저장한다.
open을 누르고 accept하면 아래의 리눅스 창이 나온다.
# 리눅스는 CLI (command line interface)
ec2-user를 입력하여 진입한다.
PuTTY를 통해 리눅스가 실행되는것을 확인했다.
이제 리눅스에 파이썬을 다운로드 해야한다.
아나콘다 홈페이지에서 리눅스 버전 다운로드 주소를 복사한다
# 우클릭하여 링크 주소를 복사한다.
리눅스 버전 다운로드 주소:
https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
24년 6월 :
https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
그리고 홈 디렉토리에서 wget을 이용해서 리눅스에 파이썬을 다운로드 한다.
# wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh 입력
# 컨트롤 v를 하면 붙여넣기 되지 않는다. 우클릭으로 붙여넣기 하자
다운로드 했으면 설치하자.
ls 로 현재 폴더의 아나콘다 파일을 찾고
sh (파일명)을 입력하여 설치할수있다.
conda --version 으로 아나콘다의 버전을 확인할수있지만
만약에 not found가 나오면 환경 변수에 제대로 등록되지않은 상태이다.
해결방법 :
1. 환경 변수 설정
export PATH=~/anaconda3/bin:$PATH
2. 환경 변수 적용
source ~/.bashrc
이후 conda init으로 아나콘다를 활성화 할수있다.
# 활성화 후 리눅스를 재실행하자
python --version을 입력해서 설치된 파이썬의 버전을 확인할수 있다.
설치된 파이썬 버전이 다른경우:
설치되어있는 파이썬 버전 확인
ls /usr/bin/ | grep python
파이썬 버전 바꾸기 -> 버전 목록에 3.7 확인 후 버전 변경
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1
update-alternatives --config python 1
이제 스트림릿을 위한 파이썬 3.7버전의 가상환경을 설정한다.
가상환경을 만들기 위해 아래의 코드를 입력한다.
conda create -n streamlit3.7(가상환경이름) python=3.7(파이썬 버전) numpy scipy matplotlib ipython scikit-learn pandas pillow jupyter seaborn (함께 설치할 라이브러리)
이제 코드를 입력하여 가상환경을 활성화 하거나 비활성화 할수있다.
활성화: conda activate streamlit3.7
비활성화: conda deactivate
conda env list로 어떤 가상환경이 있는지 확인할수있다.
그 후 스트림릿을 설치한다.
- 첫번째 코드: pip install streamlit
- 두번쨰 코드: streamlit hello
# 지금 외부IP를 주소창에 입력하면 방화벽 때문에 연결되지 않는다. (현재 SSH (22)와 HTTPs (443)만 열려있는 상황)
인바운드 규칙을 설정하기 위해 인스턴스로 가서 보안 메뉴의 보안그룹으로 들어가서 인바운드 규칙 편집을 누른다.
포트 범위를 8501로 설정하자
이제 스트림릿 서버가 열려있는 상태에서 접속하면 접속이 가능하다.
※ 서버를 연 상태에서 절대 컨트롤 c를 눌러 복사하려고 하지 않는다.
리눅스에서 컨트롤 c는 '닫기'다.
# 그냥 마우스로 드래그하면 자동으로 복사된다.
이제 푸티 가상환경에 conda install joblib으로 joblib을 설치하자.
리눅스에 Git을 설치한다.
설치코드: sudo yum install git
(Ubuntu는 yum 대신 apt 사용)
# yum은 conda가 했던것처럼 리눅스용 프로그램을 설치할때 사용한다
# sudo는 super user do라는 뜻이며 윈도우의 관리자 권한실행과 비슷하다.
다 설치했으면 깃허브 사이트에서 클론 url을 복사해서 서버로 클론하는 코드 오른쪽에 입력한다.
클론 코드: git clone (클론URL)
클론을 완료하면 cd streamlit-car-price-app/ 를 사용하여 작업했던 디렉토리로 변경하고
스트림릿을 실행시켜본다.
# 완료
'Linux' 카테고리의 다른 글
[Linux] 파일을 서버로 직접 보내는 방법 FTP (File Transfer Protocol), Filezilla (0) | 2022.05.27 |
---|---|
[Linux] 하나의 서버로 여러 개의 프로젝트 실행 (0) | 2022.05.24 |
[Linux] 백그라운드로 실행 (0) | 2022.05.24 |
[Linux] 배포된 서비스 수정 (0) | 2022.05.24 |
[Linux] 폴더 이동 및 기본 동작 (0) | 2022.05.23 |
댓글