본문 바로가기
Programming/Javascript, Typescript

Heroku로 Node.js 배포하기(github action, secrets 설정)

by 째스터 2022. 7. 7.
728x90

아래 repository에서 Heroku로 git action을 이용해서 간단 CI/CD를 구현했다.
https://github.com/HanJaeJoon/Web3API

 

GitHub - HanJaeJoon/Web3API: Node.js + vanilla js NFT transfer

Node.js + vanilla js NFT transfer. Contribute to HanJaeJoon/Web3API development by creating an account on GitHub.

github.com

물론 아래와 같이 Heroku에서 Automatic Deploys를 설정해도 된다.
하지만 일일이 github secrets를 Heroku settings > Config Vars에 입력해야 해서 귀찮다.

리서치 중에 괜찮은 github action을 발견했다.
https://github.com/AkhileshNS/heroku-deploy

사용법은 다음과 같다.

먼저 아래쪽 예시와 같이 .github/workflows/main.yml 파일을 생성한다.
이때 "HD_" prefix를 꼭 붙여줘야 한다.

예를 들어, node.js에서 process.env.NFT_SENDER_ADDRESS 로 사용하는 변수를 설정하기 위해서는
다음과 같이 설정해야 한다.

HD_NFT_SENDER_ADDRESS: ${{secrets.NFT_SENDER_ADDRESS}}

 

아래 yml에 해당하는 .env 파일을 참고하자. => 링크

name: Deploy

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: akhileshns/heroku-deploy@v3.12.12 # This is the action
        with:
          heroku_email: "jj2726@gmail.com"
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: "web3-jj"
        env:
          HD_NFT_SENDER_ADDRESS: ${{secrets.NFT_SENDER_ADDRESS}}
          HD_NFT_SENDER_PRIVATE_KEY: ${{secrets.NFT_SENDER_PRIVATE_KEY}}
          HD_DEFAULT_ASSET_CONTRACT: ${{secrets.DEFAULT_ASSET_CONTRACT}}
          HD_DEFAULT_RECEIVER_ADDRESS: ${{secrets.DEFAULT_RECEIVER_ADDRESS}}
          HD_MORALIS_APP_URL: ${{secrets.MORALIS_APP_URL}}
          HD_MORALIS_APP_ID: ${{secrets.MORALIS_APP_ID}}
          HD_MORALIS_KEY: ${{secrets.MORALIS_KEY}}
          HD_MORALIS_SPEEDY_NODE_API_KEY: ${{secrets.MORALIS_SPEEDY_NODE_API_KEY}}
          HD_DB_SERVER: ${{secrets.DB_SERVER}}
          HD_DB_NAME: ${{secrets.DB_NAME}}
          HD_DB_USER: ${{secrets.DB_USER}}
          HD_DB_PASSWORD: ${{secrets.DB_PASSWORD}}
          HD_GMAIL_ID: ${{secrets.GMAIL_ID}}
          HD_GMAIL_PASSWORD: ${{secrets.GMAIL_PASSWORD}}

설정을 했다면 이제 자동으로 main branch를 push 하면 자동으로 빌드와 배포가 이루어진다.

참고로 repository에 .env 파일이 없어도 위의 config들이 Heroku에 설정된다.
(이미 .env 파일이 있다면 별도로 yml 파일에 위치를 명시해주어야 yml의 설정과 합쳐서 설정된다)

설정된 config는 Heroku settings에서 확인이 가능하다.


그런데 Heroku는 AWS의 EC2 instance에서 유동 IP로 돌아간다.
Outbound IP 설정을 위해서는 별도 모듈을 유료로 이용해야 한다.
Heroku를 사용하는 의미가 사라졌다.

이제 Azure의 MS SQL Server와 통신을 해야 하는 상황이다.
AWS EC2 IP range를 모두 허용하기에는 보안이 걱정되어 이 Node.js 서버도 Azure로 옮길 예정이다.

Azure는 아래와 같이 Outbound IP를 명시해준다.

다음에는 Azure에 Node.js를 배포하는 법을 작성해야겠다.

728x90

댓글