首页 > 解决方案 > Shopware 6 与我们的 Web 开发设置(Apache 和 ACL)不兼容

问题描述

我们在 Ubuntu 20.04 上的 Web 开发设置如下所示:

这通常会导致问题,即 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",

我们想知道什么是一个优雅的解决方案?其他人是如何解决这个问题的?

我们正在考虑的方法:

标签: apachechmodshopwareflysystem

解决方案


我们决定在登录用户下运行 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_USERAPACHE_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/*

推荐阅读