ZimaOSの独自のWebスタックを変更せずに、Apache、Nginx、その他のWebサーバーを分離されたDockerコンテナ内で実行し、8080などの別のホストポートを公開して、ZimaOS上でWebサイトをホストできます。これにより、サイトの設定をZimaOSの管理インターフェースから独立させられます。
コミュニティの例ではこの基本パターンが示されていますが、1点修正が必要です。そのDockerfileはポート10000を公開しているものの、Webminをインストールしていません。ポートを公開しただけでは、そのポートで動作するサービスは作成されません。
ZimaOS自体を再設定するのではなく、コンテナを使用する
ZimaOSは独自のインターフェース用にすでにWebサービスを使用しています。ホスト上のこれらのサービスを置き換えたり再設定したりすると、アップグレード時の問題やポート競合のリスクが不要に高まります。別のコンテナを使えば、Webサイト専用のファイルシステム、パッケージ、ポートを用意できます。
ZimaOSはDockerベースのカスタムアプリに対応しており、現在のDocker Composeアプリのリファレンスでは、通常のCompose実行設定とZimaOS App Storeのメタデータが分けられています。
よりシンプルなApacheパターン
静的なWebサイトや基本的なローカルサイトであれば、最初に完全なUbuntuイメージを構築する必要はありません。最小限のComposeサービスで、サイトのディレクトリをApacheイメージにマウントできます。
services:
web:
image: httpd:2.4
restart: unless-stopped
ports:
- "8080:80"
volumes:
- /path/to/www:/usr/local/apache2/htdocs:ro
その後、LAN上でhttp://SERVER-IP:8080にアクセスします。サイトのファイルには、ホスト上の永続ディレクトリを使用してください。PHP、データベース、リバースプロキシ、管理UIが必要な場合は、公開ポートがそれらを提供すると考えず、必要なサービスを明示的に追加してください。
ポート10000を公開しても、Webminがインストールされたことにはならない理由
そのフォーラムのDockerfileはApacheといくつかのユーティリティをインストールしたうえで、EXPOSE 80 443 10000を宣言していました。Dockerのポート宣言はメタデータにすぎません。イメージ内では、ポート10000で待ち受けるプロセスも必要です。そのDockerfileはWebminをインストールも起動もしていないため、-p 10000:10000を指定して公開するだけでは、Webminのダッシュボードは表示されません。
Dockerのポート公開に関するドキュメントでは、公開ポートはコンテナ内のサービスへトラフィックを転送するものであり、アプリケーション自体を作成するものではないと説明されています。
ローカル開発と一般公開ホスティングは、リスクレベルが異なる
LAN内だけでサイトを運用するのは比較的簡単です。一方、インターネット上で公開するには、TLS、DNS、認証、パッチ適用、ログ記録、リバースプロキシの設定、ルーターやファイアウォールの公開設定が必要になります。コンテナでポートを公開できるからといって、Webminのような管理インターフェースをそのままインターネットに転送しないでください。
常時稼働するセルフホスト環境が目的であれば、小型のセルフホスティングサーバーでワークロードを実行できます。ただし、公開時のセキュリティはハードウェアモデルではなく、ソフトウェアアーキテクチャとネットワーク制御に左右されます。
結論
Webサイトは独自のDockerサービスとして実行し、競合しないポートを公開してください。目的に合ったイメージ、または構成を明確に定義したComposeスタックを使用し、サイトデータはコンテナの外部に永続化します。Webmin、データベース、TLSは、実際にそれらのサービスをインストールして設定する場合にのみ追加してください。
