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)
# 실행
python app.py
결과는 에러가 난다.
flask 패키지가 없다는 에러이므로 파이참에서 패키지 설치를 한 것처럼 패키지를 설치해줘야 한다.
# 간단! 설치
pip install flask
# 설치 후 다시 실행 (flask가 실행되면 끄기 전까지 다른 명령어 실행되지 않음)
python app.py
# 끄기
[crtl] + [c]
크롬 브라우저 창에 아래와 같이 입력합니다.
http://[내 EC2 IP]:5000/
# result
작동하지 않는다...
AWS에서 포트를 열어줘야지 들어갈 수 있다.
AWS EC2에서 자체적으로 포트를 열고/닫을 수 있다.
AWS EC2 Security Group에서 인바운드 요청 포트를 열어준다.
포트 추가 시,
type
,port range
,source
설정 후 저장
- type : port 22는 ssh
- port range : port 번호 입력
- source : anywhere-IPv4
http://[내 EC2 IP]:5000/
⭐️ AWS의 mongoDB에 아이디와 비밀번호를 추가했으니, 우리의 pymongo에도 아이디와 비밀번호를 입력해야 올바르게 DB에 접근할 수 있다.
app.py를 열고 가운데 한 줄을 바꾸어준다.
# 원래 코드
# client = MongoClient('localhost', 27017)
# 넣는 코드
client = MongoClient('mongodb://test:test@localhost', 27017)
아이디/비밀번호를 바꾸고 싶으면
initial_ec2.sh
에서 바꾸면 된다.
# home 디렉토리로 이동
cd ~
# 해당 폴더로 이동해서 아래 코드를 실행합니다.
python app.py
# 설치하기
pip install pymongo
python app.py
http://내AWS아이피:5000/
지금은 5000포트에서 웹 서비스가 실행되고 있다. 따라서 매번 :5000
이라고 뒤에 붙여줘야 한다.
http 요청에서는 80포트가 기본이기 때문에 굳이 :80
을 붙이지 않아도 자동으로 연결이 된다.
포트 번호를 입력하지 않아도 자동으로 접속되기 위해서 80포트로 오는 요청을 5000포트로 전달하게 하는 포트 포워딩 (port forwarding)
을 사용한다. (5000으로 들어오면 flask를 만남)
리눅스에서 기본으로 제공해주는 포트포워딩을 사용하며, 코드는 앞선 기본 세팅에 들어가있다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
# 아래의 명령어로 실행하면 된다
nohup python app.py &
# 아래 명령어로 미리 pid 값(프로세스 번호)을 본다
ps -ef | grep 'app.py'
# 아래 명령어로 특정 프로세스를 죽인다
kill -9 [pid값]
# 리눅스 명령어
ps -ef : 컴퓨터에 돌아가고 있는 모든 프로세스를 다 보여줌
| grep : 그 중에 `''`안에 들어가는 애들만 보여주라
nohup python app.py &
도메인을 구입한다는 것은 네임서버를 운영해주는 업체에 IP와 도메인 매칭 유지비를 내는 것이다. 한국 또는 글로벌 업체 어디든 상관 없다.
https://my.gabia.com/service#/
[도메인 연결] - [DNS 설정] - 호스트이름에 @
, IP 주소에 AWS의 IP주소 입력
→ 웹브라우저에서 도메인 주소로 접근해보기
카톡/페이스북/슬랙에 공유했을 때 이쁘게 나오도록 꾸며주기
# 먼저, static폴더에 이미지 넣어주기
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />