-
Notifications
You must be signed in to change notification settings - Fork 0
NCP Server 수동 배포
일단 이번주에 구현한 API를 수동으로 배포하기 위해서 NCP 에 Server 와 DB 전용 서버를 생성하고 git clone 만 하면 된다고 생각했다.
classic 서버를 만들고 설정 작업들을 마친 다음에 git clone 을 받고, npm install 을 해보니 수 많은 경고 문구과 에러들이 발생했다.
상황 파악을 해보니 npm, node 버전이 안맞는다는 것이었다. node -v
로 버전을 확인해보니 굉장히 낮은 버전이었고, 로컬에서 개발할 때는 nodejs 18 버전을 사용하고 있어서 18버전 이상으로 설치해야 겠다고 생각해서 node 버전을 관리할 수 있는 nvm
을 설치했다.
nvm install 18
으로 18 버전을 설치하고 nvm use 18
로 버전을 지정해준 후 실행해봤는데, node 가 동작하지 않았다. 이상한 에러가 발생했다.
검색해보니 ubuntu 18 버전에서는 node 18 버전 이상을 쓸 수가 없다는 것이었다.
하지만 NCP 의 classic server 에는 오직 ubuntu 18 버전밖에 없다…;;
NCP 에 커널 업데이트시 문제가 발생할 수 있고 책임지지 않는다는 경고 문구가 있었지만, 선택의 여지가 없었다.
Ubuntu 18.04 -> 20.04 업그레이드하기. - 달소씨의 하루
이 글을 참고하여 진행했다.
apt update && apt upgrade
apt-get dist-upgrade
// 업그레이드 시작
apt-get install update-manager-core
딱 이 3개의 명령어로 업그레이드를 했는데, 굉장히 오래걸렸다. 총 합하면 약 3시간 정도 걸린 것 같다. 중간중간 옵션을 정해주면 알아서 해준다.
그렇게 업그레이드를 마치고 reboot 을 하니 버전 업그레이드가 잘 되어있었다.
// node 버전을 관리할 수 있는 nvm 설치
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
nvm install 20
nvm use 20
nvm alias defualt 20
nvm 을 다운 받고 nvm 을 이용해서 20 버전을 지정해줬다.
node -v 를 입력했을 때 버전이 잘 나오면서 node 가 잘 동작하는 것을 확인했고, 삽질을 너무 많이 했는데 기분이 너무 좋았다.
드디어 node 20 버전 올리기 성공
npm install -g npm@latest
node 가 잘 업데이트 되니까 npm 도 업데이트가 잘 되었고
드디어 npm install 도 정상적으로 됐다.
그렇게 업그레이드가 끝나고 clone 을 받아서 실행해보니까 본서버에서 DB server 에 있는 MySQL 과 연결이 안됐다.
env 파일이나, 포트 등과 같은 인프라적인 부분의 설정 문제일 것이라고 딱 감이 왔지만 정확이 어디가 문제인지 어떻게 해야하는지 모르니 시간이 많이 걸릴 수 밖에 없었다.
포트포워딩, 방화벽, 공인 IP, ACG, 등 가능성이 있는 거의 모든 경우의 수를 해본 결과 해결방법은 역시 간단했다.
일단 공인 IP 를 할당해준다.
그리고 본서버의 env 파일에서 host IP 에 공인 IP 를 넣어주고 port 를 3306 으로 해준 후에
ACG 에서 3306 포트를 허용해준다.
그리고 /etc/mysql/mysql.conf.d/mysqld.cnf
이 파일에서 bind 옵션을 잘 만져줘야한다.
원래는 bind=127.0.0.1 로 local 에서만 mysql 에 접속할 수 있게 설정이 되어있다.
이걸 주석처리해서 풀어줘야 한다고 해서 주석처리를 해줬는데 이게 계속 말썽을 피웠다. 이거때문에 env 파일을 어떻게 해도 연결이 안됐다.
계속 이것저것 만지다가 netstat -tnlp
으로 확인을 해보니 3306 포트의 설정이
0 :::3306 으로 되어있었다.
내가 원한건 0.0.0.0 인데 이상한 것 같아서 다시 bind=0.0.0.0 으로 설정을 해주고 service mysql restart
로 mysql 을 재시작해주니까
이렇게 3306 포트의 설정이 잘 된 것을 볼 수 있었다.
이렇게 설정을 해주고 나니 본서버에서 DB 에 연결이 되었고, 데이터도 잘 들어갔다!
그리고 서버를 백그라운드에서 실행시키기 위해 forever 모듈을 다운 받아서 실행시켰다.
아직 할게 많아서 추후에 pm2 나 다른 모듈을 사용해서 배포를 할 계획이다.
-
forever 를 전역으로 설치해서 백그라운드 실행
forever start -c “npm run start:prod” ./
으로 실행forever list
로 리스트 확인forever stop
번호 로 종료forever logs
번호 로 로그 확인로그 파일은 ./.forever/~~.log 에 있음
- 프로젝트 생성
- 프로젝트 구조
- PR에 대한 단위 테스트 자동화
- 역/직렬화 라이브러리 비교
- Github Release 자동화
- Firebase App 배포 자동화
- 플러그인을 이용하여 공통 설정 없애기
- Timber 라이브러리를 사용한 이유
- 네트워크 예외 처리
- Kotest 도입기