NAPOAN.COM by マイクラ思考 
/ UPDATE :

変態的負荷分散でNextjsとWordPressを混ぜたが結局WP単体に戻した話

俺はこの一ヶ月、ありとあらゆる手段でゲームブログを「モダン」な形に再構築しようとした。しかし、「費用」だけはどうしようもなかった。すべてをrevertすることにした。

もとの構成

  • Linode (VPS)に5ドル
  • CloudflareのAPOに5ドル
  • Vercel無料プランでOG画像生成を動かす

以上。非常にシンプルな構成で、この上にWordPressをTrellisを使ってデプロイしていた。

なぜ変えたくなったか

  • M1でTrellisが依存するVirtualBoxが動かない
  • よってテーマ開発ができない
  • CMSとフロントを分離したい
  • Nextjsで作りたい
  • GCPで柔軟に運用したい

2021年12月17日、リニューアル開始

https://github.com/sasigume/sasigu-me/commit/e4a4a6889ce10864ed5e9beb664b59362dd803ff

GCPのロードバランサーに「パスごとのサービス切り替え」機能があることを知り、これを使えば「WordPressを部分的にNext.jsにして、徐々にリプレイスしていく」ことが可能だと考えた。

具体的には、

  • Cloud SQLでDB運用
  • Cloud RunでCMSのStrapiとNext.jsとOG画像生成を動かす
  • Compute EngineでWordPressを動かす
  • Cloud Load Balancingで徐々にリプレイス

