ブログを再構築しました
Posted At:
どうも、mrtskaです。
クリスマスに前々からやりたいと思っていたブログの再構築作業なんかをやっています。
かなり前に書いた記事では、WorkPressから自作のCMS(ASP.NET Core 2.1製)に作り変えましたが、今回はASP.NET Core 2.1からASP.NET Core 3.1に変更すると共にあまり気に入っていなかった機能を作り変えたり足りていなかった機能を足したりしました。
今回の改修を本格的に初めたのは今年(2020年)の4月からでした。
もともとASP.NET Coreをほぼ初めて触ったということもあり、コードがそもそもイケてなかったため1から作り直すことは確定していました。
その結果、削除が18000行、追加が30000行の大規模な改修(というか作り直し)になりました。
そんなこんなで地道に作り直し作業を進めていてほぼ完成にたどり着いたのがクリスマスで、約8ヶ月ほど掛けてやっと完成したのでした。(正直めっちゃしんどかった)
この記事では、作り直してどこが変わったのかなどを説明できればと思います。
変更点 (見える部分)
今回の見える部分の改修で一番大変だったのは下記の2つです。
- 検索
- レスポンシブ対応
逆にこれ以外にはほとんど変更はありません。(言語切替ボタンがフッターからヘッダーに移動したくらい)
そもそもの話、個人ブログに全文検索機能が必要か?という話はありますがElasticsearchを使ってみたかった&勉強したかったというのが実装した理由の99%です。
仕事でも使う可能性全然ありますし、覚えておいて損はないですね。
ただ、現時点でレートリミットが厳し目に設定されているのであんまり使い物にならないかもしれません。
もっと緩和してくれ!という声があれば緩和しようと思います。
レスポンシブ対応も今回の改修で初めて追加した機能です。
そもそも私がスマホでもPC版サイトを見るので正直実装するか迷ったのですが、昨今のエンジニア界隈を見ているとレスポンシブ対応くらい出来ないとダメだよなと思ったのとGoogle先生がなかなかうるさかったので実装することにしました。
_人人人人人人人人人人人人人人人人人人_
> ページがモバイルフレンドリーではありません <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
検索もレスポンシブも作り終わった後にはそこそこ学びがあったので良かったなと思っています。
変更点 (見えない部分)
技術的な部分やインフラ面はかなり変更を加えました。
- ASP.NET Coreを2.1から3.1に変更
- データベースをSQLiteからMariaDBに変更
- Elasticsearch、Redisを追加
- postfixが無くなった
- Azure依存をやめた
2.1時代のコードはお作法的なものをあまり良く分かっていない状態で書いていたので、3.1に更新した時にゴッソリ書き換えました。
データベースがMariaDBになりましたが、なぜMariaDBなのかは特に理由はありません。
構成としてはこんな感じです。(デプロイ周りは省略)
今回の改修で、VPSを2台に変更しました。
Webサーバとデータベースサーバで分けたようなイメージです。
基本的にはDockerで動かしていますが、nginxだけホストOSで動かしています。
というのも、Docker内にnginxを持たせるとIPv6でリクエストが飛んできた際にリモートIPアドレスがDockerコンテナのIPアドレスになってしまう不具合のようなものが発生したためです。
回避方法はいろいろあるようですが、わざわざDockerコンテナ内までv6にする理由も無いのでホストのnginxからASP.NET Coreに対してX-Forwared-Forヘッダ経由でクライアントのIPアドレスを取れるようにしています。
ElasticsearchやRedis、MariaDBとはVPS同士をLANで接続してローカルネットワーク内で通信させるようにしています。
外に出ないのでとても良い感じです。
利用するにはさくらのVPSのコントロールパネルで諸々ネットワークの設定をする必要があります。
旧構成ではメール送信のためにpostfixが居ましたが、今回の改修でメール通知をSlackのWebhookに置き換えたのでpostfixは無くしました。
ログ監視にAzureのApplication Insightsを使っていましたが、これも特に要らないなと思ったので無くしました。
Azureから毎月数百円落ちるのが面倒というのもあります。
今回の改修でインフラ部分はかなりスッキリしたなという思いがあります。
頑張ってASP.NET Core 3.1にしましたが、8ヶ月も掛けてしまったので.NET 5がリリースされてしまいました。。。
.NET 5はLTSが無いので対応しなくても良いかなという気はしていますが、気が向いたらあげようかなと思います。そんな大変そうじゃ無さそうですし。
得られたもの
- ASP.NET Coreのお作法
- ローカライズの方法
- ファットコントローラをダイエットさせる経験
- Elasticsearchの概念や使い方
- 新しいブログ管理機能
失ったもの
- 8ヶ月間のそこそこの休み時間
- お金
- さくらのVPS 東京リージョン 2G 1,780円 x 2(月額)
- ドメイン代 mrtska.net 1,886円 (年額)
- さくらのSSL JPRS DV証明書 990円 (年額)
まとめ
失ったものも結構多いですが、得られたものは今後役立つと思っているのでそんなに悪くないかなと思いました。
証明書が安くて非常に助かりました。DVの証明書はもうこの値段じゃないとやっていけないのでしょうかね。
Tag: ASP.NET Core