萌えハッカーニュースリーダー

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

出典: https://medium.com/detee-network/automating-website-deployment-3ffe257e4c7e
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

正解!…って、違うぞ。自動でIssueを解決するロボットを作るのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search