如何在使用 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 如何为该目录设置正确的权限。
我在 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 如何为该目录设置正确的权限。