Shopware 6 与我们的网络开发设置(Apache 和 ACL)不兼容
Shopware 6 incompatible with our web dev setup (Apache & ACLs)
我们在 Ubuntu 20.04 上的 Web 开发设置如下所示:
- 我们 运行 Apache 作为 www-data(相当标准)
- 用户以“dev”身份登录(例如)
- 所以 PHPStorm 运行s 作为开发者
这通常会导致问题,例如当 CLI 创建一个Apache 稍后尝试更改的文件。
多年来(即使用 Magento 2、Contao、Laravel、......在我们开始使用 Shopware 6 之前)我们在项目文件夹中使用以下命令运行良好,使用 Linux ACL:
export FOLDER=projects && sudo setfacl -Rm u:$USER:rwx $FOLDER && sudo setfacl -Rm u:www-data:rwx $FOLDER && sudo setfacl -Rm d:u:$USER:rwx $FOLDER && sudo setfacl -Rm d:u:www-data:rwx $FOLDER && sudo chmod 600 config
因此 ACL 设置正确并且访问适用于网络服务器和 CLI 命令。
然后是 Shopware。
构建或更改主题时,底层 Flysystem 会尝试设置文件的可见性(权限)。虽然您可以使用上面的 setfacl 技巧正确 read/write 文件,但 chmod 仅适用于文件所有者(即“dev”)。
所以我们得到:
detail: "Warning: chmod(): Operation not permitted"
meta: {trace: [,…], file:
"/home/dev/projects/example.com/vendor/league/flysystem/src/Adapter/Local.php",
我们想知道对此有什么优雅的解决方案?其他人如何解决这个问题?
我们正在考虑的方法:
- 让 apache 运行 处于与登录用户相同的用户下
- 以
www-data
的身份执行 CLI 任务
- 切换到 docker 并且还对所有内容使用
www-data
范围
我们决定 运行 Apache 和 FPM 在登录用户下进行处理。为避免安全问题,Apache 应首先绑定到 127.0.0.1:
在/etc/apache2/ports.conf
Listen 127.0.0.1:80
Listen ::1:80
<IfModule ssl_module>
Listen 127.0.0.1:443
Listen ::1:443
</IfModule>
接下来,在 /etc/apache2/envvars
中,我们将变量 APACHE_RUN_USER
和 APACHE_RUN_GROUP
设置为登录用户 dev
。
对于 FPM 我们设置了所有 /etc/php/*/fpm/pool.d/www.conf
user = dev
group = dev
listen.owner = dev
listen.group = dev
最后我们重新启动 apache 并处理 FPM 并确保项目文件归登录用户所有。
您可能还想删除 www-data 用户(或 chown
他们)的旧会话
sudo rm /var/lib/php/sessions/*
我们在 Ubuntu 20.04 上的 Web 开发设置如下所示:
- 我们 运行 Apache 作为 www-data(相当标准)
- 用户以“dev”身份登录(例如)
- 所以 PHPStorm 运行s 作为开发者
这通常会导致问题,例如当 CLI 创建一个Apache 稍后尝试更改的文件。
多年来(即使用 Magento 2、Contao、Laravel、......在我们开始使用 Shopware 6 之前)我们在项目文件夹中使用以下命令运行良好,使用 Linux ACL:
export FOLDER=projects && sudo setfacl -Rm u:$USER:rwx $FOLDER && sudo setfacl -Rm u:www-data:rwx $FOLDER && sudo setfacl -Rm d:u:$USER:rwx $FOLDER && sudo setfacl -Rm d:u:www-data:rwx $FOLDER && sudo chmod 600 config
因此 ACL 设置正确并且访问适用于网络服务器和 CLI 命令。
然后是 Shopware。
构建或更改主题时,底层 Flysystem 会尝试设置文件的可见性(权限)。虽然您可以使用上面的 setfacl 技巧正确 read/write 文件,但 chmod 仅适用于文件所有者(即“dev”)。
所以我们得到:
detail: "Warning: chmod(): Operation not permitted"
meta: {trace: [,…], file:
"/home/dev/projects/example.com/vendor/league/flysystem/src/Adapter/Local.php",
我们想知道对此有什么优雅的解决方案?其他人如何解决这个问题?
我们正在考虑的方法:
- 让 apache 运行 处于与登录用户相同的用户下
- 以
www-data
的身份执行 CLI 任务
- 切换到 docker 并且还对所有内容使用
www-data
范围
我们决定 运行 Apache 和 FPM 在登录用户下进行处理。为避免安全问题,Apache 应首先绑定到 127.0.0.1:
在/etc/apache2/ports.conf
Listen 127.0.0.1:80
Listen ::1:80
<IfModule ssl_module>
Listen 127.0.0.1:443
Listen ::1:443
</IfModule>
接下来,在 /etc/apache2/envvars
中,我们将变量 APACHE_RUN_USER
和 APACHE_RUN_GROUP
设置为登录用户 dev
。
对于 FPM 我们设置了所有 /etc/php/*/fpm/pool.d/www.conf
user = dev
group = dev
listen.owner = dev
listen.group = dev
最后我们重新启动 apache 并处理 FPM 并确保项目文件归登录用户所有。
您可能还想删除 www-data 用户(或 chown
他们)的旧会话
sudo rm /var/lib/php/sessions/*