Userdir 下で PHP Composer を使う環境 | Webプログラミング!(0000年度)

Time-stamp: "2017-08-10 Thu 22:13 JST hig"

Userdir

Webサーバで, 各Linux/Unix ユーザがWeb公開領域(Web root)を持つ機能.

典型的には,

  • サーバ example.com のユーザ username の home directory /home/username下の /home/username/public_htmlが各ユーザの web root http://example.com/~username/ に対応.
  • /home/username/public_html/a/b/cが URL http://example.com/~username/a/b/cに対応

Apache なら userdir module で実現される.

Composer

PHPで, プロジェクトの外部ライブラリのバージョンを管理する仕組み. プロジェクト名を p とすると, ディレクトリ p下の p/vendorに外部ライブラリが置かれ, p/publicが公開用ディレクトリ. これをWeb rootにせよ, などという説明がなされる.

プロジェクトのディレクトリ p 全体を, ユーザの Web root public_html 下に置くような配置は正しくない. 公開すべきものをp/public, 公開すべきでないものをp/それ以外に区別しておいているのだから.

どうする?

ユーザの Web root public_html 下に, 公開ディレクトリ p/publicのシンボリックリンク(Windowsのショートカットのようなもの)を置けばよい.

具体例

  • プロジェクトのディレクトリ /home/username/dev/p
  • プロジェクトの公開ディレクトリ /home/username/dev/p/public
  • プロジェクトの公開ディレクトリに相当するURL http://example.com/~username/app/p
とするためには, Webサーバのシェルで, ln コマンドを使う.
    ln -s /home/username/dev/p/public /home/username/public_html/app/p
を実行. ここでは明確さ重視で書いたが, もう少しタイプ数は節約できるし, (これは絶対パス指定だが)相対パス指定で行う方が適切なこともある. また, pというディレクトリ名を共通に使っているが, そうしなければいけない理由はない.

Apache HTTPD サーバ管理者がすべき設定

  • userdir module をロード
  • Userdir 下に Options FollowSymLinks(IfOwnerMatched)

このサイトのコンテンツ

QRcode to hig3.net

http://hig3.net