Kgtkr's Blog

自宅サーバ環境の紹介

2022/09/12
server

セキュリティキャンプのグループのブログリレー用記事です. そのうちしっかり書き直します.

はじめに

自宅サーバの環境を紹介します. 自宅サーバではこのブログやmastodon, 各種discord bot, マイクラサーバ, 自作のwebサービスなどが動いています.

ハードウェア構成

  • Raspberry Pi 4 4GB
  • Raspberry Pi 4 8GB
  • Liva x2(?)という実家で使わなくなった小型のPC. メモリ8GB
  • (自宅鯖ではないが)さくらVPS 1GBプラン

OSは全てUbuntu22.04です. 契約しているプロバイダのプランがv4 over IPv6でIPv4だと一部のポート範囲しか使えないので外部公開用のサーバとしてさくらVPSを借りています. livaはx64でしか動かないソフトが多くてリソースが枯渇気味なのでx64マシン追加したいですね. ブレーカー落ち対策としてUPSを導入していますがサーバーより電気代かかるのでかなりつらい.

wireguard

サーバ同士を繋げるのにwireguardというvpnを導入しています. openvpnと違って公開鍵を交換するだけで使えるので設定が簡単です. 開発用のPCにも導入することで各種管理画面はvpn経由でしかアクセスできないようにしています(パスワードも掛けていますが念の為)

k3s

軽めのk8sであるk3sを使って全てのアプリをk8s上で動かしています. multi master構成にできていないのでマスタが落ちると死ぬのでそのうちなんとかしたいです.
kube proxyのおかげで公開したアプリはどのサーバで動いていてもさくらVPSにアクセスすれば繋がります. 便利ですね.

ansible

wireguardとk3sとカーネルパラメータなどを設定するのにansibleを使って設定を管理しています. 最初はnixosで管理する予定でしたが各種バイナリが /bin にあることを期待するlonghornが動かずに詰んだのでansibleを使うことにしました. 後から気づいたのですがほとんどの設定はk8sのマニフェストで管理されるのでnixosは不要でしたね.

k8s上で動かしているシステム系のもの

argocd + renovate

githubにマニフェストをpushするだけでサーバに反映されるようになります. renovateも導入することでイメージの更新はスマホからPRをマージするだけでよくなってかなり楽です.
自作のアプリはgithub actionsでコンテナをビルドし, timestamp-sha のようなタグをつけてghcr.ioにあげるようにしています. timestampをいれないと2つのタグのどちらが新しいかをrenovateが判断できないので必ず入れましょう.

タグ生成のためのaction

argocd-notificationsを設定すると状態をslackに通知できるようになってさらに便利になります.

ddns

自宅のIPが変わってもドメイン名でアクセスできるようにddnsクライアントであるddclientを動かしています. dnsはcloudflare dnsです.

nginx ingress + cert-manager

外部にアプリケーションを公開するのに使っています. 外部公開用だけでなくvpnからしかアクセスできないものも動かしているのでnginx ingressが2つ動いている状態です.

longhorn

k3sを作っている会社が開発している分散ストレージです. helmで導入でき, GUIの管理画面があり, storageclassを設定すれば使え, 自動バックアップ(s3に行っている)もできるのでとても便利です.

sealed secret

シークレットを暗号化してgit管理するためのものです. JSONの一部だけ暗号化といったこともできます.

datadog

サーバの状態を監視する用です. helmで簡単に導入できて4台なら無料で使えます. ただ現状あまり活用できていない(slack通知など設定しなければ)

cdn

このブログは完全に静的コンテンツなのでcloudflare経由で配信しています.

設定ファイルの公開をしたい

ansibleの設定ファイルや, k8sのマニフェストはシークレットなどが問題ないか確認してリポジトリをpublicにしたいのですが確認作業が大変なのでまだできていない状況です. sealed secret導入前にシークレット直書きしていたのが残っていたりもしますし, 設定どこかでミスっていたりすると死ぬので怖いんですよね. dotfilesリポジトリもですが早めにします...