nodejs, process.env를 사용하여 로컬 환경변수 및 도커 환경변수 읽어오기

2 minute read

환경 변수 설정은 데이터 베이스 접속 정보나 api키 값을 설정할 때 유용하게 사용됨

참고자료

How To Pass Environment Info During Docker Builds
Node.js Everywhere with Environment Variables!

목차

1. 커맨드 라인으로 입력된 환경변수 읽기
2. .env파일의 환경변수 읽기
3. 도커 환경변수 읽기
4. 도커 빌드 시 매개변수를 입력하고 이를 환경변수로 할당하기

1. 커맨드 라인으로 입력된 환경변수 읽기

1.1 다음과 같은 server.js 파일 생성

console.log(`server port is ${process.env.PORT}`);
console.log(`db name is ${process.env.DB_NAME}`);
console.log(`db user is ${process.env.DB_USER}`);
console.log(`db pw is ${process.env.DB_PW}`);
console.log(`db host is ${process.env.DB_HOST}`);
console.log(`db port is ${process.env.DB_PORT}`);

1.2 커맨드 라인에 환경변수를 입력하고 server.js 실행

PORT=3000 DB_NAME='pg' DB_USER='firewood' DB_PW=1111 DB_HOST='127.0.0.1' DB_PORT=5432 node server.js

1.3 결과

server port is 3000
db name is pg
db user is firewood
db pw is 1111
db host is 127.0.0.1
db port is 5432

2. .env파일의 환경변수 읽기

2.1 package.json 파일 생성

npm init -y

2.2 dotenv 설치

npm install dotenv

2.3 .env 파일 생성

.env 파일은 루트 경로에 생성해야함

PORT=3000
DB_NAME='pg'
DB_USER='firewood'
DB_PW='1111'
DB_HOST='127.0.0.1'
DB_PORT=5432

2.4 server.js에서 dotenv를 사용하여 .env파일의 환경변수 읽기

server.js에 dotenv 추가

const dotenv = require('dotenv');
dotenv.config();

console.log(`server port is ${process.env.PORT}`); // 3000
console.log(`db name is ${process.env.DB_NAME}`);  // pg
console.log(`db user is ${process.env.DB_USER}`);  // firewood
console.log(`db pw is ${process.env.DB_PW}`);      // 1111
console.log(`db host is ${process.env.DB_HOST}`);  // 127.0.0.1
console.log(`db port is ${process.env.DB_PORT}`);  // 5432

2.5 express 설치

npm i express

2.6 server.js 수정

const express = require('express');
const dotenv = require('dotenv');
dotenv.config();
const app = express(),
      port = process.env.PORT || 3080;

let db_config = {
    user: process.env.AG_USER,
    password: process.env.AG_PASSWORD,
    database: process.env.AG_DATABASE,
    host: process.env.AG_HOST,
    port: process.env.AG_PORT
}

module.exports = {
    db_config: db_config
};

app.get('/', (req,res) => {
    res.send(`server port is ${process.env.PORT}
             db name is ${process.env.DB_NAME}
             db user is ${process.env.DB_USER}
             db pw is ${process.env.DB_PW}
             db host is ${process.env.DB_HOST}
             db port is ${process.env.DB_PORT}`);
});

app.listen(port, () => {
    console.log(`Server listening on the port::${port}`);
});

2.7 결과

  • 서버 실행 : node server.js
  • input : http://localhost:3000
  • output :
    server port is 3000
    db name is pg 
    db user is firewood 
    db pw is 1111 
    db host is 127.0.0.1 
    db port is 5432
    

3. 도커 환경변수 읽기

3.1 도커 파일의 작성

# base image
FROM node:slim

# setting the work direcotry
WORKDIR /usr/src/app

# env
ENV DB_PORT=3000
ENV DB_NAME='docker'
ENV DB_USER='docker_user'
ENV DB_PW='docker_pw'
ENV DB_HOST='docker_host'
ENV DB_PORT='docker_port'

# copy package.json
COPY ./package.json .

# install dependencies
RUN npm install

# COPY server.js
COPY ./server.js .

EXPOSE 3000

CMD ["node","server.js"]

3.2 실행

  • docker build -t server:v1 .
  • docker run -p 3000:3000 -d server:v1
  • 환경변수 변경 가능: docker run -e DB_NAME=’changed_name’ -e DB_HOST=’changed_host’ -p 3000:3000 -d server:v1

3.3 결과

  • input: http://localhost:3000
  • output :
    server port is 3000
    db name is docker (changed_name)
    db user is docker_user
    pw is docker_pw
    db host is docker_host (chaged_host)
    db port is docker_port
    

4. 도커 빌드 시 매개변수를 입력하고 이를 환경변수로 할당하기

4.1 도커 파일에 매개변수 추가

# base image
FROM node:slim

# args
ARG ARG_DB_PORT=3000
ARG ARG_DB_NAME='arg_docker'
ARG ARG_DB_USER='arg_docker_user'
ARG ARG_DB_PW='arg_docker_pw'
ARG ARG_DB_HOST='arg_docker_host'
ARG ARG_DB_PORT='arg_docker_port'

# setting the work direcotry
WORKDIR /usr/src/app

# env
ENV DB_PORT=$ARG_DB_PORT
ENV DB_NAME=$ARG_DB_NAME
ENV DB_USER=$ARG_DB_USER
ENV DB_PW=$ARG_DB_PW
ENV DB_HOST=$ARG_DB_HOST
ENV DB_PORT=$ARG_DB_PORT

# copy package.json
COPY ./package.json .

# install dependencies
RUN npm install

# COPY server.js
COPY ./server.js .

EXPOSE 3000

CMD ["node","server.js"]

4.2 도커 빌드시 매개변수를 입력하여 환경변수로 할당

  • docker build –build-arg ARG_DB_NAME=’changed_arg_name’ -t server:v2 .
  • docker run -p 3000:3000 -d server:v2

4.3 결과

  • input: http://localhost:3000
  • output :
    server port is 3000
    db name is changed_arg_name
    db user is arg_docker_user
    pw is arg_docker_pw
    db host is arg_docker_host
    db port is arg_docker_port