git pushをするだけでnextjsのプロジェクトファイルをVPSに自動デプロイするように設定を行いました。
ホスティングサービスを利用すれば基本git pushとするだけでデプロイが可能な場合がほとんどですが、VPSの場合は手動でデプロイをするしかなかった。これが本当に煩わしかった。
sshでファイルを送る方法もあるがそれはそれで...
そのため、今回git actionsを利用して自動でデプロイできるように設定しました。
gitで pushアクションがあった場合等操作がトリガーとなり、自動的に他のタスクを実行することができます。
git hubマーケットに色々なものがあるので眺めて見たら新しい発見があるかもしれません。
今回はssh-actionというものを使い、sshを使用し、VPS上のスクリプトを実行させます。
VPSデプロイするという手段にビルド済のファイルを送るという手段があります。
まずVPS上にコマンドを叩けばビルド、デプロイまで実行してくれるようなスクリプトを作成します。
VPS上でデプロイするまでに必要なコマンドは
# ディレクトリ移動
cd /var/www/deploydirectory/nextjsweb
# Gitリポジトリを最新の状態に更新
git reset --hard origin/main
# もしくは、git pull
# 依存関係のインストール
npm install
# Next.jsプロジェクトのビルド
npm run build
# pm2 リロード
pm2 reload test-nextjs-web
私の場合こんな感じで、スクリプトを実行させると自動でソースコードのダウンロード、ビルド、pm2リロードをしてくれます。
あとはこのスクリプトをgit push時に実行させるだけです。
git actionsで先ほど作ったスクリプトを実行させるタスクを作成します。 git actionsを使うために必要な物はymlファイル一つだけです。
以下参考ください。
name: ssh command
on:
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- id: ssh
uses: invi5H/ssh-action@v1
with:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_KEY: ${{ secrets.SSH_KEY }}
- run: ssh ${{ steps.ssh.outputs.SERVER }} /home/demouser/build.sh
簡単に解説しますと、
#以下はmainのブラインチがpushされた場合という意味になります。
#この設定により他のブランチ(develop)等がpushされても次のjobsの処理は実行されません。
on:
push:
branches:
- main
以下が実際に実行されるコード
# ssh-action@v1というものを使用して、ssh接続し、 build.shのスクリプトを実行させています。
jobs:
test:
runs-on: ubuntu-latest
steps:
- id: ssh
uses: invi5H/ssh-action@v1
with:
SSH_HOST: ${{ secrets.SSH_HOST }}
SSH_PORT: ${{ secrets.SSH_PORT }}
SSH_USER: ${{ secrets.SSH_USER }}
SSH_KEY: ${{ secrets.SSH_KEY }}
- run: ssh ${{ steps.ssh.outputs.SERVER }} /home/demouser/build.sh
SSHの接続情報は次のように に定義しています。 上記のコードをそのまま使用するのであれば, 次の名前で4つ作成し適切な値を入力してください。
ssh_keyについてkeyの作り方を参考ください。
そして、VPS上にはauthorized_keysの中に以下のようにssh-edで始まる文字を追加します。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx id@host
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy hoge@hoge
git hubのSSH_KEYにはもう片方ファイルの値をコピペで入力します。
-----BEGIN OPENSSH PRIVATE KEY-----
b3XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END OPENSSH PRIVATE KEY-----
git pullでid pwを要求される問題を解決する必要があります。
git pullを実行する時毎回ユーザー名とパスワードを聞かれてしまいます。
ここのようにアカウントとパスワードを回避する方法があるのですが、今回はssh keyによる認証を行う事によりアカウントとパスワードの要求を回避することにしました。
ssh keyを一度作れば、今後聞かれ事は無くなります。
一点注意事項としては、ssh keyを作ってしまったら他の端末で pullリクエスト等が通ら無くなります。
そのため端末ごとに設定をする手間が増えます。ご注意ください。
keyの作り方を参考しssh keyを作成してください。
作成後は適切なフォルダー内に移動させます。
# Almalinux
mv ided25519 ~/.ssh/
設定ができたらテストをします。
ssh -T [email protected]
# 正常に接続ができたらこれが返って来ます。
# Hi USER! You've successfully authenticated, but GitHub does not provide shell access.
これで煩わし作業無くgit pushをするだけで更新が可能になりました。
実運用する場合はこのgit actions用のみのアカウントを作成した方が良いと思います。
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください