💡수업 목표💡
- Flask 프레임워크를 활용해서 API를 만들 수 있다.
- '버킷리스트'를 완성한다.
- EC2에 내 프로젝트를 올리고, 자랑한다!
2022.08.29 - [스파르타코딩클럽/웹개발종합반] - 웹개발종합반 개발일지 | 5주차 - 1,2,3,4,5,6강
2022.09.01 - [스파르타코딩클럽/웹개발종합반] - 웹개발종합반 개발일지 | 5주차 - 7,8강 AWS EC2 인스턴스 생성
Ubuntu 22.04 LTS에 서버 셋팅
$ sudo apt update && sudo apt upgrade
Python 설치
#python 버전체크
$ python --version
Python을 실행시키려고 하면 가끔 /usr/bin/python 없이 /usr/bin/python3만 존재하는 경우가 있다.
이럴 경우 update-alternatives를 이용하여 해결할 수 있다.
$ sudo update-alternatives --install /usr/bin/python python $(readlink -f $(which python3)) 3
pip 설치
$ sudo apt install python3-pip
$ pip --version
AWS에 project 업로드하기
프로젝트 업로드하기위해서 업로드한 프로젝트 폴더를 생성해준다.
$ mkdir sparta # sparta 프로젝트 폴더 생성
[가장 많이 쓰는 몇 가지 리눅스 명령어]
ls: 내 위치의 모든 파일을 보여준다.
pwd: 내 위치(폴더의 경로)를 알려준다.
mkdir: 내 위치 아래에 폴더를 하나 만든다.
cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.
cd .. : 나를 상위 폴더로 이동시킨다.
cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기
rm -rf [지울 것]: 지우기
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
PyCharm에서 AWS 서버와 연결한다.
Root path에 아까 만든 디렉토리(/home/ubuntu/sparta)를 입력해준다. 이때 /home/ubuntu/는 ubuntu 환경의 기본 경로라고 보면 된다.
우리가 만든 프로젝트를 ven 폴더를 제외하고 Remote Host를 통해서 프로젝트를 업로드해준다.
ven는 python 가상환경폴더인데 서버에는 이미 python 환경이 셋팅 되어 있으므로 필요없다.
터미널에서 확인해보면 잘 업로드가 완료된것을 확인 할 수 있다.
프로젝트 패키지 설치
프로젝트를 실행하기 전에 우리는 단순 python 프로젝트가 아니기대문에 프로젝트에 필요한 패키지를 설치해야한다.
서버에 Flask 설치
pip install flask
서버에 다른 패키지 설치 - pymongo, dnspython
pip install pymongo dnspython
프로젝트 실행하기
python app.py
5000번 포트 연결
프로젝트는 정상적으로 실행했지만 EC2에서 할당한 ip주소 혹은 ip주소:5000으로 접속하면 프로젝트로 연결되지 않는다.
Flask에서 지정한 것처럼 5000번 포트로 접속해야하는데 이것도 접속이 안될것이다. 왜냐면 우리는 AWS 서버가 5000번 포트로 접속이 가능하게 설정하지 않았기 때문이다.
5000포트에 접속이 가능하게 할려면 AWS EC2의 보안그룹 셋팅을 변경해야한다.
AWS EC2 > Network & Security > Security Groups 에서 내 인스턴스에 할당된 보안 그룹을 선택한다.
내가 설정한 인바운드 규칙들을 확인할 수 있는데 지금은 SSH 22포트, HTTP 80포트, HTTPS 443포트 세개만 설정되어 있는 것을 볼수 있다. 우리는 5000번 포트를 추가하기 위해서 Edit Inbound rules를 클릭한다.
5000포트를 할당해주고 어디서나 접근 간능하겠금 Anywhere-IPv4를 선택해준다.
그리고 ip주소:5000 로 접속해보면 정상적으로 프로젝트가 로딩되는 것을 확인할 수 있다!
포트 없이 접속하기
Flask를 통해서 5000포트에서 프로젝트가가 실행하고 있다. 그래서 매번 :5000 이라고 뒤에 붙여줘야 정상적으로 접속할 수 있다.
하지만 웹서비스에서는 HTTP로 요청이 되는데 요청에서는 80포트가 기본이라서 굳이 :80붙이지 않아도 자동으로 연결이 된다.
이렇게 5000포트번호를 입력하지 않아도 자동으로 접속되기 위해서 포트포워딩(port forwarding)을 사용하여 80포트로 오는 요청을 5000포트로 전달하는 작업을 해줘야한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
SSH 접속이 끊겨도 계속 서버 실행하게 하기
현재는 AWS SSH 접속이 끊겨지면 프로세스가 종료되면서, 서버가 돌아가지 않는다. 그러나 실제 웹서비스에서는 원격접속을 끊어도, 서버는 게속 동작을 해야한다.
이때, nohup을 이용해서 명령어를 실행한 후, 해당 터미널을 종료해도 계속 명령어가 실행되도록 유지할 수 있다.
실행하려는 명령어 앞에 "nohup"를 입력해주면 된다.
nohup python app.py & # &를 붙이면 백그라운드로 실행.
nohup으로 실행할 경우, 실행으로인한 로그들이 nohup.out 파일로 리다이렉트 된다.
다음 명령어를 통해서 쉘 프로그래밍이 제대로 진행되었는지 결과를 확인 할수 있다.
cat nohup.out
종종 nohup을 걸어둔 작업ㅇ르 멈춰야 할 때가 있다. 그럴때는 아래명령어를 통해서 강제종료를 해줘야한다.
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill
- ps -ef | grep [regex] : 실행 중인 모든 프로세스 중 regex 가 포함된 프로세스
- grep -v grep : grep 문자열이 들어간 프로세스 제외
- awk '{print $2}' : 파이프를 통해 앞 과정에서 받아온 텍스트 중 2번째(PID)만 출력
- kill -9 : 파이프를 통해 추출된 pid 들을 프로세스 강제 종료. (default: 15, 정상종료)
'스파르타코딩클럽 > 웹개발' 카테고리의 다른 글
웹개발종합반 개발일지 | 5주차 (0) | 2022.09.01 |
---|---|
웹개발종합반 개발일지 | 5주차 - 13강 Open Graph (0) | 2022.09.01 |
웹개발종합반 개발일지 | 5주차 - 9강 PyCharm으로 서버 연결 및 파일 올리기 (0) | 2022.09.01 |
웹개발종합반 개발일지 | 5주차 - 7,8강 AWS EC2 인스턴스 생성 (0) | 2022.09.01 |
웹개발종합반 개발일지 | 5주차 - 1,2,3,4,5,6강 (0) | 2022.08.29 |