如何在使用 docker 部署的 sulu 应用程序中保留用户的上传?

How to persist users' uploads in a sulu application deployed with docker?

我在 sulu 应用程序中设置了 symfony-docker 配置。由于应用程序根目录的绑定安装,在开发中一切正常。但是在生产中,用户上传的媒体文件在容器重启后不会持久化。

我尝试在 docker-compose.yml(在 php 服务或 caddy 服务中)添加这样的卷:

services:
  php:
    volumes:
      - uploads:/srv/app/public/uploads
    ...

volumes:
  uploads:

但是,当我上传图片时并没有生成缩略图。而且,在模板中使用图像时,在获取媒体时出现以下错误:

Failed to create "/srv/app/public/uploads/media/homepage-1920x/04": mkdir(): Permission denied

缩略图不是在上传时生成的,而是在您第一次请求时生成的。这节省了很多 space,因为并非每个尺寸都需要每个图像。

示例 docker 仅用于开发的设置可在此处找到:

https://github.com/dunglas/symfony-docker/blob/main/docker-compose.yml

在正常的 linux 设置中,您需要确保允许您的网络服务器用户 / php fpm 用户访问 public/uploads 目录,这是通过以下方式完成的:

HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var public/uploads
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX var public/uploads

另请参阅:

https://docs.sulu.io/en/latest/cookbook/web-server/nginx.html#linux

使用 caddy 时可能需要类似的东西,或者在 docker 中有另一种方法可以告诉 caddy 如何为该目录设置正确的权限。