[AWS] EC2 connect and linux:ubuntu node 설치

Darcy Daeseok YU ·2023년 1월 26일
0

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 사용하는 경우)

  1. 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 
profile
React, React-Native https://darcyu83.netlify.app/

0개의 댓글