を考えていた。より具体的には、

  • strapi.sasigu.me がCMS
  • sasigu.me/* がWP
  • sasigu.me/p/[slug] がNextjs

という構成にした。

ARM64と闘ったクリスマス

昨年のクリスマスはCPUアーキテクチャとの闘いだった。

まず、M1 Macに買い替えたせいでいちいちアーキテクチャを気にする必要が出てきた。

M1のDockerでNodeアプリを動かす場合、画像処理系のライブラリでつまづく。かといってQEMUでx86_64を動かすとパフォーマンスが大変悪い。しかもRAM8GBだったので、常に5GB以上のスワップ領域が発生していた。SSDの寿命に詳しくないのでなんとも言えないが、安心できる状態ではなかった。

https://github.com/sasigume/sasigu-me/commit/2d00d4f962c0a1aca1e6f40f5a3e0c99b53cd00b

そこで、丸一日使ってGCPからAWSに乗り換え、ARM64イメージが使えるECS + FargateでCloud Runをリプレイスしようとした。しかし、Blue/Greenデプロイメントの切り替えがなかなかうまくいかず、ECSで運用するのはあきらめることにした。上記のコミットではWordPressだけEC2に残しているが、後日WordPressもCompute Engineに戻した。

Cloud Functionsと闘った年末

https://github.com/sasigume/sasigu-me/commit/31542022e5ecd6d82d4de2c3df3bb88c934bca2a

App Engineは費用が高額になるのではと考えて、部分的にCloud FuncionsでNext.jsを動かすことにした。

Load Balancingは成功し、ちゃんとパスごとにサービスを分けられたものの、静的ファイルの配信の最適解が見つからず、断念した。

Trellisとお別れした正月

https://github.com/sasigume/sasigu-me/commit/5da2473fe650151422146e43b9036d5e0d73c940

WordPressをTrellis+VagrantではなくDockerだけで動かすことに成功。8月から使い続けてきたTrellisと一旦お別れした。

これで、月5ドルのVPS代と、同じく月5ドルのCloudflare代が不要になった。

Nginxとphp-fpmを1コンテナで動かした結果

LitespeedやNginxも試したんだが、結局Apacheになった。Cloud Runで動かす都合上、1コンテナで動かす必要があるのである。

無理やりNginxとphp-fpmを1コンテナで動かした結果、レスポンスが途中でぶった切れたり、とにかく碌なことがなかった。

年明け、気が早すぎてWordPressをポイしてしまう

https://github.com/sasigume/sasigu-me/commit/c89ea0177f90f6c3f4f17641c4df5e948dde5b07

RAM8GBが嫌になりRAM16GBのiMacを買った。ほぼ同時に、WordPressを放棄してしまった。

冷静に考えて、全く発想の違うフレームワークを1ドメインで扱うなんて無理だ。技術的には可能だったが、自分でiframeを生成するタイプのプラグイン が非常にややこしくなる。

例えば「Auto Amazon Links」というプラグインがあり、記事内にAmazonのiframeが埋め込まれるのだが、このHTMLをそのままNext.jsに持ってきた場合、/wp/*だけWordPressにしてロードバランシングする、という変態構成にしないといけない。

実際にそういう構成で数日運用してみたが、考えることが多すぎて、途中でWordPressをシャットダウンした。

一日だけ、Next.jsをCloud RunからApp Engineに切り替えたが、「Out Bandwidth Japan」が1.69GiBで12円請求されただけだった。

完全にNext.jsに切り替えたのに合わせて、「質問投稿コーナー」みたいなのを作ってみた。が、やめた。モチベーションが続かなかった。

この時点で費用が大変高額になる

Cloud Load Balancing前提で構成してしまったため、「最低利用料金」を払い続けることになった。

その結果、一週間で負荷分散だけに300円かかり、Cloud SQLとRunと合わせると、広告収入の半分をGCPに持っていかれることになった。

面倒になってVercelに戻した

https://github.com/sasigume/sasigu-me/commit/ad45f9e9abafc24c14cdada9e05020fdb1f880de

コンテナ関連でとんでもない時間を浪費したため、NextjsとOG画像生成はVercelに引っ越した。

上記と比較しづらくて申し訳ないが、Load Balancingがなくなったおかげで、費用の大半がCloud SQLになった。(Static IPは開放を忘れていた。みんなも気をつけよう)

これで、構成が

  • Cloud SQLでDB運用
  • Cloud RunでCMSのStrapiを動かす
  • Compute EngineでWordPressを動かす
  • VercelでNext.jsとOG画像生成を動かす

という状態になった。が、それでも「月5ドルのVPS代と、同じく月5ドルのCloudflare代」より高い。そして何より、GCPの価格レポートを毎日確認しないと安心できない

本末転倒だが、趣味のサイトにかける費用は、柔軟さより安定さを求めたほうがいいと改めて痛感した。

はてなブログPROを思い出す

1月15日、「はてなブログに全部統一する」という究極の手段を思いついた。

もともと「バックアップ版」としてはてなブログバージョンも作っていたし、一度は使った手段だ。

ということで、構成は

  • はてなブログPRO
  • Vercel無料プランでOG画像生成を動かす

だけになった。ということで、データベースとStrapiを放棄し、Cloud SQLとCloud Runの費用がゼロになった。

結局、最初の状態に戻った

個人の趣味ブログなら、はてなブログが大大大正解である。

上記に書き連ねた苦労は、はてなブログなら関係ない。何から何までおまかせすればいいのだから。

しかし、アフィリエイターはその限りでない。

はてなブログはNext.js以上に広告と相性が悪い。 広告スロットを自由に配置できないからだ。1日だけだが、PVに対する収益が絶望的に下がった。

1日で判断するのは早計かもしれない。しかし、俺がはてなブログで苦しむのは二回目なのだ。

ループものです

ネタバラシをすると、「もとの構成」は大嘘で、その前に「WordPressからはてなブログ」に移行していたのだ。

つまり、

  1. WordPress
  2. はてなブログ
  3. WordPress
  4. Nextjs
  5. はてなブログ

というのが正確な順番だったのだ。

悲しいが、収益は死活問題だ。はてなブログへの帰還は、たった2日でrevertした。

今は振り出しにループして、

  • Linode (VPS)に5ドル
  • CloudflareのAPOに5ドル
  • Vercel無料プランでOG画像生成を動かす

になった。何をやっているんだろう。


ちなみに、これを書いているのはゲームブログではなく、Adsenseのない個人ブログである。

はてなに乱暴に統一する際、この個人ブログをごちゃまぜにしてしまった。面倒くさかったのだ。しかし、収益に関する話は収益のないブログでやるしかない。個人ブログは元通りに分離し、はてなブログPROは、個人ブログの言論の自由を保証するためだけに払い続けることにした。

以上が、優柔不断な男がいかにブログをめちゃくちゃにしたかの記録である。俺、PMとか絶対やっちゃだめだな…

Tweet

コメント

記事の内容が最新のものと異なる場合があります。ご了承ください。

コメントを残す

メールアドレスが公開されることはありません。