おうちサーバ #Overview
自宅サーバの構成や使用デバイス,稼働サービスなどをふわっと紹介.

全体を軽く紹介します.細かく書きたいところは別記事に切り出します.
目的なく,「やってみたい」が先行しているものが多いです.
構成
自宅と実家,クラウド上の大きく分けて3拠点で構成されています.

◯ 自宅(home)
- Raspberry Pi 4
- 8GBモデルです.検証やサービス稼働の中心的な立ち位置.
- Raspberry Pi Zero
- コンピュータサイエンスを学び始めてから初めてのラズパイデビュー機.
- いろいろ勉強してから物足りなくなったので前述のPi4を購入.
- 現在は湿温度取得やスマートリモコン(赤外線送受信) などIoT寄りな立ち位置
◯ 実家(parents home)
- 使わなくなったPCを2台稼働させています
- Ubuntu Serverです.昔のPCでそこまでスペックは強くありません.
◯ クラウド(cloud)
- Always Free(=無料枠)があるOracle Cloud上にあります
- 主に作業用サーバと,Kubernetesクラスタが稼働しています
- 本来であれば"dev"は不要で,"operation"だけがいいんですが,選択したインスタンスが1NICしか刺さらず,k8sクラスタノードへの踏み台的な立ち位置でやむを得ずこの構成にしています.
- Kubernetesはマネージドではなく,Linuxインスタンス上にkubeadmで組んでいます.

サービス一覧
おもに自宅(pi4)で稼働しているサービス群を紹介します.
目的があって使っているものから,とりあえず動かしてみたいからというものまでさまざまです.
VPN
WireGuardを使って各拠点を結んでいます.

どこからでもSSHできるような構成にしました.
公式通りWireGuardを導入して,systemdで動かしています.
Monitoring
よくあるGrafanaスタックです.

Lokiもいるのでメトリクスとログが追えるようになっています.
以下のコンポーネントが動いていて,docker composeで管理しています.
- Prometheus
- Grafana
- Loki
- backbox-exporter
- node-exporter
- (nginx for SSL)
別拠点のサーバ群はWireGuard経由でメトリクス収集しているので自宅のPi4にすべて集約される形になります.各サーバではsystemdでnode-exporterやwireguard-exporterを動かしています.
アラートも仕掛けていてDiscordへ通知するようにしています.
- uptime長すぎ
- CPU温度高すぎ
- SSL証明書の期限が近い
- このブログなどWeb系の外形監視
- SSH, ICMP,VPNの監視
など.
DNS
自宅ネットワーク内の名前解決向けにCoreDNSを立てています.1コンテナですがdocker composeです
ほかにも広告ブロックのため,関連ホストは"0.0.0.0"に向けて解決できないようにしています.これを使わせてもらっています.
Ansible
サービスと呼べるのか微妙ですが,各拠点のサーバ群はAnsibleで定期的に一斉アップデートできるようにしています.
あまりAnsibleの良さを活かせている気はしないですが,aptパッケージアップデートやインストールができるようになっています.
code-server
WebブラウザからVS Codeが使えます.
Raspberry Pi 4のリソースを使ってビルドなどをするわけですが,さすがに重いことがあります.ドキュメント系などの整備には耐えますが… という感じでした.
本格的に使ってはないですが,Javaアプリケーションの開発はしんどそうな印象.
iPadなどからの開発も可能にしたいという思いからです.
が,残念ながら新しいiPadをまだ買えていないです.(果たして本当にいるのか??というところでフリーズ中)

Discord Bot
やりたかったのはChatOpsです.Discordから任意のコマンドをpi4上で実行できるようにしています.

Pythonのdiscordライブラリを使っています.
Maintenance
メンテナンススクリプトの定期実行をしています.
不要なdockerイメージやログファイル,キャッシュなどの削除を行っています.
Ansibleでの一斉アップデートもここで行っています.
Homebridge
スマートハウスをめざしてHomebridgeを動かしています.
AppleのHomeKitとの親和性を高めてくれるアプリケーションです.
Apple製品が多い我が家ですが,ホームアプリを使って湿温度取得や赤外線経由で家電操作ができます.

mirakurun
TVチューナーです.自宅内であればiOSやAppleTVからテレビが見られるようになっています.
MQTT
MQ broker

pi0で湿温度を取得して,それをMQへ送信.その値をhomebridgeやPrometheusで収集できるようになっています

また,前述した家電操作するときも利用されます.ホームアプリで操作したあとhomebridgeからMQへ積まれます.pi0がMQからsubscribeして赤外線を送信します.

電力使用量可視化 (Wi-SUN)
自宅のスマートメータから電力使用量を取得してGrafana上で可視化するということをやりました.
Wi-SUNの規格については詳しくありません.

少し前から調子が悪くて取得できなくなってしまってますが,以下のように見えます.ダッシュボードは自家製です.

LCD
液晶ディスプレイに日付とIPv4アドレスを意味もなく出力しています.
余っているのはもったいないからなんとなく出しているだけです.

EOP