この記事は Akatsuki Games Advent Calendar の18日目の記事です。
昨日は AZQ1994 さんのSSHで繋がらなくなったOCIサーバーを直した話、
おとといは Yuto Hamada さんの 自宅 kubernetes で cloudflare-tunnel-ingress-controller を使ってお手軽外部公開 でした。
はじめに
もうアドベントカレンダーの後半になり、自宅サーバの排熱で暖を取るのにちょうどいい季節になりました。この記事を書いている 12月15日現在、我が家ではまだ暖房を使わずに過ごしています。
Github のリポジトリのスター数から Unity エンジニアと誤解されることがあるのですが、サーバサイドエンジニアとして働いてます。(趣味の一つとして Unity ライブラリを作ってるだけです)
一応サーバサイドエンジニアが本職なので、今回は趣味で運用している自宅サーバについて書こうと思います。
ネットワーク構成
自宅のネットワーク構成と論理構成図は以下の通りです。
- メインルーター: YAMAHA RTX1210
- L2SW: Allied Telesis GS924M V2
- PoE HUB: XikeStor SKS1200-4GPY2XF-P
- AP: YAMAHA WLX212
※ ブログ用に実際の論理構成図から一部省略・ポート番号を変えていたりします。
機器選定条件としては、手頃な価格であること・ファンレスであることを重視しています。 枕元から1mもない距離にネットワーク機器とPC類を置いている添い寝自宅サーバなので、静音性が非常に重要な要素です。 そのため、我が家ではファンレスのネットワーク機器にし、PC のファンは静音性が高いものを使っています。
一時期 L2 スイッチの Allied Telesis GS924M V2 を Allied Telesis x510 に変えるか検討したのですが、ファンレスではないので交換を見送りました。
ネットワーク機器に関しては一応19インチラック内の、3U 分(実際は使ってない機器を置いていたりするのでもっと幅を取ってますが) に収まっています。 このラックの上の方に音響機器が入ってたり、これとは別の音響・映像機器が入ってるラックケースがありますが、今回の主題ではないので割愛します。
(ホコリで汚いですが)
1. メインルーター
逸般の誤家庭御用達の YAMAHA ルーターです。 さすが中小規模拠点向けのルーターというだけあって、機能が豊富な上に安定して動作しています。
RTX1210 から標準搭載された LANマップ という機能が非常に便利です。 ネットワーク機器を管理するのに非常に便利な機能で、家のネットワーク機器全部 YAMAHA 製品で統一しようかなと思うくらいです。
あと YAMAHA ルータの特徴としてルータ上で Lua スクリプトを動かすことができます。そのため、我が家では Lua スクリプトで簡単な監視を行っています。
YAMAHA 製品は公式ドキュメントが充実している上、比較的古い機器に対してもファームウェアのアップデートを提供してくれるなど、サポートがしっかりしているので、今後リプレイするとしても YAMAHA 製品になるかなと思っています。
2 . L2スイッチ
一般的な L2 スイッチです。ルータで VLAN を切ってるので、L2 スイッチではタグ VLAN からポート VLAN に変換しています。
3 . PoE ハブ
よく "八丁" と呼ばれているハブです。このハブには 2.5Gbps ポート(SFP は 10Gbps)がついてますが、AP を稼働させるためのただの PoE ハブとして使っています。
4 . アクセスポイント
YAMAHA の AP 製品の中でも小規模拠点向けのものです。小規模拠点向けと言っても、2.4GHz と 5GHz それぞれ50台接続可能なので、家庭用途としては十分な性能です。我が家は ESP32 とかを使っているので、同時接続台数が多いですが、特に問題なく動作しています。
業務用APはコンソールポートから設定するのが一般的ですが、YAMAHA ルータと併用しているので、ルータの Web UI から HTTP プロキシー経由で AP の Web UI にアクセスできるので便利です。また、LANマップ機能を使うと接続している機器の情報も確認できます。この機能を使いたいために YAMAHA の AP を購入しました。
業務用APなので電源アダプタが付属していないので別途購入するか PoE 給電が必要です。我が家では先述の八丁のハブから PoE 給電しています。また、壁掛け金具が付属しており、我が家は賃貸なので壁付できないので 2x4 アジャスターで立てた柱に取り付けて運用しています。
予備・稼働していない機器
現在常時稼働しておらず、論理構成図に記載していない機器だが、所有している機器としては以下のものがあります。 (普通の電気屋に売ってる家庭用のルータとかハブを何台か持っていますが、これらは省略しています)
IX2215 と ELECOM の AP に関しては使い道は無いが安かったから買ったものです。IX2215 は購入後動作確認とファームウェア更新をしましたが、何も設定が入ってないです。何か実験的なことをする時用に使えるかなと買ったのですが、使う機会がないまま放置しています。
YAMAHA RTX1200 に関しては現用の RTX1210 購入前に使っていたものになります。 メインルータが壊れたとき用の予備機として一応設定はしてありますが、電源を入れずに保管している状態です。
サーバ構成
サーバ構成としては Proxmox が入ってる PC を1台、監視用としてラズパイが 1台稼働しています。 また QNAP の NAS がストレージ用として稼働しています。
Proxmox のサーバを2台体制にしても良いのですが、現状サーバの CPU リソースが余っているので1台体制で運用しています。VM のバックアップを定期的にとって NAS に保存しているので、万が一サーバが壊れたときはバックアップから復元する気持ちで運用しています。
VM の管理ですが、Terraform と Ansible で構築したものと手動で構築したものがあります。 動かしたいものが確実に決まっているものに関しては Terraform と Ansible で構築しています。 サンドボックス環境であったり、USB, PCI Express, SATA ディスクをパススルーしている様なハードウェア依存の高いものは手動で構築しています。ちなみにですが、5日目の記事で使っている Prometheus と Grafana は Terraform と Ansible で構築した VM の上で動いています。
VM で動いている OS ですが、個人的な好みで基本 Arch Linux を使っています。 デスクトップ環境が必要なものは Arch 系の Manjaro Linux で、一部 Debian と Rocky Linux を使っています。 また、Windows もありますが、特に使っておらず遊んでいる状態です。
VM の構築
VM 構築ですが、宗教的な理由で Arch Linux を使ってる関係で他のディストリビューションに比べちょっとインストールに手間がかかります。 毎回手動インストールするのは大変なので、Packer を使って作成したイメージに cloud init を使って VM を構築しています。
Packer では Arch Linux のインストール後、ある程度のパッケージをインストールを行っています。 Arch Linux をインストールしただけだと、git や wget, vim すら入っておらず、VM を使う時にインストールするのが面倒なので Packer で入れています。また、AURヘルパーとして yay、Proxmox との連携のために qemu-guest-agent も入れています。 あとは VM 構築時の初期設定用に cloud-init をインストールしたイメージにしています。
Packer で作成したイメージを Terraform や手動で VM を作成するのですが、初期設定に関しては cloud-init で行っています。
cloud-init を使うことで、VM のユーザ名やIP アドレス、SSH 用の公開鍵を VM 作成時に設定できるので、VM 構築時に手動で設定する項目がほとんどなくなります。立ち上がったら yay -Syu
をしてパッケージを更新するぐらいです。
Proxmox から各 VM のメトリクスを収集しているのですが、VM 構築時に docker で Node Exporter を動かし Prometheus で監視することが多いです。ただ、VM によっては Node Exporter が不要な場合があるので Packer で入れておらず、exporter インストール用の専用シェルスクリプトで毎回入れています。あと一部の VM に関しては Web コンソールとして Cockpit も入れています。
なぜ自宅サーバを運用しているのか
検証環境をサクッと作れたり、環境構築周りで色々勉強になるので自宅サーバを運用しています。 ちょっと何か動かしたい時にすぐに動かせる環境が用意できるのも理由の一つです。 また、クラウドでは運用できないもの(Flightradar24 feed とか)をしている関係上、自宅に 24/365 で稼働している PC が必要なので自宅サーバを運用しています。
あとは個人的に下手にクラウドサービスでコンピュートリソースを借りるより、自宅サーバを運用した方が安上がりだと思っています。 自宅サーバはペットを飼っているようなもので、面倒を見る人的コストのことを考えてはいけません。 サーバの面倒見るのが嫌だったり、お金を出せるのであればクラウドサービスを使うのが一番です。自宅サーバはあくまでも盆栽遊びの延長だと思っています。