보안 유지를 위해 env 파일에 환경변수를 정의해놓고 사용할 수 있다. 때문에 env는 github에 올리지 않는다.
개발단계에서는 vs code등에서 env파일을 만들어 그 안에 환경변수들을 넣는다.
지금 나의 레벨에서 env의 내용은 다음과 같았다.
해당 내용은 프로젝트 폴더 내의 파일에서 프로젝트 타입에 따라(commonJS/module-ES6) import/require 하여 불러와서 쓴다. 프로젝트 폴더에 dorenv 라이브러리를 설치하고 사용한다. - 후에 EC2등에 배포할때에도 설치해야한다.
npm install dotenv //dotenv설치
//commonJS
require("dotenv").config();
//commonJS 키 불러올때
process.env.DB_HOST
//config.js - json파일이 기본으로 되어있다. 확장자명을 js로 바꾸고 내용도 js에 맞게 수정이 필요하다.
require('dotenv').config();
const env = process.env;
const development = {
username: env.DB_USER,
password: env.DB_PASS,
database: env.DB_NAME,
host: env.DB_HOST,
dialect: 'mysql',
};
//ES6 module도 마찬가지로 json->js 로 확장자 변경이 필요하다.
import dotenv from "dotenv";
dotenv.config();
const env = process.env;
const development = {
username: env.DB_USER,
password: env.DB_PASS,
database: env.DB_NAME,
host: env.DB_HOST,
dialect: 'mysql',
};
작성한 env 파일은 깃허브 레포지토리에 절대 올리지 않는다....따라서 gitignore 파일을 생성해서 아래 내용을 쓴다.
.env
.env.local
env 파일을 만들어서 깃허브에 올리고 배포단계를 하려는데 문제가 있다. 내 깃허브 레포지토리에는 env 파일이 올라가지 않았다. 하지만 배포하려면 저 환경변수가 있어야한다. EC2에 따로 생성하거나 복사를 해와야하는데 복사는 할줄 모르기때문에 :).. 생성한다.
터미널에서 인스턴스로 접속한다
ssh -i 키페어파일 ubuntu@인스턴스에 있는 퍼블릭IP
//다음과같이 써야한다.
ssh -i keypair.pem ubuntu@00.000.00.00
그 다음엔 node.js가 설치되어야한다.
//18.최신버전을 설치한다.
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
//다 설치되면 버전을 확인한다.
node -v
npm -v
npm 버전이 확인되면 dotenv를 설치한다.
npm install dotenv
env 파일을 생성한다. (프로젝트 폴더 안에 들어가 있는지 꼭 확인)
vim .env
아래는 이해를 위해 캡쳐했다.
아래와 같은 ~ ~ ~ 표시가 있으면 env 파일 내부에 쓸 준비가 된 것이다.
vscode 등 사용중이던 env 파일에서 환경변수 내용을 복사해와서 붙여넣는다.
DB_HOST="RDS엔드포인트"
DB_USER="유저네임"
DB_PASS="비번"
DB_NAME="데이터베이스 이름"
DB_PORT= 포트
JWT_SECREAT_KEY="JWT비밀키"
:wq //작성한것 저장 후 나가기
이제 env 파일이 생성되었다.
ls -la // 폴더 안에 env 파일이 잘 만들어졌는지 확인한다.
서버가 잘 돌아가는지 확인하고 잘 되었다면 pm2를 설치해서 꺼지지 않는 서버를 만든다.
//env 적용 테스트
node app.js
//터미널이 종료되어도 서버가 살아있도록 pm2설치 -관리자모드에서 설치한다.
sudo -s
npm install pm2 -g
//pm2가 설치된 것을 확인한 후 실행하려는 app.js파일 시작
pm2 start app.js