セキュリティキャンプのグループのブログリレー用記事です. そのうちしっかり書き直します.
自宅サーバの環境を紹介します. 自宅サーバではこのブログやmastodon, 各種discord bot, マイクラサーバ, 自作のwebサービスなどが動いています.
OSは全てUbuntu22.04です. 契約しているプロバイダのプランがv4 over IPv6でIPv4だと一部のポート範囲しか使えないので外部公開用のサーバとしてさくらVPSを借りています. livaはx64でしか動かないソフトが多くてリソースが枯渇気味なのでx64マシン追加したいですね. ブレーカー落ち対策としてUPSを導入していますがサーバーより電気代かかるのでかなりつらい.
サーバ同士を繋げるのにwireguardというvpnを導入しています. openvpnと違って公開鍵を交換するだけで使えるので設定が簡単です. 開発用のPCにも導入することで各種管理画面はvpn経由でしかアクセスできないようにしています(パスワードも掛けていますが念の為)
軽めのk8sであるk3sを使って全てのアプリをk8s上で動かしています. multi master構成にできていないのでマスタが落ちると死ぬのでそのうちなんとかしたいです.
kube proxyのおかげで公開したアプリはどのサーバで動いていてもさくらVPSにアクセスすれば繋がります. 便利ですね.
wireguardとk3sとカーネルパラメータなどを設定するのにansibleを使って設定を管理しています. 最初はnixosで管理する予定でしたが各種バイナリが /bin
にあることを期待するlonghornが動かずに詰んだのでansibleを使うことにしました. 後から気づいたのですがほとんどの設定はk8sのマニフェストで管理されるのでnixosは不要でしたね.
githubにマニフェストをpushするだけでサーバに反映されるようになります. renovateも導入することでイメージの更新はスマホからPRをマージするだけでよくなってかなり楽です.
自作のアプリはgithub actionsでコンテナをビルドし, timestamp-sha
のようなタグをつけてghcr.ioにあげるようにしています. timestampをいれないと2つのタグのどちらが新しいかをrenovateが判断できないので必ず入れましょう.
タグ生成のためのaction
argocd-notificationsを設定すると状態をslackに通知できるようになってさらに便利になります.
自宅のIPが変わってもドメイン名でアクセスできるようにddnsクライアントであるddclientを動かしています. dnsはcloudflare dnsです.
外部にアプリケーションを公開するのに使っています. 外部公開用だけでなくvpnからしかアクセスできないものも動かしているのでnginx ingressが2つ動いている状態です.
k3sを作っている会社が開発している分散ストレージです. helmで導入でき, GUIの管理画面があり, storageclassを設定すれば使え, 自動バックアップ(s3に行っている)もできるのでとても便利です.
シークレットを暗号化してgit管理するためのものです. JSONの一部だけ暗号化といったこともできます.
サーバの状態を監視する用です. helmで簡単に導入できて4台なら無料で使えます. ただ現状あまり活用できていない(slack通知など設定しなければ)
このブログは完全に静的コンテンツなのでcloudflare経由で配信しています.
ansibleの設定ファイルや, k8sのマニフェストはシークレットなどが問題ないか確認してリポジトリをpublicにしたいのですが確認作業が大変なのでまだできていない状況です. sealed secret導入前にシークレット直書きしていたのが残っていたりもしますし, 設定どこかでミスっていたりすると死ぬので怖いんですよね. dotfilesリポジトリもですが早めにします...