
웹 서비스를 런칭하기 위해서는 클라이언트의 요청에 항상 응답해줄 수 있는 서버에 프로젝트를 실행시켜야 한다.
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분 정도 걸릴 수 있다.)
배포 끝🥰