背景: 私は、開発者や技術者が職場で使用する開発およびテスト環境をセットアップするために、Apache 2.4、PHP 7.2、その他多数の機能を備えた Debian または Ubuntu サーバーを使用しています。
私は大量仮想ホストのチュートリアル使用するmod_vhost_alias
と、次のようなものを取得できます。
path: /var/www/{projectname}/public
url: {projectname}.dev.mycompany.net
関連する構成は次のとおりです(適切に編集されています)
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
これで、すべて正常に動作し、開発者はユーザーをリクエストすることで独自のプロジェクトを簡単に開始できます。ユーザーが作成され、www-data
グループに追加され、次のような構造の適切なフォルダーが /var/www に作成されます。
projectname:projectname rwxrwxr-x /var/www/projectname
www-data:www-data rwxrwsr-x /var/www/projectname/public
setfacl -m user:www-data:rwx /var/www/projectname
setfacl -R -m user:projectname:rwx /var/www/projectname/public
(後者は、インストールされたフレームワークや解凍プログラムによって作成されたファイルを Web サーバーで実際に処理できるようにするために必要でした)
もちろん、これには、どのプロジェクトでも他のプロジェクトに書き込むことができるという欠点があるので、その点については取り組みたいと思っています。しかし、可能であれば、保つ自動化は、開発者と技術者がバックエンドから最小限の入力でプロジェクトを開始できるようにする必要があるためです (「バックエンドの煩わしさは後回しにしましょう」と上司は言いました)。
さて、物事を安全にしつつもシンプルさを保つために、私が望んでいるのは、各仮想ホストに対応するウェブサーバー/PHP プロセスを実行するために適切なユーザーが使用されるように Apache (または PHP?) を設定することです。つまり、たとえば、プロジェクトは/var/www/foo1
ユーザーの下で実行されfoo1
、 の下のファイルにはアクセスできません/var/www/foo2
。もちろん、それに応じて権限と ACL を調整する予定です。
しかし、別のユーザーを設定する方法に関するドキュメントは見つかりませんでした。持ち歩く大量の仮想ホストの自動化。これは存在しなければならないと思います。ホスティング会社は結局このようなことをするでしょう。しかし、私はいくつかのものを調べましたが、機能する代替手段を提供しているものは何もないようです。
せいぜい、apache2-mod-itk に誘導されましたが、インストールすると、ほとんどの conf ファイルをデフォルト構成に設定しても、Web サーバーは常に起動に失敗するため、オプションではありません。
私が探しているのは、次の Apache 設定の「疑似コード」に似た効果を持つものです。
<Virtualhost *:443>
VirtualDocumentRoot /var/www/%-4/public
ServerName dev.mycompany.net
ServerAlias *.dev.mycompany.net
UseCanonicalName Off
User %-4
Group %-4
SuexecUserGroup %-4
CustomLog /var/www/%-4/logs/access.log vcommon
[...other directives]
</Virtualhost>
Apache/+PHP でこのようなものが利用できるのでしょうか、それとも他の種類の自動化ソリューションを探す必要があるのでしょうか?
私がしないセットアップを自動化する単純な mass_vhosts のような方法がない限り、全体を各ユーザーの docker または VM などに分割することになりそうです。そうすると、さらに多くの入力が必要になります (技術者に docker コンテナーを実行およびインストールするための root(?) 権限を与えることは言うまでもありません)。また、進行中の自動化も中断されます (サブドメインをコンテナーに動的に接続するにはどうすればよいでしょうか)。