-
Node.js 환경구축Study/Server 2021. 7. 22. 02:00
환경을 구축하는데 앞서 IntelliJ와 Node.js를 설치해주도록 한다.
Node.js는 이미 설치를 해놨으므로 넘어간다. 만약 없다면 설치해주도록..!!
https://www.jetbrains.com/ko-kr/idea/download/#section=windows
다운로드 IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE
www.jetbrains.com
IntelliJ에서 Plugins로 들어가 Node.js와 ejs를 설치해주도록 한다. 이미 설치되어있다면 넘어간다. 이제 새로운 프로젝트를 생성한다. javascript > Node.js를 선택하여 프로젝트를 생성하도록 한다.
그리고 api 테스트를 위해 포스트맨을 설치해주도록 한다. web에서 사용이 가능하지만 app을 사용하는 게 아무래도 더 편하다.
https://www.postman.com/downloads/
Download Postman | Try Postman for Free
Try Postman for free! Join 15 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com
따란!! 설치하고 로그인하니 날 귀엽게 반겨준다🤩🤩
1. 터미널 설정
ec2로 만들어놓은 서버 터미널에 접속한다.
sudo su apt update apt upgrade apt install nginx -y systemctl status nginx # nginx 확인
nginx가 active (running) 상태면 잘 돌아가고 있는 것이다.
이제 node.js 템플릿을 이 서버에 넣어주도록 한다. winSCP에 드래그 하여 가져오는 방법도 있지만 git에 템플릿을 올려놓고 이를 clone하여 가져오는 방법을 사용하겠다.
cd /var/www/ git clone (git에서 복사한 거 붙여넣기)
여기서 package.json 파일을 보면 repository가 있을 것이다. 이는 git clone으로 인해 생긴 것이므로 지워줘도 좋다.
이제 npm을 설치해주도록 한다. 이때 npm은 package.json이 있는 곳에서 진행해준다.
npm # npm이 없으니 설치하라고 나온다. apt update apt install npm npm install
npm 설치 후 node_modules가 생긴 것을 확인할 수 있다.
이후 원격접속을 해줄건데 파일을 수정 및 업로드 하려면 권한이 있어야 한다. /var/www에서 진행하도록 한다.
chmod -R 777 api-server-node/
2. IntelliJ에서 원격접속하기
IntelliJ에서 Tools > Deployment > Configuration
+ 버튼 누르고 SFTP 연결을 만들어준다. 만든 SFTP의 SSH configuration로 새로운 호스트 만들어준다.
Host : ec2 주소
User name : ubuntu
Authentication type : key pair
성공적으로 연결 완료!!
이제 다시 SFTP 에서
Root path : /var/www/api-server-node
Web server URL : 도메인 주소
Remote Host 에서 생성한 SFTP를 보면 다음과 같이 잘 적용된 것을 확인할 수 있다.
여기서 config > database.js 설정을 해주어 만들어놓은 rds와 연결시킨다.
host : rds 엔드포인트
user : rds 유저
port : 3306
password : rds 비밀번호
database : db이름
3. API 만들기 예제
접속 전 인바운드 규칙에 3000번 포트를 추가해준다.
[DB 연결 없이 TEST]
- userRoute.js의 0. 테스트 API 부분을 주석 해제한다.
- userController.js의 테스트 API 부분을 주석 해제한다.
- node index.js를 통해 로컬 서버를 구동시키고 포스트맨을 통해 GET localhost:3000/app/test로 테스트가 잘 되는지 확인한다.
api 테스트 테스트 성공❗❗❗❗❗
4. Reverse Proxy
하지만 이 구조로 하용하면 80번포트로 사용할 수 없고, 계속 3000을 붙여서 해야한다.
이러면 ssl 인증을 받아와도 443포트를 이용하여 통신할 수 없다. 즉, 인증을 받는 의미가 없다.
그러므로 nginx와 node를 연결해주기 위해 reverse proxy를 적용해주도록 한다.
reverse proxy에 대하여
https://www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html아래 코드를 입력하여 default를 수정해주도록 한다.
vi /etc/nginx/sites-available/default
location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. # try_files $uri $uri/ =404; # 이부분 주석 처리 proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; }
이걸 해주는 이유는 client에서 server에서 요청이 올 때 가장 먼저 만나는 것이 server program이고, 그 다음 backend language와 DB로 넘겨주는 형식인데 3000번 포트로 오는 경우 server program을 거치지 않고 backend language로 넘어오게 된다. 그럴 경우 ssl 인증이 불가하다(https 사용불가). 그래서 위와 같은 코드를 이용하여 80번, 443번 포트로 들어올 경우 3000번 포트로 넘겨주도록 설정한다.
이후 nginx를 다시 시작해주고 node를 실행시켜준다.
systemctl restart nginx node index.js
이후 80번 포트로 접속 시 잘 되는 것을 확인할 수 있다. (참고로 ip주소 말고 도메인을 입력해도 잘 된다.)
5. pm2 설치
node를 사용할 경우 service가 중단될 수도 있다. 그래서 pm2나 nodemon를 이용하여 계속 서버를 켜둘 수 있도록 한다. node는 현재 싱글스레드만 지원하고있다. 하지만 pm2를 사용할 경우 멀티스레드를 지원해준다.
다음 명령어를 입력하여 pm2를 설치해준다. 그리고 pm2를 실행시켜준다.
npm install pm2 -g pm2 start index.js
꺄루룩 되고있다. 하지만 여기선 log가 바로 보이지 않는다. pm2 log를 입력하면 log를 확인할 수 있다. 또한 상태를 확인하고 싶다면 pm2 status를 입력하면 된다.
'Study > Server' 카테고리의 다른 글
pem 파일로 서버 접속하기 (0) 2022.05.03 야놀자 한방쿼리~ (0) 2021.07.20 AWS RDS 구축 (0) 2021.07.16 서브 도메인 + Redirection (0) 2021.07.11 AWS 서버 구축 - 도메인(feat.가비아) + HTTPS(feat.let's encrypt) (3/3) (0) 2021.07.11