웹 서비스를 런칭하기 위해서는 클라이언트의 요청에 항상 응답해줄 수 있는 서버가 필요한데 이럴 경우 1) 컴퓨터가 항상 켜져있고 프로그램이 실행되어 있어야 하고 2) 모두가 접근할 수 있는 Public IP Address로 나의 웹 서비스에 접근해야 한다는 문제점이 있다. 따라서 AWS라는 클라우드 서비스에서 편하게 서버를 관리하기 위해 항상 켜 놓을 수 있는 컴퓨터인 EC2 사용권을 구입해 서버로 사용한다.
- mac으로 EC2 접속
sudo chmod 400 (key pair)
ssh -i (key pair) ubuntu@(AWS IP)
연결할 때 port 22:operation timed out이 계속 나와서 3시간 동안 여러가지 방법을 다 실행해보면서 고치려고 했는데 결국 결론은 와이파이 공유기가 ssh 접속을 막고 있었다는 것이었다. 핫스팟으로 연결해 보았더니 연결이 잘 되었다. 이러한 문제를 직결한 사람들은 먼저 와이파이 공유기 상에 문제가 있는지 확인부터 해야 3시간 동안 여기에 잡혀있을 일이 없을 듯 하다.
- EC2 세팅하기
# python3 -> python
# python3로 입력해야 되지만 python으로 입력이 가능하게 할 수 있는 코드문
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
# pip3 -> pip
# package 모음
sudo apt-get update
sudo apt-get install -y python3-pip
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
# port forwarding
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
- port forwarding:
80포트는 HTTP 접속을 위한 기본포트이고 5000포트는 flask 기본포트라고 할 수 있다. 예를 들어, naver.com과 naver.com:80은 같다고 할 수 있다. 5000포트에서 실행되고 있는 웹서비스의 경우 매번 :5000을 붙여 연결시켜줄 수 없으니, 포트번호를 입력하지 않아도 자동으로 접속되기 위해, 80포트로 들어오는 요청을 5000포트로 전달하게 하는 port forwarding을 사용한다.
Git bash 또는 mac의 terminal을 종료하면(=SSH 접솔을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않게 된다. 따라서, 원격접속을 끊어도 서버가 계속 작동될 수 있게 하기 위한 코드문은 다음과 같다.
nohup python app.py &
서버를 강제 종료하고 싶다면
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill
<meta property="og:title" content="윤아 팬명록" />
<meta property="og:description" content="아티스트를 위한 응원 한마디!" />
<meta property="og:image" content="이미지URL" />
- 완성된 팬명록 URL
http://spartaym.shop/