이제 다 만들어 졌으니 배포만 남았다.
배포는 아마존 aws의 EC2를 이용한다.
내가 만든 사이트를 아무때나 들어가고 싶다면 항상 컴퓨터가 켜져있어야한다.
그리고 모두가 접근할 수 있는 공개주소인 공개 IP주소로 나의 웹 서비스에 접근할수 있도록 해야한다.
이게 어려우니 EC2를 구매 하는 것이다.
아마존 aws에 가입을 한다.
처음 가입을 하면 아마 1년동안 프리티어 일 것이다.
그리고 aws의 EC2를 누른고 왼쪽 메뉴에서 인스턴스를 누른다.
그리고 인스턴스 시작을 누른뒤 프리티어 사용가능 중에 우분투서버를 선택한다.
그리고 다음으로 넘어가 프리티어사용가능한 것을 선택한다.
그리고 다음을 넘어가고 또 다음으로 넘어가면 인증키를 선택하라고 한다.
create a new key pair를 선택하고 이름을 정해주고 다운로드를 받는다.
그리고 다음으로 넘어가주면 EC2서버를 시작할 준비가 끝난다.
이제 사용할 준비가 완료 되었으니 EC2에 접속을 해보자.
윈도우라면 gitbash를 실행하고
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
이렇게 입력해준다.
ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
이런식으로 입력하면 된다.
입력후 엔터를 치면 접속이 된다.
이제 EC2에 node.js를 설치해보자.
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
EC2에 접속된 상태로 이렇게 입력 해주고
sudo apt-get install -y nodejs
이것도 입력을 해준다.
그러면 node.js가 설치가 잘 될것이다.
설치를 확인하기 위해 node -v 와 npm -v를 입력해본다.
버전명이 잘 뜨면 설치가 잘 된것이다.
이제 mongoDB를 설치해 보자
EC2가 접속된 상태로
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
를 해줘서 실행을 해준다.
mongoDB 접속계정 생성
mongoDB의 접속계정 생성을 해보겠다.
일단 mongo에 들어가준다. EC2에 접속한 채로 mongo를 입력해준다
좌측에 >이 표시만 나오면 성공 한것이다.
use admin;
db.createUser({user:"유저이름", pwd:"비밀번호", roles:["root"]});
이렇게 순서대로 입력해주면된다. 유저이름과 비밀번호 칸에는 원하는 유저이름과 비밀번호를 영어로 넣어주면 된다.
successfully가 뜨면 exit를 입력하여 나오면 된다.
이제 몽고디비를 재시작한다.
sudo service mongod restart
를 입력 하여 재시작 해준다.
이제 mongoDB를 외부에 열어주기 위해 설정을 해준다
sudo vi /etc/mongod.conf
를 입력해준다. 그리고 내리다보면 network interfaces에 bindIp와 security를 바꿔줘야한다.
i를 누르면 입력모드로 전환된다.
그 상태에서 커서를 내려서 bindIp를 0.0.0.0으로 바꿔주고, security 앞에 있는 #을 지우고 security아래에 authorization: enabled를 입력해준다.
다 정확히 입력 했다면 esc를 눌러서 입력모드를 꺼주고 :wq를 눌러서 저장후나와준다.
그리고 sudo service mongod restart 를 입력해서 재시작 해준다.
이제 Robo3T에도 등록을 해준다.
Robo3T를 열고 좌측 상단에 컴퓨터두대가 있는 그림을 누른다.
그리고 create를 눌러서 접속정보를 셋팅한다.
이름은 아무거나 입력해주고 Address는 EC2에 public Ip를 입력해준다.
그리고 Authentication으로 넘어가서 Perform authentication 체크박스를 누르고 아까 생성한 아이디와 비밀번호를 입력후 확인을 눌러준다.
이제 우리가만든 프로젝트를 업로드 한 후 실행을 해보자.
프로젝트 업로드는 filezilla 라는 프로그램을 사용 할 것이다.
filezilla를 다운로드 받고 실행 한 다음 왼쪽 위에 사이트관리자 열기를 누르고, newsite를 눌러서 새로운 사이트를 만들어 준다. 호스트에는 EC2에 있는 퍼블릭아이피를 넣어주고 port엔 22, 그리고 사용자는 ubuntu, 그리고 키파일은 찾아보기를 눌러서 아까 EC2 서버를 만들때 다운받은 키파일을 넣어주면 된다.
그리고 연결을 하면 연결이 된다.
프로젝트 파일을 넣기전에 몽고db에 아이디와 비밀번호를 지정해 놓았기 때문에, 그것을 프로젝트 코드에 추가를 해줘야 한다.
프로젝트파일을 열고 schemas에 index.js 파일을 연다.
const mongoose = require("mongoose");
const connect = () => {
mongoose
.connect("mongodb://localhost:27017/admin", {
useNewUrlParser: true,
useUnifiedTopology: true,
ignoreUndefined:true,
user: "아이디",
pass: "비밀번호"
})
.catch(err => console.log(err));
};
mongoose.connection.on("error", err => {
console.error("몽고디비 연결 에러", err);
});
module.exports = connect;
이렇게 바꿔준다.
중간에 user: 와 pass가 추가된것을 볼수 있다. 각자 맞는 아이디와 비밀번호를 넣고 저장을 해준다.
이제 만든 프로젝트 파일을 FTP서버로 끌어다 놓는다.
업로드 하는데는 시간이 좀 걸릴것이다.
업로드가 다 되면 이제 다시 gitbash로 돌아가서 ls를 쳐보면 프로젝트폴더가 뜨는것을 확인할 수 잇다. 그 프로젝트폴더로 들어가기위해
cd 프로젝트파일명
을 입력해주면 그 프로젝트 폴더로 들어가진다.
프로젝트에 들어간 다음 npm install을 쳐준다.
이제 서버실행을 한다. 프로젝트를 그냥 실행을 시키게 되면 터미널창을 닫으면 서버가 꺼져버린다.
그래서 죽지 않은 실행 방식으로 프로젝트 서버를 실행시켜야 한다.
이를위해 PM2 도구를 이용한다.
pm2 공식문서
여기엔 pm2의 공식문서들이 있다.
나중에 참고할거면 해도 좋다.
일단 EC2 인스턴스 관리자 권한을 취득한다.
sudo -s
이렇게 명령어를 입력하면 관리자 권한으로 들어가게 된다. 그리고
npm install -g pm2
이 명령어를 치면 pm2가 설치가 된다.
그리고 이제
pm2 start index.js
를 쳐서 서버를 켜보자.
에러가 나지 않는다면 성공한 것이다.
이제 포트 설정을 해보자
아마존aws의 EC2에 돌아가서 내가 실행한 EC2를 선택하고 밑에 보안에 보안그룹을 누른다음 인바인드 규칙 편집을 눌러서 들어가자.

이렇게 규칙추가를 누르면서 똑같이 설정 해 주면된다.
이제 사람들은 80포트로 사이트에 들어갈 수 있다.
이제 3000포트에서 80포트로 변경시켜주는 작업을 하겠다.
node.js 서버 포트를 80으로 바꿔도 되지만 보안을 생각하며 80으로 들어온 사람을 3000포트로 바꿔주는 작업을 한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
아까 켜둔 서버를 ctrl+c로 끄고 위 명령어를 넣어준다.
그러면 이제 EC2의 퍼블릭ip로 접속을 할 수 있다.
이로서 배포가 끝이 났다.