We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
요즘 인스턴스를 삭제했다 만들고 할 일이 많더라구요..
그래서 만들 때마다 일관되게 작업을 하려고 글로 남겨두려 합니다.
ec2 인스턴스에 어떤 작업을 했고 왜 그렇게 했는 지에 대해 작성했습니다.
sudo apt update sudo apt install python3-venv
ubuntu instance에는 git, python은 설치되어 있으니 생략하고, 저희는 가상환경 쓸거라 pip은 따로 설치하지 않아도 됩니다.
일단은 가상환경을 ~(home dir)에 만들기로 해요.
python3 -m venv loro source ~/loro/bin/activate
forked 말고 upstream을 가져온다고 가정
git clone https://github.com/kookmin-sw/capstone-2024-08.git cd capstone-2024-08/backend pip install -r requirements.txt
df -h
sudo apt install espeak sudo apt install ffmpeg
python setup.py build_ext --inplace
현재 저희 uvicorn 서버는 인스턴스 내 8000번 포트에서 실행되고 있는데요.
http 요청(80번 포트를 사용)을 이 서버로 보내기 위해서는 80포트로 들어오는 요청을 8000포트로 전달할 필요가 있어요.
그 역할을 위해서 nginx를 사용하게 되었습니다. 아직 포트 전달 용도로 밖에 사용하지 않고 있고 추후에 ssl 암호화, 캐싱 기능도 추가할 예정이에요.
(80포트에 대한 보안그룹 설정은 지원님이 이미 만들어 주셨음)
나중에 문제가 있을 때 확인 용도로 현재 ec2 instance에 어떤 작업을 했는 지 적어볼게요.
먼저, EC2 인스턴스에 Nginx를 설치
sudo apt update sudo apt install nginx -y
일단 어떻게 했는 지 적으면
sudo vim /etc/nginx/sites-available/loro
다음과 같이 작성
server { listen 80; # <- 80 포트에서 오는 거에 대해서 server_name {우리 ec2 ip addr} # <- 서버 이름이 요러면 location / { # <- '/'니까 모든 요청 URL에 이 블록의 설정을 실행해줘! 라는 뜻 proxy_pass http://127.0.0.1:8000; # <- local의 8000포트로 전달해줘! proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
그 후 /etc/nginx/sites-available/loro 에 심볼릭 링크 걸기
/etc/nginx/sites-available/loro
sudo ln -s /etc/nginx/sites-available/loro /etc/nginx/sites-enabled/
우리 주소 이름이 너무 길어서 설정파일에서 버킷 사이즈를 늘려줘야 함
sudo vim /etc/nginx/nginx.conf
http { ... server_names_hash_bucket_size 128; <- 주석처리 해제하고 64 -> 128로 변경 ... }
(optional) 문제가 있는 지 확인
sudo nginx -t
설정을 적용하기 위해 Nginx를 재시작
sudo systemctl restart nginx
그럼 끗
원래 nginx의 주 설정파일은 /etc/nginx/nginx.conf 인데요. 기본적으로 nginx가 사용자가 설정은 어떻게 했지?? 그러면 이 파일을 봐요.
/etc/nginx/nginx.conf
근데! 여기를 직접 건드리지는 않을거고 /etc/nginx/sites-available 을 수정하고 /etc/nginx/sites-enabled/ 에 심볼릭 링크를 걸었어요.
/etc/nginx/sites-available
/etc/nginx/sites-enabled/
왜냐! 그게 유지보수하기 좋거든요. 뭐 모듈화 한다 생각하면 될 듯.
물론 nginx가 /etc/nginx/sites-enabled/ 를 보도록 이렇게 해줘야 해요. (기본적으로 되어 있음)
http { ... include /etc/nginx/sites-enabled/*; ... }
서버 실행은 현재 저희 /backend 디렉토리 main.py를 실행시키면 localhost 8000번 포트에서 실행시키도록 되어 있어요.
실행: python3 main.py
# main.py if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
나중에 Let's Encrypt 같은 걸 써서 https 를 지원할 수도 있고 캐싱도 고려할 수 있을 것 같아요.
근데! 고건 나중에 ㅎ
nvidia gpu가 있는 서울용 인스턴스는 g4dn.xlarge 입니다.
g4dn.xlarge
voice conversion을 위해 사용할 knnvc는 cuda로 작성되어 있는데,
이 코드 실행을 위해서는 추가로 이 인스턴스에 nvidia driver를 설치해야 합니다.
nvidia driver
사용 가능한 NVIDIA 드라이버 버전을 확인을 해주고
apt search nvidia-driver
저는 여기서 nvidia-driver-535 를 사용할거에요.
sudo apt install nvidia-driver-535
무조건!!!!! 리부팅 해줘야 함.
이거 안했다가 왜 안되는거지 하면서 몇시간 날림 아오 진짜
sudo reboot
nvidia-smi
위 명령어 쳤을 때, 이쁜 표가 나오면 된 거에요. 설치 제대로 안되면 드라이버가 없다고 빨간 줄로 쳐다봄
The text was updated successfully, but these errors were encountered:
오 대박 완전 정리 잘해주셨네요 👍
Sorry, something went wrong.
why-arong
No branches or pull requests
요즘 인스턴스를 삭제했다 만들고 할 일이 많더라구요..
그래서 만들 때마다 일관되게 작업을 하려고 글로 남겨두려 합니다.
ec2 인스턴스에 어떤 작업을 했고 왜 그렇게 했는 지에 대해 작성했습니다.
초기에 설치할 것들
ubuntu instance에는 git, python은 설치되어 있으니 생략하고, 저희는 가상환경 쓸거라 pip은 따로 설치하지 않아도 됩니다.
파이썬 가상환경
일단은 가상환경을 ~(home dir)에 만들기로 해요.
git clone & pip install
forked 말고 upstream을 가져온다고 가정
git clone https://github.com/kookmin-sw/capstone-2024-08.git cd capstone-2024-08/backend pip install -r requirements.txt
df -h
해보고 루트 파일 시스템이 이보다 작으면 에러 나니 주의pip 추가 설치
build monotonic align
리버스 프록시 사용 - Nginx
현재 저희 uvicorn 서버는 인스턴스 내 8000번 포트에서 실행되고 있는데요.
http 요청(80번 포트를 사용)을 이 서버로 보내기 위해서는 80포트로 들어오는 요청을 8000포트로 전달할 필요가 있어요.
그 역할을 위해서 nginx를 사용하게 되었습니다. 아직 포트 전달 용도로 밖에 사용하지 않고 있고 추후에 ssl 암호화, 캐싱 기능도 추가할 예정이에요.
(80포트에 대한 보안그룹 설정은 지원님이 이미 만들어 주셨음)
나중에 문제가 있을 때 확인 용도로 현재 ec2 instance에 어떤 작업을 했는 지 적어볼게요.
1. Nginx 설치
먼저, EC2 인스턴스에 Nginx를 설치
2. Nginx 설정 파일 편집
일단 어떻게 했는 지 적으면
다음과 같이 작성
그 후
/etc/nginx/sites-available/loro
에 심볼릭 링크 걸기우리 주소 이름이 너무 길어서 설정파일에서 버킷 사이즈를 늘려줘야 함
(optional) 문제가 있는 지 확인
설정을 적용하기 위해 Nginx를 재시작
그럼 끗
이렇게 한 이유
원래 nginx의 주 설정파일은
/etc/nginx/nginx.conf
인데요. 기본적으로 nginx가 사용자가 설정은 어떻게 했지?? 그러면 이 파일을 봐요.근데! 여기를 직접 건드리지는 않을거고
/etc/nginx/sites-available
을 수정하고/etc/nginx/sites-enabled/
에 심볼릭 링크를 걸었어요.왜냐! 그게 유지보수하기 좋거든요. 뭐 모듈화 한다 생각하면 될 듯.
물론 nginx가
/etc/nginx/sites-enabled/
를 보도록 이렇게 해줘야 해요. (기본적으로 되어 있음)서버 실행은 현재 저희 /backend 디렉토리 main.py를 실행시키면 localhost 8000번 포트에서 실행시키도록 되어 있어요.
실행: python3 main.py
추가로 고려할 것
나중에 Let's Encrypt 같은 걸 써서 https 를 지원할 수도 있고 캐싱도 고려할 수 있을 것 같아요.
근데! 고건 나중에 ㅎ
GPU instance 의 경우
nvidia gpu가 있는 서울용 인스턴스는
g4dn.xlarge
입니다.voice conversion을 위해 사용할 knnvc는 cuda로 작성되어 있는데,
이 코드 실행을 위해서는 추가로 이 인스턴스에
nvidia driver
를 설치해야 합니다.드라이버 버전 확인 및 설치
사용 가능한 NVIDIA 드라이버 버전을 확인을 해주고
저는 여기서 nvidia-driver-535 를 사용할거에요.
무조건!!!!! 리부팅 해줘야 함.
이거 안했다가 왜 안되는거지 하면서 몇시간 날림 아오 진짜
잘 설치 되었나?
위 명령어 쳤을 때, 이쁜 표가 나오면 된 거에요. 설치 제대로 안되면 드라이버가 없다고 빨간 줄로 쳐다봄
The text was updated successfully, but these errors were encountered: