結論:自作の「FIREトラッカー」に新機能を追加して本番環境にデプロイしたところ、pm2のプロセスクラッシュ、fail2banによる自己IPのBAN、クラウド側のファイアウォール設定という3つの問題が同時に発生しました。個人開発で本番障害に対応した際の記録です。
FIREトラッカーに機能を追加した
FIRE健康診断(自作のFIRE達成度シミュレーター)に、以下の機能を追加しました。
- JPX公式のJ-Quants APIで国内株、Yahoo Financeの非公式APIで米国株の価格と円換算を自動取得
- 配当金ベースの不労所得予測機能(成長率スライダーでシミュレーション、Barista FIREの想定収入とも連動)
- 目標年齢でFIREするために必要な支出削減・積立額を自動算出するアドバイス機能
あわせてGoogle Analytics(GA4)も導入しましたが、新しいサーバーのDNS設定が完了しておらず、計測が正しく動いていませんでした。
本番デプロイで3つの障害が同時に発生した
機能追加後、本番サーバーにデプロイしたところ、画面が「読み込み中」のまま止まってしまいました。

調べたところ、Node.jsの管理ツールpm2のプロセスがクラッシュしていました。再起動しようとSSH接続を試みましたが、今度は接続自体ができません。

原因は、ログインを何度か間違えたことで、サーバーの防御システム「fail2ban」が自分自身のIPアドレスを不正アクセスとみなしてBAN(遮断)していたことでした。

以下のコマンドをroot権限のユーザーで実行することで解除できます。
fail2ban-client set sshd unbanip <あなたのIP>
IP制限を解除してブラウザをリロードしましたが、まだ外部からアクセスできません。原因はクラウド側の「セキュリティグループ(ファイアウォール)」の設定で、HTTP/HTTPSのポートが閉じられていたことでした。
- pm2のプロセスクラッシュ
- fail2banによる自己IPのBAN
- クラウド側のファイアウォール設定ミス
3つはそれぞれ独立した原因でしたが、連鎖するように同時に発生したため、1つずつ切り分けて解決する必要がありました。
まとめ
今回のトラブルで、原因を切り分けて対応する経験が積めました。個人開発では、コードを書く力だけでなく、こうした運用トラブルに一人で対応する力も必要になります。


コメント