我有一个linux Web服务器,其中包含一组具有不同虚拟主机特定访问权限的不同用户。
所有这些用户都属于一个共同组“www-data”(apache),我希望每个用户都能够使用作曲家安装的软件包。与通过“apt-get”软件包管理器安装的Debian软件包相同的排序......
到目前为止,我已尝试将程序包作为超级用户安装,但其他用户无法访问可执行文件。
链接.composer/vendor/bin/package-name
到
/usr/bin
或
/usr/local/bin
不起作用所以我想知道作曲家是否设计为每个特定用户冗余安装作曲家包? 如果没有,composer.json的配置是什么来将包安装重定向到
/usr/bin
而不是将它们锁定在
中.composer/vendor/bin
答案 0 :(得分:1)
Composer建议为每个应用程序单独安装软件包。它显然不是设计为像PEAR一样使用中央安装包,因为这通常很难更新。
因此,当您的用户使用他们自己的虚拟主机时,他们应该能够将所有需要的文件放在他们的网站空间中,而不是其他人。
现在我在考虑提供有用的东西,比如集中管理的Composer或其他实用程序的副本,但我不愿意,因为它可能是一个坏主意。
Composer不是安装程序。它不应该被用作抓取所有文件并将它们放到生产机器上的工具。它更像是一个管理依赖项的开发人员工具。在服务器上使用Composer意味着人们将您的服务器用作开发环境。如果这是真的,他们有权安装Composer,但他们应该能够自己完成。
另一件事是PHPUnit或Phing等实用程序。虽然我认为其中一些可能有用,但中央安装的问题在于它永远不会是正确的版本。例如,如果您提供PHPUnit,您可以使用最新的4.6并打乱仍使用旧版本3.x的用户,或者提供旧的3.7版本以及需要4.x系列的用户。同样适用于Phing,在较小程度上。
答案 1 :(得分:0)
到目前为止,我的解决方案是使用/usr/local/bin/composer
中的工作目录运行安装到/usr/local/lib/composer/
的系统范围的编写器。然后我将bin_dir
配置为/usr/local/bin
,让作曲家自动对包二进制文件进行符号链接。
到目前为止,我的问题是作曲家为所有用户创建了具有受限权限的供应商文件(640和750)。我的解决方法是chmod
我需要的所有内容。
它是这样的:
# install composer
sudo wget https://getcomposer.org/composer.phar --output-document=/usr/local/bin/composer
# setup composer home
sudo mkdir /usr/local/lib/composer
sudo touch /usr/local/lib/composer.json
# configure composer
sudo composer config bin-dir /usr/local/lib --working-dir=/usr/local/lib/composer
# install packages (drush, for example)
sudo composer require drush/drush:7.* --working-dir=/usr/local/lib/composer
# fix permissions
sudo find /usr/local/lib/composer -perm 640 -exec chmod 644 {} \;
sudo find /usr/local/lib/composer -perm 750 -exec chmod 755 {} \;
答案 2 :(得分:-1)
要使安装的软件包可供任何系统用户使用,我们必须创建位于附加软件包目录(/ opt / composer)中的composer.json,并从那里运行“composer install”命令。
例如:
cat /opt/composer/composer.json
{
"require": {
"squizlabs/php_codesniffer": "*",
"phploc/phploc": "*",
"pdepend/pdepend" : "2.1.0",
"phpmd/phpmd" : "*",
"nikic/php-parser" : "*",
"theseer/phpdox": "*",
"sebastian/phpcpd": "*"
},
"require-dev": {
"phploc/phploc": "*",
"phpmd/phpmd" : "@stable"
},
"config": {
"bin-dir": "/usr/local/bin"
}
}