Summary#5 AWS Cloud Service EC2 (mongoDB connection fail-issue)

외부 서버(EC2)에 연결하기 위한 순서
1. AWS EC2 서버 구매하기(LTS Ver.)

  • 서버 구매 후 포트 추가 설정하기(80, 5000, 27017 Port)
  1. 터미널을 통해 EC2에 접속하기

    keypair의 접근권한 바꿔주기

sudo chmod 400 keypair file drag & drop

SSH로 접속하기

ssh -i keypair file drag & drop ubuntu@IP in AWS

예시)

  1. filezilla 설정하기
  • drag & drop으로 파일 업로드 가능
  1. 서버환경 세팅하기(업그레이드, DB설치, 명령어 통일 등)
  • initial_ec2.sh 파일 생성
# UTC to KST
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

# python3 -> python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

# 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
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000

# MongoDB - install
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
sudo service mongod start
sleep 7
netstat -tnlp

# MongoDB set user, set conf file
mongo admin --eval 'db.createUser({user: "pearl", pwd: "pearl", 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
  • filezilla에 ~.sh 파일 업로드 후 터미널에서 접속하기
sudo chmod 755 initial_ec2.sh
./initial_ec2.sh
  • EC2 서버 시간대 한국으로 맞추기
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
  • python3 명령어 -> python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
  • pip3 -> pip
sudo apt-get update

sudo apt-get install -y python3-pip

sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

mongoDB (with issue)

  • 설치
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

sudo apt-get update

sudo apt-get install -y mongodb-org
  • 실행
sudo service mongod start
  • 접속계정 생성(기본값 test)
mongo

use admin;

db.createUser({user: "test", pwd: "test", roles:["root"]});

createUser가 안된다면, mongoDB 삭제 후 재설치

exit

sudo service mongod restart
  • 외부에 열어주기
sudo vi /etc/mongod.conf

i 입력모드
ESC 버튼으로 전환 후
:wq 입력 후 Enter 하면 저장 후 나오기

아래와 같이 변경하면 완료

:wq

sudo service mongod restart
  1. robo3T로 EC2 서버의 mongoDB 접속하기


여기서 mongoDB createUser로 설정한 user, pw 입력

  1. 포트 포워딩(80 -> 5000)
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
  1. flask, pymongo 패키지 설치 후 접속
pip install flask
pip install pymongo
  • filezilla에 static, templates, app.py 업로드 후 접속
python app.py
  • 주소창에 http://[my EC2 IP]:5000/ 접근하여 홈페이지 확인

http 요청에서는 기본 80포트를 사용, 5000 포트로 전달하게 하는 포트 포워딩 세팅을 통해서 포트번호를 떼도 홈페이지가 동작함

  1. nohup 설정
    터미널 종료시(SSH 접속 끊으면), 서버가 돌아가지 않는 현상 방지
nohup python app.py &

파일 변경사항이 있을 경우 강제종료 후 다시 nohup을 설정해야함

  • 강제종료하기
ps -ef | grep 'app.py'

kill -9 [pid값]

pid값 = 프로세스 번호

  1. 도메인 연결(가비아 DNS)
  • 도메인 구입 후 DNS 설정 - 도메인 연결하기
  • 호스트 이름 : @
  • IP주소 : EC2에서 설정한 IP

도메인으로 접속가능!
http://pearlkim.shop/

  1. html meta tag를 활용하여 og tag 만들기
<meta property="og:title" content="내 사이트의 제목" />
<meta property="og:description" content="보고 있는 페이지의 내용 요약" />
<meta property="og:image" content="{{ url_for('static', filename='ogimage.png') }}" />

og 태그는 한번 등록하면 수정되지 않기 때문에 수정을 원할 시에는
초기화가 필요!

END

좋은 웹페이지 즐겨찾기