【エックスサーバー】個人開発とブログ運用を省力化。GitHub ActionsとDiscordで通知・バックアップ・デプロイを完全自動化した話

個人開発とブログ運用の省力化。GitHub ActionsとDiscord Webhookで「通知・バックアップ・デプロイ」を完全自動化した話 テック・開発
この記事は約6分で読めます。

現在、このブログ(どんまうんど)のほかに、Wikiや各種Webツールなど複数のサイトを運用しているどんまです。

複数サイトを運用していると、どうしても次のような課題が出てきました。

  • ブログ: お問い合わせにすぐ気づけない。万が一サイトの復旧が困難な場合の対応……
  • Wiki: 荒らし対策、投稿通知、ページのバックアップなど……

これまではエックスサーバーのみのバックアップ機能に頼っていましたが、リスク分散と運用の快適さを求めて、「GitHub Actionsによる自動化」と「Discord Webhookへの通知集約」を導入しました。

今回は、その具体的な取り組みと「運用がどれくらい楽になったか」をお話しします。

この記事には少し専門用語が出てきますが、ざっくり以下のようにイメージしてもらえれば大丈夫です!

  • Discord Webhook: ブログやWikiの更新・問い合わせをDiscordへ通知する仕組み
  • GitHub Actions: 設定した処理(ファイルのアップロードやダウンロードやデプロイ)を自動でやってくれるロボット
  • CI/CD(自動デプロイ): コードを更新したら、自動で本番サイトに反映させる仕組み
  • SSH: サーバーへ安全にアクセス(遠隔接続)する仕組み
  • Cron: 「毎日◯時」のように指定したスケジュールで自動実行する機能

散らばる通知をすべてDiscordへ集約する

まずは「確認の手間」をゼロにするため、あらゆる通知を日常的に常駐させているDiscordに集めました。

DiscordのWebhookを利用します。

ブログのお問い合わせやコメント通知

お問い合わせフォームからメッセージが届いた際やコメントが投稿された場合、Discordの専用チャンネルへ即時送信されるように設定しました。

通知の仕組みはWordPressのプラグイン自作してます。好みにカスタマイズできるので自作がお勧めです。

スマホでもPCでもリアルタイムで通知が入るため、メールボックスに埋もれて返信が遅れるといったトラブルが完全にゼロになりました。

もともとメールに受信しており、メールボックスの振り分けはしているのですが、メール自体の通知は切っているので直ぐに気が付かないんですよね。

お問い合わせが沢山きても困るかもですが、それは贅沢な悩みでいっぱい来るようになってから考えます。

Wikiの更新・編集ログの可視化

Wikiで新しいページが作成されたり、既存ページが編集されたりしたタイミングで、更新内容がDiscordの専用チャンネルへ即時送信されるように設定しました。

「今何が更新されたか」が一目でわかるだけでなく、万が一荒らし行為や不審な編集があった場合でも、リアルタイムで察知して即座に対応できるようになりました。

GitHub Actionsで「バックアップ」と「デプロイ」を完全自動化

通知の整理と合わせて、手作業でやっていたバックアップや公開作業も自動化しました。

定期ジョブによる自動バックアップ

GitHub ActionsのCron(定期実行)を利用し、サイトやWikiのデータ・リポジトリを定期的に自動バックアップするワークフローを作成しました。

サーバー障害やデータ破損が起きても、GitHub上に常にバックアップが存在するため、リスク分散としてかなり安心感があります。

また、Wikiの記事はテキストデータなのでGitHubと相性がかなり良いです。そのため、毎日自動でバックアップを取るようにワークフローを構築しています。

公開しているプログラム本体はもちろん、どんまうんどの記事データなどが保存されているデータベースも定期的にバックアップしています。

ブランチ更新時の自動デプロイ

コードやコンテンツを更新して git push(mainブランチ更新)するだけで、本番環境へ自動でデプロイされるCI/CD環境を構築しました。
手動でFTP接続したり、サーバー上でコマンドを叩いたりする手間を撤廃しています。

Visual Studio Codeで編集、GitHubのコミットを行うだけでサーバに反映できるので、FTP専用アプリを入れたりする必要もなくなるので、かなり運用が楽になりました。

実行結果(成功・失敗)もDiscordへ通知

