おうちサーバ #Overview

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

おうちサーバ #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で組んでいます.
クラウド・サービスに無料でアクセス
Oracle Cloud Free Tierは無期限で使用できるAlways Freeクラウド・サービスを企業に提供します。

サービス一覧

おもに自宅(pi4)で稼働しているサービス群を紹介します.

目的があって使っているものから,とりあえず動かしてみたいからというものまでさまざまです.

VPN

WireGuardを使って各拠点を結んでいます.

どこからでもSSHできるような構成にしました.

公式通りWireGuardを導入して,systemdで動かしています.

Monitoring

よくあるGrafanaスタックです.

The Grafana Stack | Grafana Labs
Grafana Labs is the company behind leading open source projects Grafana and Loki and the creator of the first open and composable observability platform.

Lokiもいるのでメトリクスとログが追えるようになっています.

以下のコンポーネントが動いていて,docker composeで管理しています.

    • Prometheus
    • Grafana
    • Loki
    • backbox-exporter
    • node-exporter
    • (nginx for SSL)

別拠点のサーバ群はWireGuard経由でメトリクス収集しているので自宅のPi4にすべて集約される形になります.各サーバではsystemdでnode-exporterwireguard-exporterを動かしています.

アラートも仕掛けていてDiscordへ通知するようにしています.

  • uptime長すぎ
  • CPU温度高すぎ
  • SSL証明書の期限が近い
  • このブログなどWeb系の外形監視
  • SSH, ICMP,VPNの監視

など.

DNS

自宅ネットワーク内の名前解決向けにCoreDNSを立てています.1コンテナですがdocker composeです

ほかにも広告ブロックのため,関連ホストは"0.0.0.0"に向けて解決できないようにしています.これを使わせてもらっています.

GitHub - StevenBlack/hosts: 🔒 Consolidating and extending hosts files from several well-curated sources. Optionally pick extensions for porn, social media, and other categories.
🔒 Consolidating and extending hosts files from several well-curated sources. Optionally pick extensions for porn, social media, and other categories. - StevenBlack/hosts
Ansible

サービスと呼べるのか微妙ですが,各拠点のサーバ群はAnsibleで定期的に一斉アップデートできるようにしています.

あまりAnsibleの良さを活かせている気はしないですが,aptパッケージアップデートやインストールができるようになっています.

code-server

WebブラウザからVS Codeが使えます.

GitHub - coder/code-server: VS Code in the browser
VS Code in the browser. Contribute to coder/code-server development by creating an account on GitHub.

Raspberry Pi 4のリソースを使ってビルドなどをするわけですが,さすがに重いことがあります.ドキュメント系などの整備には耐えますが… という感じでした.

本格的に使ってはないですが,Javaアプリケーションの開発はしんどそうな印象.

iPadなどからの開発も可能にしたいという思いからです.

が,残念ながら新しいiPadをまだ買えていないです.(果たして本当にいるのか??というところでフリーズ中)

Discord Bot

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

Pythonのdiscordライブラリを使っています.

discord.py へようこそ。
Maintenance

メンテナンススクリプトの定期実行をしています.

不要なdockerイメージやログファイル,キャッシュなどの削除を行っています.

Ansibleでの一斉アップデートもここで行っています.

Homebridge

スマートハウスをめざしてHomebridgeを動かしています.

Homebridge
Homebridge adds HomeKit support to your non-HomeKit smart home devices.

AppleのHomeKitとの親和性を高めてくれるアプリケーションです.

Apple製品が多い我が家ですが,ホームアプリを使って湿温度取得や赤外線経由で家電操作ができます.

mirakurun

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

GitHub - Chinachu/Mirakurun: A Modern DVR Tuner Server for Japanese TV.
A Modern DVR Tuner Server for Japanese TV. Contribute to Chinachu/Mirakurun development by creating an account on GitHub.
MQTT

MQ broker

Eclipse Mosquitto
Eclipse Mosquitto is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1. Mosquitto is lightweight and is suitable for use on all devices

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

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

電力使用量可視化 (Wi-SUN)

自宅のスマートメータから電力使用量を取得してGrafana上で可視化するということをやりました.

GitHub - doariva/wisun
Contribute to doariva/wisun development by creating an account on GitHub.

Wi-SUNの規格については詳しくありません.

Wi-SUN Alliance
Wi-SUN フィールド エリア ネットワークFAN認証によりIoTのエンド デバイスのインターオペラビリティを促進詳細Wi-SUN をIoTに Wi-SUNソリューションは、農業から資産管理まで、多岐にわたり各種IoT […]

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

LCD

液晶ディスプレイに日付とIPv4アドレスを意味もなく出力しています.

余っているのはもったいないからなんとなく出しているだけです.


EOP