
仕事でサーバ構築やネットワーク設定、プログラミングに携わる一方、プライベートでも自宅サーバを運用しています。
この記事では、2021年12月時点で自宅サーバ上に構築していたサービスと、それらを支えるソフトウェアをまとめます。当時の構成を記録した記事のため、現在の運用環境とは異なる可能性があります。
自宅サーバで実現していたこと
自宅サーバは、単にファイルを保存するだけでなく、日常的に使う複数のサービスを動かす基盤として利用していました。
- ブログの公開
- オンラインストレージと写真のバックアップ
- 家庭内のファイル共有
- 家族向けWikiによる情報共有
- 蓄積したデータの分析・可視化
- 050番号を利用するSIPサーバ
- サーバやネットワーク機器の監視
- 各機器から送られるログの集約
サービスと使用ソフトウェアの一覧
| 用途 | 主なソフトウェア | 役割 |
|---|---|---|
| ブログ | WordPress | 記事の作成・公開 |
| オンラインストレージ | Nextcloud | ファイル同期、写真のバックアップ、データ共有 |
| ファイルサーバ | Samba | 家庭内のWindows端末から利用するファイル共有 |
| Wiki | MediaWiki | 家族間で共有したい情報の蓄積 |
| データ可視化 | Grafana | データベースに保存した情報のグラフ表示 |
| IP電話 | Asterisk | 050番号を収容するSIPサーバ |
| 稼働監視 | Zabbix | サーバの死活・状態監視 |
| ログ管理 | rsyslog | 各機器のSYSLOGを集約 |
各サービスの構成
ブログ:WordPress
このブログはWordPressで構築し、自宅サーバ上で運用していました。ブログシステムを一から自作する方法もありますが、記事の管理やテーマによるデザイン変更のしやすさを考え、WordPressを採用しています。
WebサーバにはNginxを使用し、記事や設定を保存するデータベースには、別のDBサーバで動作するMariaDBを利用していました。
オンラインストレージ:Nextcloud
オンラインストレージにはNextcloudを採用していました。DropboxやGoogle Driveのように、複数のパソコン間で同じファイルを同期できます。
日常的に利用するデータをNextcloudへ保存しておけば、デスクトップパソコンとノートパソコンのどちらからでも同じファイルを扱えます。スマートフォン用アプリでは、撮影した写真を自動アップロードできるため、写真の転送とバックアップにも便利でした。
家族や知人へデータを渡す際には共有機能を利用でき、大容量のデータを自分の環境から受け渡せる点も重宝していました。
ファイルサーバ:Samba
家庭内のファイル共有にはSambaを使用していました。Windows端末から扱いやすく、ネットワーク上の共有フォルダーとして利用できます。
Nextcloudには日常的に使用するファイルを置き、SambaのファイルサーバにはOSのディスクイメージ、ソフトウェアのインストーラー、メンテナンス用スクリプトなど、主に自宅内で使用するデータを保存していました。用途に応じて保存先を分けることで、データを整理しやすくしています。
情報共有:MediaWiki
家族間で共有しておきたい情報をまとめるため、MediaWikiも運用していました。手順や設定など、後から参照したい情報を蓄積する用途です。
データベースはWordPressと同じDBサーバ上のMariaDBを利用し、アプリケーションは仮想マシン上のDockerで動かしていました。Docker Composeで構成を管理することで、バックアップや別サーバへの移行を行いやすくしています。
データ可視化:Grafana
データベースに蓄積した情報の可視化にはGrafanaを使用していました。数値をそのまま確認するだけでなく、グラフとして表示することで、変化や傾向を把握しやすくなります。家計簿データの分析などにも活用していました。
IP電話:Asterisk
SIPサーバにはAsteriskを使用し、SMARTalkで契約していた050番号を収容していました。なお、SMARTalkは2020年10月ごろから新規申し込みを停止していたため、この記事は当時利用していた環境の記録として掲載しています。
サービスを支える基盤
DBサーバ:MariaDB
WordPress、Nextcloud、MediaWiki、Zabbixなどが利用するデータベースを、専用のDBサーバへ集約していました。アプリケーションとデータベースを分けることで、役割を整理し、管理しやすい構成にしています。
リバースプロキシ:Nginx
外部から複数のWebサービスへアクセスするため、入口にNginxのリバースプロキシを配置していました。アクセス先に応じて内部の各サービスへ通信を振り分け、HTTPS通信の終端もリバースプロキシで行う構成です。
コンテナ基盤:Docker
一部のサービスはDockerコンテナとして動かし、Docker Composeで構成を管理していました。必要な設定をファイルとして残せるため、環境の再構築や移行を行いやすい点がメリットです。
DNS・DHCP・TFTP:Dnsmasq
家庭内向けのDNSキャッシュとDHCPにはDnsmasqを使用していました。また、ネットワーク機器へファームウェアなどを配布するためのTFTPサーバとしても利用していました。
ルーター・VPN:VyOS
PPPoE接続の終端、ネットワークセグメント間の通信制御、外出先から自宅サーバへ接続するためのVPNにはVyOSを利用していました。家庭内ネットワークの中心となる役割を担っています。
稼働監視:Zabbix
各サーバが正常に動作しているかを確認するため、Zabbixで死活監視と状態監視を行っていました。監視サーバ自体はDocker上で動作させていました。
ログ管理:rsyslog
サーバやネットワーク機器が出力するSYSLOGは、rsyslogを使用してログサーバへ集約していました。ログを一か所へまとめることで、トラブル発生時の調査をしやすくしています。
集約したログの一部はデータベースへ保存し、Grafanaで可視化できるようにしていました。ログの収集、保存、表示を組み合わせることで、機器の状態や変化を確認しやすくしています。
自宅サーバを運用する目的
自宅サーバを運用する一番の魅力は、必要な機能を自分で選び、自由に組み合わせられることです。サービスを実際に構築・運用することで、サーバ、ネットワーク、データベース、コンテナ、監視などを横断的に学べます。
一方で、障害対応、バックアップ、アップデート、セキュリティ対策も自分で行う必要があります。便利なサービスを動かすだけでなく、継続して安全に運用するところまで含めて自宅サーバの面白さだと感じています。
まとめ
2021年12月時点では、WordPressやNextcloudといった日常的に使うサービスに加え、MariaDB、Nginx、Docker、Zabbix、rsyslogなどを組み合わせて自宅サーバを運用していました。
それぞれを単独で動かすだけでなく、監視やログ管理まで含めて一つの環境として構築することで、利便性と学習の両方につながっています。今後構成を変更した際には、その内容も別の記事として記録していきます。