ブログを新調しました

ファイアウォールが読めなくてサーバー再起動で治ることに気がつくまで1日かかった(1敗)

経緯

これまでのブログはHugo使ってmarkdown書いて手でデプロイしていた(正確にはgitのhookを使ったりしたけど権限の関係で無理だった)けど、更新のハードルになるしんどい要素がいっぱいあって、静的サイトジェネレータ(SSG)自体にしんどみを感じていた。

  1. 記事をいちいちgitでcommitするのは怠い
    1.1. 出先とかで執筆環境(特にHugoのビルド環境)を持ち合わせてないときに終わる
  2. 単なる記事のmarkdownにHugo(というかSSG全体)特有のメタデータを突っ込んだりしないといけないのは怠い
    2.1. タグとかカテゴリとか時刻はともかく下書き指定を入れるのは...
  3. デプロイフローが手なのでカス
    3.1. 自明

3はVercelだか何だかの自動ビルドを使えばいいと思うけど(使ったことないが...)2や1を解決するのはサイト内編集なんじゃないの、と思ってて、GROWIをブログ代わりに使うか、最悪時間かけて自作...と考えていた。

そんな中最近お世話になっている(?)mohemohe氏のparakeetが良さげだったので使ってみることに。

ミスった点一覧

アドカレの投稿が遅れたのはこの辺のせいなので許して(責任転嫁)。

ApacheのnamedvirtualhostはCloudflareに引っ掛けると正しく振り分けられなくなる

Webは未だにApacheを使っているのだけど、CloudflareのProxy(オレンジの雲のアレ)を使ってる状況だと、subdomainを切って(例:blog.miwpayou0808.info)virtualhostに割り当てようとしてもデフォルトのvirtuahost(例:miwpayou0808.info)に飛んでいってしまう問題があった。

ログ

答えはCloudFlare and Apache Virtual Hosts - General - Cloudflare Communityで、namedvirtualhostを振り分けるのにDNS解決を使うので、Cloudflareに引っ掛けてあると解決しようとしてもCloudflareのIPが降ってきて自IPが入らなくなるからだった。

実際apachectl -SするとIP Ranges | Cloudflareにある範囲のIPが出てくる。

解決方法としては/etc/hostsとかのDNSより上位(上位かどうかはlinuxの/etc/nsswitch.confに依存するけど)の名前解決方法でsubdomainを自IPで解決させるように書いておくこと(例160.16.102.237 blog.miwpayou0808.info)。

関係はないがもしRequireでIP絞ったりしてる場合はapache - virtual host not working when cloudflare is enabled - Stack Overflowとかを見るといい(多分)。

mongoDB初使用でもたつく

DBはMongoDB Atlasの無料枠(M0 Sandbox)で十分足りるという話をきいていたので、実際にアカウント作って試してみた。

なお実際にアドカレの記事を書き終わった時点で193.5KBなので、数百記事は余裕そうな気がする。

メトリクス

Cloud ProviderはAtlasで使える3社(AWS,GCP,Azure)の中で東京リージョンが唯一使えるGCPで、クラスタ名は適当に設定する。もっとも無料枠で使う分には選べるオプションなんてそんなに多くないはずだが。

あとはAtlasのWebUIが懇切丁寧に教えてくれる...はずなんだけど、
Connect dbのところでNode.js2.2.12 or laterを選ばないとconnection stringにReplicaSetのアドレスが出なくてReadme通りに行かなくなる。Go製だし最新verでいいだろとたかを括っていた...

ダイアログ

結局いろいろ読んだわけだけども...

ずっとno reachable serverになっていた。

スタックトレース

mongoのクライアントを入れて繋ぐと普通につなげてしまったので、Go側の問題かと思いgo - MongoDB Atlas Golang mgo package "No reachable servers" error - Stack Overflowを見ると、mongoDB v4.0以上はgo-bongo/bongo: Go ODM for MongoDBがwrapして使ってるmgoのサポートが「実験的」になっていたので、Atlasのmongoバージョン選択を見た。けどこれは無料枠ではv3.6を使えないので「無料枠で十分」という話に反してしまう。

ここでおたくに「ファイアウォールの問題では?」とふと訊かれて試しにfirewall-cmdを叩いてみると...

firewall-cmd

こののサーバーは定期的にsystemd-timerでパッケージの更新を走らせるためカーネル更新か何かが原因でファイアウォールの追加モジュールが読めなかったか何かかと思いサーバーを再起動してみると無事接続できた。ここまでかかったのが丸1日だったという話でした。なおこのエラーについて真実がわかる方はMisskeyDiscordにこっそりDMしてね。

  終
制作・著作
━━━━━
 miwpayou