이 글에서는 오라클 클라우드 우분투 서버에 flask 앱 설치하는 법에 대해서 설명합니다.
기본적으로 flask 앱은 파이썬 및 관련 패키지를 설치하고 pip를 통해서 requirements들을 설치하게 됩니다.
- 파이썬 및 기본 패키지 설치
- PIP를 통한 python 패키지 설치
- gunicorn 설치 및 nginx 설치 및 설정
파이썬 및 기본 패키지 설치
먼저 우분투 서버를 받으면 일단, ssh로 접속해서 파이썬과 가상환경을 설정합니다.
sudo apt update
sudo apt-get upgrade
sudo apt-get install -y libgl1-mesa-glx <-- 나중에 open cv에서 사용하는 라이브러리임
ubuntu@instance-20230803-1044:~$ python3 --version
Python 3.8.10
#만약 파이썬이 설치되어있지 않다면, sudo apt-get install python3
sudo apt-get install python3-pip
sudo apt-get install python3-venv
sudo python3 -m pip install wheel
python3 -m venv venv
ubuntu@instance-20230803-1044:~$ . venv/bin/activate
(venv) ubuntu@instance-20230803-1044:~$ ls
venv
python3 -m pip install --upgrade setuptools
pip install Flask gunicorn
PIP를 통한 python 패키지 설치
requirement.txt를 이용해서 패키지를 설치합니다.
git clone 'your repository flask app'
(venv) ubuntu@instance-20230803-1044:~/flask$ pip install -r requirement.txt
Python 3.8.10
ERROR: Could not find a version that satisfies the requirement scipy==1.11.1 (from -r requirements.txt.all (line 67)) (from versions: 0.8.0, 0.9.0, 0.10.0, 0.10.1, 0.11.0, 0.12.0, 0.12.1, 0.13.0, 0.13.1, 0.13.2, 0.13.3, 0.14.0, 0.14.1, 0.15.0, 0.15.1, 0.16.0, 0.16.1, 0.17.0, 0.17.1, 0.18.0, 0.18.1, 0.19.0, 0.19.1, 1.0.0, 1.0.1, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.2.3, 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.4.0, 1.4.1, 1.5.0, 1.5.1, 1.5.2, 1.5.3, 1.5.4, 1.6.0, 1.6.1, 1.6.2, 1.6.3, 1.7.0, 1.7.1, 1.7.2, 1.7.3, 1.8.0rc1, 1.8.0rc2, 1.8.0rc3, 1.8.0rc4, 1.8.0, 1.8.1, 1.9.0rc1, 1.9.0rc2, 1.9.0rc3, 1.9.0, 1.9.1, 1.9.2, 1.9.3, 1.10.0rc1, 1.10.0rc2, 1.10.0, 1.10.1)
ERROR: No matching distribution found for scipy==1.11.1 (from -r requirements.txt (line 67))
위와 같이 중간에 매칭되는 distribution이 없다고 나오면 해당 패키지의 버전을 제거하고 설치하면 됩니다. 저의 경우 scipy==1.11.1을 scipy로 변경후 pip install -r requirements.txt 명령을 재수행 하였습니다.
Traceback (most recent call last):
File "app.py", line 3, in <module>
from flask_cors import CORS
ModuleNotFoundError: No module named 'flask_cors'
(venv) ubuntu@instance-20230803-1044:~/flask$ pip install flask_cors
오라클 클라우드 서버 설정하기
오라클 클라우드 무료 서버는 사양이 매우 안 좋습니다. 그래서, 다음과 같이 몇 가지 작업을 해야 그나마 동작을 시킬 수 있습니다.
1. memory 공간 늘리기
torch와 같은 큰 패키지를 설치하다보면 killed된다고 나옵니다. 이것은 설치중 메모리를 많이 사용해서 killed되는 현상입니다. 이를 해결하기 위해서는 swap을 늘려주어야 합니다.
# 4GB의 swap 파일을 생성합니다.
sudo fallocate -l 4G /swapfile
# swap 파일 권한을 설정합니다.
sudo chmod 600 /swapfile
# swap 영역으로 파일을 설정합니다.
sudo mkswap /swapfile
# 시스템의 swap 공간으로 파일을 활성화합니다.
sudo swapon /swapfile
# /etc/fstab 파일에 swap 파일 정보를 추가하여 재부팅 후에도 계속 사용할 수 있게 합니다.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Oracle Cloud 서버에서 Nginx를 사용하여 외부에서 IP 주소를 이용해 접속하려면 아래의 단계를 따라 진행하세요:
- 방화벽 설정: Oracle Cloud 서버에서 외부 트래픽을 허용하도록 방화벽을 구성하세요. SSH로 서버에 로그인하고, 다음 명령어를 사용해 ufw의 방화벽 설정을 업데이트합니다. Nginx를 사용하므로 HTTP 트래픽(포트 80) 및 HTTPS 트래픽(포트 443)을 허용해야 합니다.
-
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw allow 21/tcp sudo ufw reload
- Oracle Cloud 인스턴스 보안 규칙: Oracle Cloud Console에서 인스턴스에 대한 인바운드 보안 규칙을 구성해야 합니다. 이 작업은 웹 UI에서 수행하며, 관련 단계는 다음과 같습니다:
- Oracle Cloud Console에 로그인합니다.
- 좌측 메뉴에서 "인스턴스"를 선택하여 인스턴스 페이지로 이동합니다.
- 인스턴스 목록에서 해당 인스턴스를 선택합니다.
- "인스턴스 세부 정보" 페이지에서 "네트워크" 섹션으로 스크롤합니다.
- "보안 규칙"에 있는 "인바운드 규칙"을 찾아 "추가 인바운드 규칙" 버튼을 클릭합니다.
- HTTP 트래픽을 위해 소스 CIDR 차단을 "0.0.0.0/0"으로 하고 대상 포트 범위를 "80"으로 설정한 다음, 원하는 설명을 추가하고 규칙을 저장합니다.
- HTTPS 트래픽을 위해 소스 CIDR 차단을 "0.0.0.0/0"으로 하고 대상 포트 범위를 "443"으로 설정한 다음, 원하는 설명을 추가하고 규칙을 저장합니다.
- Nginx 설정: Nginx 설치 및 구성이 완료되었다면, 기본 사이트 설정 파일을 수정하거나 새로운 사이트 설정 파일을 추가하여 원하는 도메인 또는 IP 주소에 대한 서버 블록(Server Block)을 구성해야 합니다. 설정 파일을 업데이트하거나 작성한 후, 다음 명령어를 사용하여 Nginx 구성에 오류가 있는지 확인하고 재시작하세요.
-
sudo nginx -t sudo systemctl restart nginx
이제 외부에서 인스턴스의 IP 주소를 이용하여 접속할 수 있습니다. 웹 브라우저에서 인스턴스의 IP 주소를 입력하고 접속해 보세요. 필요한 경우 도메인 이름을 IP 주소로 매핑하려면 DNS 설정을 업데이트하세요.
VM Instance를 SSH로 원격 접속하고 iptables의 규칙을 수정합니다.
$ sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -I INPUT 5 -i ens3 -p tcp --dport 8000 -m state --state NEW,ESTABLISHED -j ACCEPT
생각 나는대로 작성해 보았습니다. 참고 될 만한 부분이 있으면 좋겠습니다. 고생하세요~
'개발' 카테고리의 다른 글
git 명령 파일 수정 내용 되돌리기 원복하기 (0) | 2024.05.20 |
---|---|
파이썬에서 여러 줄의 문자열을 넣는 법 - 다중 라인 문자열 입력 (0) | 2024.05.16 |
사진 애니화 카툰화 만화화 등 이미지 변환기 설치하기 (0) | 2024.01.20 |
파이썬 플라스크(python flask) 아바타 변환기 설치하기 (0) | 2024.01.20 |
VS CODE 한글 깨짐 EUCKR 설정하기 (0) | 2024.01.15 |