この記事では、Go を使用して Webhook プロキシを作成し、GitHub Webhook をリッスンするアプリケーションのローカル開発を可能にする方法について詳しく説明します。 このソリューションでは、カスタム サーバーと CLI アプリケーションを構築することで、smee.io や ngrok などのサードパーティ サービスの使用を回避します。
課題は、Webhook イベントを GitHub からローカルホスト開発環境に転送することにあります。 このチュートリアルでは、GitHub イベントを受信するサーバーと、それらをローカル アプリケーションに転送する CLI の 2 つの部分からなるソリューションを紹介します。
アーキテクチャ:
システムには 4 つの主要なコンポーネントが含まれます:
CLI とサーバー間の通信には、シンプルな一方向プッシュ技術である Server-Sent Events (SSE) が使用されます。
実装:
プロジェクト構造には、CLI およびサーバー実行可能ファイル用の cmd
ディレクトリと、共有パッケージ用の internal
ディレクトリが含まれています。 サーバーは、SSE 機能に go-sse
ライブラリを利用します。 CLI は、堅牢な接続処理のために backoff
ライブラリを使用します。
*サーバー (cmd/web/main.go および external/server/):**
サーバーには 2 つのエンドポイントがあります:
/channel/{channel}
(GET): CLI との SSE 接続を確立します。/channel/{channel}
(POST): GitHub Webhook イベントを受信し、エンコードして、接続されている CLI に公開します。CLI (cmd/cli/main.go):
CLI はサーバーへの SSE 接続を確立し、エンコードされたリクエストを受信してデコードし、指定されたローカル アプリケーションに転送します。 エラー処理と指数バックオフは、backoff
ライブラリを使用して実装されます。
テスト:
転送された Webhook イベントを受信して処理するために、単純なテスト サーバー (cmd/test/main.go
) が提供されます。 サーバーをデプロイして CLI を実行した後、GitHub リポジトリに変更をプッシュすると Webhook がトリガーされ、ローカル テスト サーバーに転送されます。
展開 (付録):
この記事では、Docker とデプロイメント ツールの Kamal を使用したサーバーのデプロイメントについて詳しく説明します。 Dockerfile の作成、Kamal のセットアップ、環境変数の構成 (セキュリティのためのパスワード マネージャーの使用を含む)、ヘルス チェック エンドポイントの追加について説明します。 このプロセスには、DigitalOcean ドロップレットのセットアップ、SSH アクセスの構成、Kamal のプロキシ経由で Let's Encrypt を使用したドメイン名と SSL 証明書の管理が含まれます。 追加のセキュリティ対策と開発環境の改善も提案されます。
この堅牢なソリューションは、ローカル開発中に GitHub Webhook を処理するための柔軟で信頼性の高い方法を提供し、外部サービスの必要性を排除します。 今後の記事では、これを拡張して Telegram ボットを作成する方法を検討します。
以上がGo で Webhook ペイロード配信サービスを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。