【ITニュース解説】git init ~/repos/cathedral
2025年10月03日に「Dev.to」が公開したITニュース「git init ~/repos/cathedral」について初心者にもわかりやすく解説しています。
ITニュース概要
NixOSで開発環境を再構築し、Raspberry PiにWebサイトをデプロイした。Nginxでサイトを立ち上げ、sops-nixで秘密情報を安全に管理しSSL化も実現。NixOSの宣言的な設定により、迅速なシステム再構築を可能にした。
ITニュース解説
このニュース記事では、作者がNixOSという特別なLinuxオペレーティングシステムを使って、自分のサーバー環境を再構築し、ウェブサイトを安全に公開するまでの道のりが語られている。システムエンジニアを目指す人にとって、モダンなインフラ管理の考え方や具体的なツールがどのように使われるかを知る良い機会になるだろう。
まず、作者はNixOSをしばらく使っていたものの、これまでの設定に不満を感じ、「ゼロからやり直したい」という強い動機からプロジェクトを開始した。特に、自分の手で「実際に動くもの」をすぐに作り上げたいという思いがあったようだ。
最初のステップとして選ばれたのは、Raspberry Piという小型コンピューターを「エッジノード」として活用することだった。エッジノードとは、ネットワークの端、つまりユーザーに近い場所に配置されるコンピューターを指す。ここでは、インターネットからのアクセスを最初に受け止める「リバースプロキシ」という役割を担う。リバースプロキシは、外部からのリクエストを内部の適切なサーバーに転送したり、セキュリティを強化したりする役割を持つ。 作者は、このRaspberry PiにNixOSのイメージを書き込み、安全にアクセスするためのSSHキーを設定した。SDカードにOSを書き込む作業自体は比較的単純だが、実際には仕事の合間を縫っての作業となり、6時間もの時間を要したという。この過程で、Gitのブランチ運用で問題に遭遇したり、他のNix関連タスクに気を取られたりと、実際の開発現場でよくあるような障害も経験している。
次に、作者は自分の静的なウェブサイトを再びインターネット上に公開する作業に取り掛かった。ここで利用されるのがNginxという高性能なWebサーバーソフトウェアだ。Nginxは、Webサイトのコンテンツを配信するだけでなく、リバースプロキシとしても機能する。作者はNixOSの宣言的な設定方法を使って、ウェブサイトのファイルをNginxの設定に組み込んだ。宣言的とは、「こうあるべき」という最終的な状態を記述するだけで、その状態にするための具体的な手順はシステムが自動的に行ってくれる、という考え方だ。
ウェブサイトを公開する上で不可欠なのが、通信を暗号化して安全性を確保するSSL(Secure Sockets Layer)/TLS(Transport Layer Security)だ。これにより、ウェブサイトのアドレスがhttp://からhttps://に変わり、ブラウザとサーバー間のデータが盗聴されたり改ざんされたりするのを防ぐ。SSL証明書を取得するためには、通常、そのドメインの所有者であることを証明する必要がある。この記事では、ACME(Automated Certificate Management Environment)というプロトコルと、DNS-01チャレンジという検証方法が使われた。DNS-01チャレンジは、ドメインのDNSレコードに特定の情報を追加することで所有者であることを証明する仕組みだ。この際、CloudflareというDNSプロバイダのAPIキーが必要になるが、このような機密情報をリポジトリにそのまま保存するのはセキュリティ上非常に危険である。
そこで、作者はsops-nixというツールを導入し、「宣言的な機密情報管理」を実現した。宣言的な機密情報管理とは、暗号化された機密情報を設定ファイルとしてリポジトリに保存し、NixOSの設定の一部として安全に利用できるようにすることだ。
まず、ssh-to-ageコマンドを使って自身のSSH秘密鍵をsopsが利用できる形式に変換した。次に、flake.nixというNixOSのプロジェクト設定ファイルにsops-nixモジュールを追加。これにより、NixOSがsops-nixの機能を使えるようになる。
具体的な機密情報として、まずユーザーのパスワードが挙げられる。作者はnix/users.yamlというファイルでユーザーのパスワードを暗号化して保存した。NixOSの設定ファイルであるnix/veil.nixの中でsops-nixモジュールを有効化し、暗号化されたパスワードファイルとユーザー設定を関連付けた。この時、「mutableUsers = false」という設定を忘れてしまい、一時的にパスワードが機能しない問題に直面したが、この設定を追加することで解決した。mutableUsers = falseは、NixOSがユーザーアカウントの管理を完全に宣言的に行うための重要な設定であり、手動での変更を許可しないことを意味する。
同様に、CloudflareのAPIキーもnix/keys.yamlファイルで暗号化して保存された。そして、この暗号化されたAPIキーをNixOSの設定から参照し、ACMEによるSSL証明書取得時のDNS-01チャレンジで利用できるように設定した。Nginxの設定も変更され、指定されたドメイン(rrv.sh)に対してSSLを有効にし、ACMEを使って証明書を取得するよう記述された。
これらの設定変更は、すべてNixOSの宣言的な設定ファイル(flake.nix, nix/veil.nix, nix/users.yaml, nix/keys.yamlなど)に記述されている。最終的に、作者はsshコマンドでRaspberry Piに接続し、nixos-rebuild switch --sudo --flake .というコマンドを実行した。このコマンドは、NixOSのすべての設定変更を適用し、システムを再構築するという意味だ。この一連の作業により、Raspberry Pi上に安全なWebサーバーが立ち上がり、SSLで保護されたウェブサイトが公開された。作者は「死んだRaspberry Piから、SSLで保護されたライブWebサイトを、たった一度の再構築で実現できるのは素晴らしい」と語り、NixOSの強力な機能に感銘を受けている。
今後の計画として、作者は「DnD wiki」を再公開するために、NixOSでDocker Composeを宣言的に定義する方法を学ぶ予定である。これもまた、宣言的なインフラ管理の範囲を広げる試みであり、システムエンジニアが学ぶべき技術の一つだ。
この一連のプロセスは、ただ単にWebサイトを公開するだけでなく、以下のような重要な概念や技術要素が盛り込まれている。
- バージョン管理(Git): すべての設定変更を履歴として残し、必要に応じて元に戻せるようにする。
- 宣言的インフラ(NixOS): システムのあるべき状態をコードで記述し、再現性のあるインフラを構築する。
- エッジコンピューティング(Raspberry Pi): 小型デバイスを活用して、ネットワークの端で処理を行う。
- リバースプロキシとWebサーバー(Nginx): Webトラフィックを効率的かつ安全に処理する。
- セキュリティ(SSL/TLS、sops-nix): 通信の暗号化や機密情報の安全な管理。
- CI/CD(継続的インテグレーション/継続的デプロイメント)の基礎: 設定をコード化し、コマンド一つでデプロイできる状態は、より高度な自動化への第一歩となる。
これらの技術は、現代のシステム開発において不可欠なものであり、システムエンジニアを目指す上でぜひ理解しておきたい内容である。作者の経験は、理論だけでなく、実際の開発で直面する課題とその解決策を具体的に示している。