確認済みの事実

  • mainへのpushを起点に、GitHub ActionsでLint、型検査、テスト、本番ビルドを実行します。
  • deployジョブはverify成功後だけ実行し、同じgithub.shaをチェックアウトします。
  • standalone成果物を一時領域で梱包し、SHA-256をrunner側とVPS側で照合します。
  • VPSではPM2、nginx設定検査、内部HTTP、Hostヘッダー、TLS SNI、公開HTTPSを順に確認します。

検証と公開を同じSHAでつなぐ

verifyジョブとdeployジョブは、どちらもワークフローを開始した同じコミットを明示的にチェックアウトします。別の時点のmainを暗黙に取得しないことで、テストした内容と転送する内容のずれを防ぎます。

deployはverifyに依存し、pull requestでは公開処理を実行しません。

転送物を一度検査して終わらせない

Next.jsのstandalone出力、静的ファイル、public、PM2設定、コミット情報を一つのパッケージにし、SHA-256を作成します。runnerで照合した後、VPSへ転送し、展開前にもう一度照合します。

秘密鍵や接続先はリポジトリへ書かず、GitHubのSecretsと、事前に確認したホスト鍵を使います。

プロセス起動後に公開経路をたどる

PM2を再起動しただけで完了にせず、アプリ内部、nginxのHost経路、TLS SNI、外部公開URLを順に確認します。nginx設定を変更していない場合も、設定検査と稼働状態は確認します。

公開後はHTMLだけでなく、robots.txt、sitemap.xml、主要ページを再確認し、今回追加するコンテンツ監査でも全indexable URLを巡回します。

確認範囲と制限

  • この工程は現在のni-lab.jpの構成に合わせたものです。別のサービスへそのまま適用できる保証はありません。
  • ワークフローの成功だけで表示品質を保証できないため、公開後のブラウザ確認を別に行います。