플라스크 서버에서 만들었던 홈페이지를 인터넷에 올리는 것을 배웠다.
IP 주소와 포트
"우리가 접속하는 컴퓨터는 숫자로 되어있는 IP 주소가 붙어있어요. 우리가 아는 URL 은 우리가 알아보기 쉽게하는 등의 이유로 IP 주소를 알파벳으로 바꾼 거에요. 이렇게 변환해주는 시스템을 DNS 라고 합니다."
EC2서버 구매페이지
나는 UBUNTU 18.04 서버를 사용함
SSH(Secure Shell Protocol)
"다른 컴퓨터에 접속할 때 쓰는 프로그램입니다. 다른 것들 보다 보안이 상대적으로 뛰어납니다.
접속할 컴퓨터가 22번 포트가 열려있어야 접속 가능합니다. AWS EC2의 경우, 이미 22번 포트가 열려있습니다. "
Window의 경우 ssh가 없으므로, git bash라는 프로그램을 이용!
- gitbash를 실행하고, 아래를 입력!
"ssh -i 받은 키페어를 끌어다놓기 ubuntu@AWS에 적힌 내아이피"
git bash를 종료할 때는 exit 명령어를 입력하여 ssh 접속을 먼저 끊어주세요.
연결 전
연결 후
ls: 내 위치의 모든 파일을 보여준다.
pwd: 내 위치(폴더의 경로)를 알려준다.
mkdir: 내 위치 아래에 폴더를 하나 만든다.
cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.
cd .. : 나를 상위 폴더로 이동시킨다.
cp -r [복사할 것][붙여넣기 할 것]: 복사 붙여넣기
rm -rf [지울 것]: 지우기
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
filezilla를 이용하여 서버에 파일을 올릴 수 있었음
정보들을 입력하고, ok 누르면 서버의 파일들을 볼 수 있음
(Host: 내 EC2서버의 ip // User: ubuntu 로 입력)
마우스로 드래그 해서 파일을 업로드/다운로드하면 됨
파이썬 파일을 실행하고 싶으면 콘솔창에 python3 test.py 를 작성하면 됨
나는 수업중에 받은 파일로 세팅을 했다.
// UTC to KST '한국시간 세팅'
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
//python3 -> python '파이썬3을 파이썬으로'
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
//pip3 -> pip 'pip3을 pip로'
sudo apt-get update
sudo apt-get install -y python3-pip
pip3 --version
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
//port forwarding '포트포워딩 80포트를 5000으로'
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
//MongoDB - install 'mongoDB 설치'
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo mkdir -p /data/db
//MongoDB - run 'mongoDB 실행'
sudo service mongod start
sleep 7
netstat -tnlp
//MongoDB set user, set conf file 'mongoDB계정 생성 및 설정'
mongo admin --eval 'db.createUser({user: "test", pwd: "password", roles:["root"]});'
sudo sh -c 'echo "security:\n authorization: enabled" >> /etc/mongod.conf'
sudo sed -i "s,\(^[[:blank:]]bindIp:\) .,\1 0.0.0.0," /etc/mongod.conf
sudo service mongod stop
sudo service mongod start
sleep 5
netstat -tnlp
- 좌측 상단 빨간 상자 내 아이콘을 클릭합니다.
- Create 클릭
- 접속 정보를 세팅합니다.(내 AWS IP, 27017포트)
- 상단 Authentication 탭을 클릭합니다.
- Perform authentication 체크박스를 클릭합니다.
- 생성한 계정의 아이디와 비밀번호를 입력하고, 'save'를 클릭합니다.(세팅시 설정한 아이디 비밀번호)
리눅스 서버에 flask를 설치하기
pip install flask
"EC2 서버(=가상의 내 컴퓨터)에서 포트를 따로 설정하는 것 외에도, AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있습니다."
→ "그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 합니다.일단, EC2 관리 콘솔로 들어갑니다. 그리고 보안그룹(영문: Security Group)을 눌러 들어갑니다. 여기선 launch-wizard-1 이라고 쓰여 있네요."
해당 보안그룹을 클릭합니다. 그 후 Edit inbound rules를 선택합니다.
세 가지 포트를 추가해봅니다.
→ 80포트: HTTP 접속을 위한 기본포트
→ 5000포트: flask 기본포트
→ 27017포트: 외부에서 mongoDB 접속을 하기위한 포트
http:// 내아이피:5000
→ 잘 작동하는 것을 확인할 수 있음
기존의 app.py에서 mongoDB 접속 세팅을 로컬에서 서버로 바꿔줘야함
기존
client = MongoClient('localhost', 27017)
바꿔줘야하는 것
client = MongoClient('mongodb://test:test@localhost', 27017)
pymongo 서버에 설치하기
pip install pymongo
app.py 실행하기
python app.py
포트 번호 없애기 - 기본 개념
"지금은 5000포트에서 웹 서비스가 실행되고 있습니다. 그래서 매번 :5000 이라고 뒤에 붙여줘야 하죠. 뒤에 붙는 포트 번호를 없애려면 어떻게 해야할까요?
http 요청에서는 80포트가 기본이기 때문에, 굳이 :80을 붙이지 않아도 자동으로 연결이 됩니다.
포트 번호를 입력하지 않아도 자동으로 접속되기 위해, 우리는 80포트로 오는 요청을 5000 포트로 전달하게 하는 포트포워딩(port forwarding) 을 사용하겠습니다.
리눅스에서 기본으로 제공해주는 포트포워딩을 사용할 것입니다. "
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서, 서버가 돌아가지 않고 있습니다.
원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
nohup python app.py &
서버 종료하기 - 강제종료하는 방법
아래 명령어로 미리 pid 값(프로세스 번호)을 본다
ps -ef | grep 'app.py'
실행중인 프로세스중 'app.py'가 들어간 프로세스를 표시해준다. pid는 13870과 13880이 나왔다
아래 명령어로 특정 프로세스를 죽인다
kill -9 [pid값]
다시 켜는 법
nohup python app.py &
접속해보기
http:// 내AWS아이피/
'가비아'라는 회사에서 도메인 구입 후 연결
DNS 관리툴
도메인 연결
DNS 설정
호스트 이름에 @, IP주소에 AWS IP주소를 입력합니다
static 폴더 아래에 이미지 파일을 넣고, 각자 프로젝트 HTML의 <head>~</head> 사이에 아래 내용을 작성하면 og 태그를 개인 프로젝트에 사용할 수 있습니다. <meta property="og:title" content="내 사이트의 제목" /> <meta property="og:description" content="보고 있는 페이지의 내용 요약" /> <meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />
참고! 이미지를 바꿨는데 이전 ogimage가 그대로 나오면 그것은 페이스북/카카오톡 등에서 처음 것을 한동안 저장해놓기 때문입니다.
페이스북 og 태그 초기화 하기: https://developers.facebook.com/tools/debug/
카카오톡 og 태그 초기화 하기: https://developers.kakao.com/tool/clear/og