EC2 설정
font 서버 || back 서버 각각 설정함.
폴더 구조
nodebird-front instance
┌ front
├ back
└ keypair.pem
connect
root폴더에 keypair .pem 파일을 위치시킴
root 폴더에서 아래를 실행해서 ssh 접속
connect > example에 명시된 명령어를 터미널에 입력한다. /root폴더에서
ssh -i "keypair.pem" ubuntu@ec2-52-78-154-240.ap-northeast-2.compute.amazonaws.com
git clone https://github.com/[당신의 깃허브 프로젝트 주소].git
Node 설치 :
$ sudo apt-get update
$ sudo apt-get install -y build-essential
$ sudo apt-get install -y curl // 설치 되어잇음 스킵
$ curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash --
$ sudo apt-get install -y nodejs
(우분투에 ctrl + v 안됨. window 에서는 여기서 복사후 터미널에 마우스 우클릭하면 붙여넣어짐.)
노드 설치 후 npm i : 각 폴더안에서 front / back
nodebird_back 에 mysql 서버도 설치 :백엔드
$ sudo apt-get install -y mysql-server
$ mysql_secure_installation
password 입력
에러 발생시
: Access denied for user 'root@localhost'
sudo su 실행 후 재 시도
password 설정 안될 때
해당 터미널 종료
터미널 다시 오픈하고
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '새로운비밀번호'; 실행
패스워드 보안 정책에 맞게 비밀번호 입력해야함.
mysql 접속
mysql -u root -p
비밀번호 입력하고 접속 mysql> 정사 작동 되면
npm start : 서버 구동
첫번째 에러
ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:4000
추정 원인들 :
0. db생성했나?
1. process.env.NODE_ENV undefined 문제
2. db config 설정
해결법 :
0. npx sequelize db:create (sequelize 사용하는 경우)
precess.env.NODE_ENV 값이 undefined로 들어옴
ssh 터미널에 export NODE_ENV=production 실행
// undefined로 들어오니까 development" db 환경 설정으로 실행됨.
const env = process.env.NODE_ENV || "development";
const config = require("../config/config")[env];
2. db config 설정 : port 설정이 문제
mysql -u root -p 로 루트 사용자로 접속
SHOW global variables like "PORT" 로 몇번 포트를 사용하는지 확인 : 3306
...
production: {
username: "root",
password: process.env.DB_PASSWORD,
database: "react_nodebird",
host: "127.0.0.1",
port: "3306", // 추가 명시해줌
dialect: "mysql",
},
> db 생성
에러 : Error: Unknown database 'react_nodebird' ;
데이터 베이스 없음 => 생성 해주자.
**npx sequelize db:create**
(db 설정 파일 포트에 주의)
> 서버 접속 URL 포트 정의
http 로 접속할 수 있는 포트 : 80
https 로 접속할 수 있는 포트 : 443
포트 번호를 수정해준다.
app.listen(80 , ()=>{})
back> config> config.js (db 접속 설정 파일)
module.exports = {
development: {
username: "root",
password: process.env.DB_PASSWORD,
database: "react_nodebird",
host: "127.0.0.1",
port: "4000",
dialect: "mysql",
},
test: {
username: "root",
password: process.env.DB_PASSWORD,
database: "react_nodebird",
host: "127.0.0.1",
dialect: "mysql",
},
production: {
username: "root",
password: process.env.DB_PASSWORD,
database: "react_nodebird",
host: "127.0.0.1",
port: "3306",
dialect: "mysql",
},
};
> xxx.xxx.xxx.xxx:80 으로 접속
sudo 권한으로 실행하면 80 생성할수 있고 아래 단계는 필요없음. (root@)
필요시 실행 >
sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 4000
80포트로 접속하면 4000포트로 redirect해준다.
Redirect 포트 삭제 방법
sudo iptables -t nat -L PREROUTING --line-number 로 목록 조회
sudo iptables -t nat -D PREROUTING 라인넘버
> pm2
npm i pm2
package.json script 수정
// sudo 안쓰는게 최고임 : 80번 포트 안쓰고 리다이렉트 하는거 고려할 것.
npm run prod 잘안됨 => 터미널에 직접 입력
**su : root유저 로그인
pm2 start app.js 직접 실행하자. **
참고로 root유저가 아닌 상태로
sudo pm2 start app.js 서버 정상 구동 안됨.
~~"prod" : "NODE_ENV=production sudo pm2 start app.js" ~~
~~"prod" : "sudo pm2 start 'npm run start'"~~
npm run prod