apache - Shopware 6 与我们的 Web 开发设置(Apache 和 ACL)不兼容
问题描述
我们在 Ubuntu 20.04 上的 Web 开发设置如下所示:
- 我们将 Apache 作为 www-data 运行(相当标准)
- 用户以“dev”身份登录(例如)
- 所以 PHPStorm 作为 dev 运行
这通常会导致问题,即 CLI 命令(例如构建主题)和通过 Web 界面执行的操作(例如在管理面板中更改主题颜色)与文件权限冲突,例如 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 技巧正确读取/写入文件,但 chmod 仅适用于文件所有者(即“dev”)。
所以我们得到:
detail: "Warning: chmod(): Operation not permitted"
meta: {trace: [,…], file:
"/home/dev/projects/example.com/vendor/league/flysystem/src/Adapter/Local.php",
我们想知道什么是一个优雅的解决方案?其他人是如何解决这个问题的?
我们正在考虑的方法:
- 让 apache 在与登录用户相同的用户下运行
- 执行 CLI 任务
www-data
- 切换到 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/*