GitHub Actionsのワークフロー実行結果も、Discordへ飛ぶようにしています。
正常にバックアップやデプロイが完了したか、エラーが起きていないかを、GitHubの画面を開かずにDiscord上で一発確認できます。

エックスサーバーはSSHの設定に注意

実は今回の構築で一番ハマりやすかったのが、エックスサーバーとGitHub ActionsをSSH接続する部分でした。

自動デプロイを組むには、以下の手順が必要です。

  1. エックスサーバー側でSSH設定をONにし、公開鍵・秘密鍵を発行する
  2. GitHubリポジトリのSecretsに、秘密鍵(SSH_PRIVATE_KEY)やポート番号(10022)を登録する
  3. エックスサーバーの「国外IPアクセス制限」を解除する

特に「3」が注意ポイントで、GitHub Actionsのサーバー(IPアドレス)は海外扱いになるため、エックスサーバー側で国外からのSSHアクセス制限を有効にしていると、デプロイ時に接続が弾かれてしまいます。

本当は国外アクセス制限をONにしてセキュリティを高めたかったのですが、ここを許可しないとCI/CDが回らないため、泣く泣くオフ(許可)に設定しました。

設定自体は少しハードルが高いですが、ここさえ乗り越えれば「Visual Studio Codeでコミットするだけで即本番反映」という最高の環境が手に入ります!

やってみて実感した「省力化」の成果

この構成にしてから、サイト運用におけるストレスや手作業が劇的に減りました。

  • 確認コストがほぼ「ゼロ」になった
    管理画面やメールボックス、サーバーパネルを巡回する必要がなくなり、すべてDiscordを見るだけで完結します。
  • 作業ログが勝手に蓄積される
    Discordのチャンネル自体が「サイト運用のタイムライン」になるため、過去の変更履歴やバックアップログを後から遡るのも超楽になりました。またGitHubに編集履歴が残るので、復旧も簡単です。
  • コンテンツ作成や開発に集中できる
    バックアップやデプロイ、監視といった雑務をシステムに任せられるので、本来やりたい開発や記事執筆に専念できます。

でも自動化組むのが難しいんでしょ?

おそらく「自動バックアップやDiscord通知を実装するのはハードルが高いのでは?」と思っている方も多いはずです。正直、自分もこのシステムを1から手打ちで作るのはかなり大変です。

しかし、今はAI(ChatGPTやClaudeなど)があるので余裕で解決できます。

実際、GitHubのシークレットキー(Secrets)の登録方法や、GitHub Actionsの記述(YAMLファイル)はすべてAIに聞けばコードを作ってくれます。SSH接続で詰まった場合も、エラーログや設定手順をAIに相談しながら進めれば問題ありません。

自分も慣れている部分はありますが、1つのサイトあたり20分ほどで設定が完了しました。

個人的なオススメは、Visual Studio Code上で作業が完結するように GitHub Copilot や Claude Code などのAIプラグインを入れて、Agent機能に設定・構築まで任せてしまう方法です。

どんまうんどやWikiのコードをそのまま掲載するのはセキュリティ上好ましくないため、現在公開している自作ツール(Tools)のデプロイワークフロー(YAML)を実例として載せておきます。設定の参考にしてみてください。

tools/.github/workflows/deploy.yml at main · donnma777/tools
どんまが作成したツール集. Contribute to donnma777/tools development by creating an account on GitHub.

まとめ

「サーバー頼みの管理」から「GitHub Actions × Discord Webhook」による一元管理へ移行したことで、個人開発とブログ運用の作業効率・安全性が段違いに上がりました。

一度仕組みを組んでしまえば、その後の運用コストが大幅にダウンします。
複数サイトを運用している方や、通知・バックアップの手間に悩んでいる方はぜひ試してみてください!

Discordサーバ公開しています

どんまうんどの投稿やWikiの投稿通知受け取りたいという方は是非Discordサーバを公開しているので登録してみてください!

もちろん自由のトーク欄もあります。ぜひ活用してください!

Discordサーバー「どんまうんど総合」に参加しよう!
Discordでどんまうんど総合コミュニティをチェック! 1人のメンバーと交流し、無料の音声・テキストチャットを楽しみましょう。

コメント

タイトルとURLをコピーしました