このプロジェクトについて
このリポジトリは、無料のRender Webサービスのためのキープアライブメカニズムを提供します。GitHub Actionsワークフローと小さなNode.jsスクリプトを組み合わせ、設定されたターゲットURLに定期的なHTTP GETリクエストを送信することで、サービスが非アクティブ状態からスリープするのを防ぎます。
解決する問題: GitHub Actionsの無料スケジューラは、サーバーが混雑しているときに5分ごとのような短いcron間隔を遅延させ、実行間に隙間が生じる可能性があります。Render無料ティアのサービスは約15分間トラフィックがないとスリープするため、ピングが失われるとコールドスタートの原因となります。
READMEに記載されているアプローチ:
- アクティブな14分間セッション: 各GitHub Actionsジョブは約14分間実行され、4分ごとにピングを送信します(0分、4分、8分、12分の時点)。
- 複数のcronトリガー: `*/10 * * * *` や `5,15,25,35,45,55 * * * *` などのスケジュールを使用し、新しいランナーセッションが継続的に起動されるようにします。
- 目標は継続的なカバレッジです。アクティブな14分間のウィンドウ内で4分ごとにピングを送信することで、15分の非アクティブ閾値を下回るようにします。
機能:
- Node.js 22のネイティブAPI: 組み込みの `fetch()` と `node:timers/promises` を使用し、外部のnpm依存関係はありません。
- リトライロジック: ネットワークエラーや非2xxレスポンス時に最大3回、10秒遅延でリトライします。
- コンソール出力: ISO UTCタイムスタンプ、HTTPステータスコード、ミリ秒単位のレスポンス時間、成功/失敗結果、セッションサイクル数をログ出力します。
- 手動トリガー: `workflow_dispatch` による即時実行をサポートします。
設定: ターゲットURLは `ping.js` の冒頭で `TARGET_URL` として定義されており、現在はRenderホストのエンドポイントを指しています。エンドポイントを変更するには、この定数を編集して変更をプッシュする必要があります。
デプロイ: READMEでは、更新されたファイルをメインブランチにコミットしてプッシュするよう指示しており、その後GitHub Actionsがアクティブなピングセッションを開始します。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.