Soptq

Soptq

Probably a full-stack, mainly focusing on Distributed System / Consensus / Privacy-preserving Tech etc. Decentralization is a trend, privacy must be protected.
twitter
github
bilibili

神奇なZEIT Debugの経験を記録する

事情は次のようになっています。皆さんもご存知の通り、私のメインブログは、毎回ビルドする際にいくつかの動的なコンテンツと最適化が関わるため、ZEIT のサーバーにホストされています。具体的には、ビルド時にはスクリプトを使用してローカルのNodeJSサーバーを起動し、Jekyllが RPC を介して指示や結果を呼び出します。私はランダムにNodeJSサーバーにポート番号5001を設定しましたが、この設定は 1 年以上安定して動作しています。

そして、約 1 年前から、ZEIT はブログのビルドプロセスでランダムにエラーを報告し始めました。内容は HTTP リクエストが HTTPS サーバーに送信できないというものでした。私は困惑しました。まず、私の NodeJS サーバーは HTTP サーバーであること、そしてそれはビルドプロセス中のローカルの一時的なサーバーであり、オンラインになるとこのサーバーは閉じられるため、HTTP を使用する必要がないということです。しかし、これらは重要ではありません。重要なのは、ブログが正しくビルドされてオンラインにならなかったことです。そのため、原因を調査し始めました。最初に考えたのは、何らかの理由でExpressが強制的に HTTPS をデフォルトに設定しているのではないかということでした。理論的にはそれはあまり可能性がないですが、現在のソフトウェアはセキュリティのために何でもできるようになっています。しかし、調査した結果、そのようなことは起こっていないことがわかりました。それから、ZEIT がセキュリティのためにすべての HTTP 接続を HTTPS にプロキシしているのではないかと考えました。

そのため、ZEIT のエンジニアにメールを送る前に、私のメールの主張を裏付けるために最小限の再現可能なプロジェクトを作成することにしました。しかし、最も奇妙なことが起こりました。同じ設定、同じバージョンで、私のブログのビルドプロセスではエラーが発生しますが、新しいプロジェクトでは何の問題もありません。さらに、私のブログのビルドエラーは安定してトリガーされるわけではなく、最初は 10% の確率でトリガーされ、後には 90% の確率でトリガーされますが、いずれも 100% ではありません。この時点で、私は少し崩れそうになっていました。

その後、何度も試行錯誤しました(何が間違っているのかさえわからないので)。突然、頭が働かなくなり、ポート番号を5001から4001に変更しました。すると、ビルドが成功しました...

つまり、実際には私のサーバーは常に正常に起動しておらず、ZEIT には常に5001のサービスが実行されていました... しかし、なぜ5001ポートが占有されていることがドキュメントに書かれていないのでしょうか?私は全世界を検索しても、ZEIT が5001ポートを占有する情報は見つかりませんでしたし、しかもランダムに占有するのですか?時々占有され、時々占有されないのですか?

したがって、私が約 1 年間悩まされていたこの問題は、ポートを変更することで解決しました...

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。