Naver Cloud Platform 서버로 1차 프로젝트를 배포했다.
100000크레딧을 줘서 약 3개월간 무료로 사용 가능하다. 하지만 기간이 지나면 과금이 되니 주의!
시작!
PuTTY
를 이용해 NCP 서버에 접속한다.(IP address를 적고 Save를 누르면 다시 IP를 적지 않아도 접속 가능하다.)
$ apt-get update // 패키지 리스트 업데이트 $ apt-get install apache2 $ apt-get install nodejs $ apt-get install npm
node -v
: 노드 버전 확인으로 설치 됐는지 확인
(긁어서 복붙해도 명령어 실행 된다. 앞에 $ 있으면 지우고 사용)
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
nvm --version
으로 nvm 설치됐는지 확인한다.
$ nvm ls // 사용 가능한 Node.js 버전 목록 확인 $ nvm ls-remote // 설치할 수 있는 버전 확인 $ nvm install 17 / nvm install --lts // ubuntu 18/16에서는 아직 node 18 이후 버전을 지원하지 않음 $ nvm ls $ nvm use 17
node -v
: 버전 업 되었는지 확인
프로젝트 repo를 ncp 서버에 클론한다.
$ git clone [클론할 repo https url] $ cd [repo name] $ npm i
이후 merge 된 프로젝트를 배포에 가져올 경우 로컬과 같이 git pull origin ~
를 해주면 된다.
만약 적용이 안됐다면 pm2 kill
하고 다시 서버 실행하기!
$ apt-get update $ apt-get install mysql-server
mysql --version
으로 확인하면 5.xx 설치되어있는데, 할 수 있는게 없다. -> 업그레이드 필요
$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb $ sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb // 버전 선택하는 GUI 뜸
맨 위의
이후에 캡쳐는 못했지만 긴글이 나오면 아래 방향키로 내려서 ok 엔터키 누르면 아래 화면이 나온다
찐 최종 Ok 엔터 누르고 mysql --version
확인하면 버전 업그레이드 된다
mysql
입력 후
$ create database mydatabase character set utf8mb4 default collate utf8mb4_unicode_ci; $ SHOW DATABASES;
문자열 셋으로 utf8mb4
를, 콜레이션으로 utf8mb4_unicode_ci
를 사용!
utf8mb4
: uft8 보다 더 많은 문자를 저장할 수 있음. 이모지까지 저장하고 싶으면 utf8mb4
char set 사용
################### [ DCL ] ##################### -- USER 생성과 함께 설정 CREATE USER '유저이름'@'%' IDENTIFIED WITH mysql_native_password BY '비밀번호'; # 클라이언트 접근할 수 있도록 비밀번호 방식 변경 GRANT All PRIVILEGES ON *.* TO '유저이름'@'%' WITH GRANT OPTION; # 새로운 사용자에게 권한 부여 -- 모든 DB에 접근 가능하도록, "유저이름" 계정에 DB접근 권한을 부여 FLUSH PRIVILEGES; -- 현재 사용중인 MySQL 캐시를 지우고, 새로운 설정 적용 SELECT host, user FROM mysql.user; -- 생성한 유저 확인
$ vi .env 1. i 누르고 내용 입력 2. esc 눌러서 :wq 로 저장 후 종료 3. ls -a (숨김 파일 리스트 확인)
$ npm install pm2 -g // 무중단 배포 모듈 전역 설치 $ pm2 start app.js // 무중단 배포 시작! $ pm2 log // 로그 확인 $ pm2 kill // 무중단 배포 종료
만약 아래와 같은 오류가 난다면 다시 nvm 설치 후 node 버전 업그레이드 후 실행
npm i cross-env
로 설치 후 아래의 세 파일에 설정해준다.
(cross-env
로 npm start
와 npm dev
일 때 config를 다르게 설정할 수 있다.)
// package.json "scripts": { "test": "echo \"Error: no test specified\" && exit 1", // config.js의 prod 실행하고 싶을 때, npm start "start": "cross-env NODE_ENV=prod pm2 start app.js", "start:watch": "cross-evn NODE_ENV=prod pm2 start app.js --watch", // config.js의 development를 실행하고 싶을 때, npm dev "dev": "cross-env NODE_ENV=development nodemon app.js" },
// config > config.js require("dotenv").config(); const development = { username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: "sesac", host: "127.0.0.1", dialect: "mysql", }; const prod = { username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: "sesac", host: "118.67.132.32", dialect: "mysql", }; module.exports = { development, prod }; // 두 모듈 내보내기!
// models > index.js console.log("corssenv: ", process.env.NODE_ENV); // prod or development // const config = require(__dirname + "/../config/config.js")["prod"]; let config; if (process.env.NODE_ENV) { // npm run dev, npm start 실행 명령어에 따라 NODE_ENV 값 달라짐 config = require(__dirname + "/../config/config.js")[process.env.NODE_ENV]; } else { config = require(__dirname + "/../config/config.js")["development"]; }
config.js 의 prod 모듈에 NCP 서버의 DB 정보와 host 정보를 입력해 두었기 때문에
NCP 서버에서는 npm start
로 서버 실행!