技術屋見習いのメモ帳

技術屋見習いのメモ帳です。

PM2+GitHub ActionsでNodeアプリを本番環境で運用する。

f:id:takashun_0704:20200701191245p:plain

 前回までの記事でサーバーの構築とSSL通信関係の設定は終わっているので、本題のNodeアプリの動作環境を構築します。ついでにGithub Actionsを使って自動デプロイできるようにします。

 

前回記事はこちら

 

takashun.hatenablog.com

 

PM2をインストール

# npm install -g pm2

Nodeアプリ準備してPM2で起動する

github.com

# mkdir /etc/nodeapps
# cd /etc/nodeapps
# git clone https://github.com/takashun/Nekotter
# cd Nekotter
# npm install
# npm run build
# pm2 start npm --name Nekotter -- start

f:id:takashun_0704:20200701201413p:plain

ヨシ!

Github Actionsの設定

デプロイの方法にも色々ありますが、今回はGithub Actionsを使います。

仕組みとしては簡単で、自動でSSHにログインして所定のコマンドを実行させるだけです。

.github/workflowsにdeploy.ymlを作成して以下の内容を書き込みます。

name: Deploy
on:
  push:
    branches: [ master ]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: ssh
      env:
        SECRET_KEY: ${{ secrets.SECRET_KEY }}
        SSH_USER: ${{ secrets.SSH_USER }}
        SSH_ADDR: ${{ secrets.SSH_ADDR }}
        SSH_PORT: ${{ secrets.SSH_PORT }}
        SSH_COMMAND: ${{ secrets.SSH_COMMAND }}
      run: |
        echo "$SECRET_KEY" > secret_key  
        chmod 600 secret_key
        ssh -oStrictHostKeyChecking=no ${SSH_USER}@${SSH_ADDR} -p $SSH_PORT -i secret_key "$SSH_COMMAND"

(-oStrictHostKeyChecking=noオプションは中間者攻撃を可能にしてしまうので注意)

そしてGitHubでSettings > Secrets > New Secretから環境変数を設定してください。必要なのは上記のenv下にある5つで、SSH_COMANDには下記の内容を設定しました。

sudo pm2 stop Nekotter && cd /etc/nodeapps/Nekotter && git pull && npm install && npm run build && sudo pm2 start npm --name Nekotter -- start

適切に設定できていれば、下記のようにデプロイが成功するはずです。

f:id:takashun_0704:20200702010829p:plain

3回失敗してるやん

まとめ

Github Actionsすごい便利。

 -oStrictHostKeyChecking=noオプションを使わない方法を今度試してみようと思います。