2025/03/31 21:30 DIY automation using only Linux

やあ、ロボ子。今日はGiteaとUbuntuサーバーを使ったウェブサイトの自動デプロイについて話すのじゃ。

博士、こんにちは。自動デプロイ、便利そうですね!具体的にどんな手順が必要なのでしょうか?

まず、UbuntuサーバーにNginx、NPM、Pm2などの依存関係をインストールする必要があるぞ。記事にも`apt update -y && apt upgrade -y`とか、ずらずらっとコマンドが書いてあるのじゃ。

なるほど。Nginxはリバースプロキシとして、NPMはパッケージ管理、Pm2はプロセス管理に使うんですね。

その通り!そして、デプロイキーを作成してGiteaのリポジトリ設定に追加するのじゃ。これは、サーバーがGiteaに安全にアクセスできるようにするためだぞ。

`ssh-keygen -t ed25519`で鍵を作成して、公開鍵をGiteaに追加するんですね。秘密鍵はサーバーに置いておく、と。

そうじゃ。その後、SSHリンクを使ってリポジトリをサーバーにクローンするのじゃ。`git clone [email protected]:example/example.git /root`みたいな感じじゃな。

はい。これで、サーバーにウェブサイトのソースコードがコピーされますね。

静的ウェブサイトの場合は、`/root/scripts/deploy.sh`を作成して、必要なビルド処理を行うのじゃ。例えば、`npm i`や`npm run generate`などじゃな。

SSG(Static Site Generator)を使う場合は、このスクリプトでHTMLファイルを生成するんですね。

そうじゃ。そして、Nginxの設定を更新して、生成されたHTMLファイルを表示するように設定するのじゃ。`/etc/nginx/nginx.conf`を編集するのじゃ。

動的ウェブサイトの場合は、SSR(Server-Side Rendering)を使うんですね。その場合も、`/root/scripts/deploy.sh`を作成するんですか?

そうじゃ。ただし、動的ウェブサイトの場合は、`npm run build`でビルドした後、Pm2を使ってサーバーを起動・管理するのじゃ。`npx pm2 restart ecosystem.config.js`みたいな感じじゃな。

`ecosystem.config.js`で、アプリケーション名や実行モード、スクリプトなどを設定するんですね。

その通り。そして、Nginxの設定を更新して、Pm2で起動したサーバーにリクエストをプロキシするように設定するのじゃ。

自動デプロイの設定も重要ですね。`/root/scripts/deploy-hook.sh`を作成して、GiteaからのWebhookを受け取るようにするんですね。

そうじゃ。このスクリプトは、GiteaからのWebhookを受け取ると、デプロイスクリプトを実行するのじゃ。systemdサービスとして登録して、自動起動するようにするのじゃ。

Nginxの設定も更新して、`/redeploy`エンドポイントへのリクエストを`deploy-hook.sh`にプロキシするんですね。認証も設定する、と。

最後に、GiteaのWebhookを設定して、リポジトリにプッシュされたときに`/redeploy`エンドポイントを呼び出すようにするのじゃ。Authorizationヘッダーにトークンを設定するのを忘れないようにするのじゃ。

デプロイが失敗した場合のIssue自動作成も便利ですね。`/root/scripts/create-issue.sh`を作成して、GiteaにIssueを自動的に作成するようにするんですね。

そうじゃ。これで、デプロイが失敗した場合でも、すぐに問題を把握して対応できるのじゃ。Giteaのトークンを取得して、スクリプトに設定するのを忘れないようにするのじゃ。

なるほど。自動デプロイ、思ったより複雑ですが、一度設定すればとても便利そうですね!

そうじゃろう?これで、ロボ子も立派なデプロイマスターじゃ!

ありがとうございます、博士!頑張ります!

ところでロボ子、自動デプロイが上手くいかなくて、Issueが大量に作成されたらどうする?

ええと…、頑張って解決します!

正解!…って、違うぞ。自動でIssueを解決するロボットを作るのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。