웹 서비스를 런칭하기 위해서는 클라이언트의 요청에 항상 응답해줄 수 있는 서버에 프로젝트를 실행시켜야 한다.
AWS 클라우드 서비스에서 항상 켜놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용할 수 있다.
컴퓨터가 항상 켜져있고 프로그램이 실행되어 있어야 한다.
모두가 접근할 수 있는 공개 주소인 공개 IP 주소 (Public IP Adress)로 내 프로젝트에 접근할 수 있어야 한다.
접속하는 컴퓨터는 숫자로 되어있는 IP 주소가 붙어있다.
인터넷 위에서 컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유한 주소로, 각 서버는 하나의 주소를 가지고 있다.
접속을 용이하게 하기 위해 IP 주소를 읽기 편한 도메인으로 매칭할 수 있다.
하나의 IP에는 여러 포트가 있다.
한 포트에 하나의 프로그램을 실행시킬 수 있다.
인스턴스 이름 입력
키 페어 생성 클릭
키페어 생성을 완료하면 자동으로 키페어 파일이 다운로드 된다.
👇🏻 인스턴스 생성 완!
터미널에서 진행한다.
2에서 받은 내 Keypair의 접근 권한을 바꿔준다.
sudo chmod 400 키페어
2에서 다운로드된 파일을 터미널창에 끌어다 놓으면 자동으로 키페어 경로가 입력된다.
ssh -i 키페어 ubuntu@내아이피
인스턴스 목록에서 IPv4 주소를 확인할 수 있다..
Key fingerprint 관련 메시지가 나오면 yes를 입력한다.
EC2 원격 접속 성공!
[FileZilla] 👈🏻 접속
가장 왼쪽에 있는 에디션 다운로드!
Site Manager 클릭
New site > 내용 입력 > Connect > OK
업로드할 파일을 드래그로 이동시킨다.
왼쪽이 내 컴퓨터, 오른쪽이 원격 접속한 EC2 인스턴스이다.
sudo apt install python-is-python3
cd ~
python hello.py
# pip3 설치
sudo apt update
sudo apt install -y python3-pip
# 버전 확인
pip --version
pip install flask
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return 'This is Home!'
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
app.py
를 실행시키면 flask가 실행된다.
python app.py
EC2 상세 > 보안 탭 > > 보안그룹(Security Group) 클릭
인바운드 규칙 편집
포트를 추가한다.
5000 포트: flask 기본 포트
80 포트: HTTP 접속을 위한 기본 포트
27017 포트: 외부에서 mongoDB에 접속하기 위한 포트
ip 주소로 접속 성공..!
curl -sS https://pgp.mongodb.com/server-6.0.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/mongodb-6.0.gpg
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
sudo service mongod start
아이디/비밀번호를 설정하지 않으면 누구나 DB의 정보를 볼 수 있게 된다.
접속에 필요한 아이디와 비밀번호를 생성한다.
mongoDB 쉘에 들어간다.
mongosh
use admin;
db.createUser({user: "test", pwd: "test", roles:["root"]});
exit
sudo service mongod restart
app.py
# client = MongoClient('mongodb://설정한아이디:비밀번호@내AWS아이피',27017)
client = MongoClient('mongodb://test:test@3.38.244.139', 27017)
mongoDB는 기본적으로 같은 IP 안에서만 접속을 허용하고 있어, 외부에서 접근이 가능하도록 잠금을 풀어줘야 한다.
리눅스 자체 에디터인 vim을 이용한다.
sudo vi /etc/mongod.conf
# vi: 리눅스에서 VS Code 대신 사용하는 텍스트에디터인 Vim을 실행
# => "관리자 권한으로 /etc 폴더 아래 mongod.conf 파일을 Vim으로 켜줘!"라는 뜻입니다
# 입력 모드 전환
i
# 내용 저장 및 에디터 종료. esc를 누르고 입력한다.
:wq
# 재시작
sudo service mongod restart
Studio 3T 접속 > Connection > New Connection > Next
Server에 ec2 ip주소
입력
Authentication 탭에서 생성한 계정 정보
입력
연결 완!
파일질라에서 프로젝트의 app.py. templates 폴더, static 폴더
를 모두 EC2에 업로드한다.
사용하는 패키지를 설치한다.
pip install requests beautifulsoup4 pymongo
python app.py
http://ip주소:5000/
http에서는 80번 포트가 기본이기 때문에 :80을 붙이지 않아도 된다.
포트 번호를 입력하지 않고 접속할 수 있도록 80 포트로 오는 요청을 5000 포트로 전달시켜야 한다.
리눅스에서 기본으로 제공해주는 포트포워딩을 사용한다.
포트포워딩 룰을 입력한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
http://IP주소
로 접속해본다.python app.py
지금은 SSH 접속을 끊으면(터미널을 종료하면) 프로세스가 종료되면서 서버도 끊긴다.
원격 접속을 종료해도 서버가 계속 돌아가게 설정한다.
nohup python app.py &
서버를 강제로 종료하려면 pid로 프로세스를 죽여야 한다.
pid(프로세스 번호) 확인
ps -ef | grep 'app.py'
kill -9 [pid값]
[My가비아] 👈🏻 접속해서 이용 중인 서비스가 +1 되었는지 확인한다.
(반영되는 데 시간이 10분 정도 걸릴 수 있다.)
DNS 관리툴로 접속한다.
구매한 도메인 [설정] 클릭
DNS 설정 [레코드 수정]
호스트: @, 값/위치: IP주소
입력
IP주소와 도메인으로 모두 다 접속이 잘 되는지 확인한다.
(네임서버에 도메인과 IP주소가 매칭되는 데 시간이 10분 정도 걸릴 수 있다.)
배포 끝🥰