이것저것 해보기🌼

dotenv로 .env 설정 및 Github Actions에 secret 추가하기 (MariaDB 접속정보) 본문

프로젝트/참나무농원

dotenv로 .env 설정 및 Github Actions에 secret 추가하기 (MariaDB 접속정보)

realtree 2024. 9. 12. 14:08

process.env란?

Node.js에서 환경변수 접근 방법

별도로 무언가를 설치하지 않아도 이용할 수 있다.

https://www.daleseo.com/js-node-process-env/

 

Node.js에서 환경 변수 다루기 (process.env)

Engineering Blog by Dale Seo

www.daleseo.com

 

 

dotenv

dotenv는 process.env를 쉽게 관리하기 위한 모듈이다. (매번 node 실행시마다 변수를 일일히 치기 귀찮)

https://www.npmjs.com/package/dotenv#%EF%B8%8F-usage

 

dotenv

Loads environment variables from .env file. Latest version: 16.4.5, last published: 7 months ago. Start using dotenv in your project by running `npm i dotenv`. There are 49146 other projects in the npm registry using dotenv.

www.npmjs.com

npm i dotenv

 

 

Maria DB 접속 정보에 dotenv 적용하기

MariaDB 접속 정보가 하드코딩으로 들어있으면 여러 보안상 문제가 생길수 있다.

DB 커넥션을 맺는 아래와 같은 코드가 있다고 치자.

당연히 host 및 계정 정보는 빼고 배포해야하고 별도로 안전한 장소에 저장해야 한다.

import maria from 'mysql'

const conn = maria.createConnection({
  host: [my db host],
  port: 3306,
  user: [my db id],
  password: [my db password],
  database: [my database],
})

export default conn

 

.env 파일을 만들고, 그 안에 해당 정보들을 입력한다.

DB_HOST=[my db url]
DB_PORT=3306
DB_USER=[my user]
DB_PASSWORD=[my password]
DB_NAME=[my db]

 

 

이제 이 정보들을 변수로 쉽게 가져올수 있다.

/* eslint-disable no-undef */
import maria from 'mysql'
import 'dotenv/config'

const conn = maria.createConnection({
  host: process.env.DB_HOST,
  port: process.env.DB_PORT,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
})

export default conn

 

주의

.env 파일을 루트 디렉터리에 있지 않거나, prod/dev 별로 별도의 파일로 관리한다면 경로를 명시해주어야함

dotenv.config({ path: '.env.local' });

 

그리고 .env 파일은 .gitignore 에 등록해야한다.

 

 

참고

나는 ES Module을 사용해서 import로 가져오는 방법만 적었는데, CommonJS는 아래 포스팅을 참고하자.

https://www.daleseo.com/js-dotenv/

 

dotenv로 환경 변수를 .env 파일로 관리하기

Engineering Blog by Dale Seo

www.daleseo.com

 

 

Github Actions 에서 .env 정보 가져오기

Github Actions 방법으로 배포를 하고 있다면, 저장소에는 .env 파일이 없으므로, 정상적으로 process.env를 가져올 수 없다. (gitignore 되므로)

그래서 Github에서는 Secret 으로 이런 환경변수를 저장할수 있는 기능을 지원한다.

 

설정 위치

프로젝트 repository 설정 > Secrets and variables > Actions

 

여기에 필요한 process.env 를 모두 등록한다.

이제 이 시크릿을 배포 스크립트 실행시 .env 파일에 등록해서 쓸수 있게 만들면 된다.

 

Workflow 에서 .env 파일 생성 과정 추가하기

 

.env 파일에 내용을 쓰는 명령어는 다음과 같다.

echo "DB_HOST=${{ secrets.DB_HOST }}" >> .env

 

내가 필요한 모든 Secret을 .env 파일에 쓰는 과정을 추가해주면 된다. (.env setting 단계 참고)

name: Deploy to Firebase Hosting on merge
on:
  push:
    branches:
      - main
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: .env setting
        run: |
          echo "DB_HOST=${{ secrets.DB_HOST }}" >> .env
          echo "DB_PORT=${{ secrets.DB_PORT }}" >> .env
          echo "DB_USER=${{ secrets.DB_USER }}" >> .env
          echo "DB_PASSWORD=${{ secrets.DB_PASSWORD }}" >> .env
          echo "DB_NAME=${{ secrets.DB_NAME }}" >> .env

      - name: install npm dependencies and run
        run: cd backend && npm install && npm run server

 

 

 

Github Action에서 환경변수가 잘 등록되는지 확인해본다. 

 

끝!

 

 

참고

https://s0ojin.tistory.com/49

 

[React] github action 리액트 .env file 추가하기

이전 글 [React] react프로젝트 github action으로 CI/CD 구축하기(aws S3, cloudfront) 문제상황 : .env 파일이 github action으로 S3에 올라가지 않는다 이전 글에서 github action을 통한 클라이언트 배포자동화 과정

s0ojin.tistory.com