DDEV Drupal 环境中的私有文件
Private files in a DDEV Drupal environment
这里有一些神秘的东西:我是 运行 Windows WSL2 上的 Drupal 9 安装,带有 Docker 和 DDEV,效果很好。现在我决定为图像设置一个私有文件目录。我已经按照所有说明(例如,与 web 目录处于同一级别的私有目录)这样做了。我对 cPanel 上的实时服务器做了同样的事情。然后我创建了一个只有图像字段的简单测试实体,指定上传的图像进入私有目录。
cPanel 服务器版本完全符合预期——当我创建一个新的图像实体时,该图像直接进入了私有目录。所以我很确定我的程序是正确的。
但是 DDEV 版本做了一些神秘的事情。当我创建一个新的图像实体时,一切都很顺利,实体已创建,我可以看到图像等。但是私有目录是空的。此外,如果我搜索整个 WSL2 文件系统,也找不到图像文件。然而它就在那里,在某个地方。我已经创建了几个这样的实体,现在有大约十个图像文件的一个很好的列表,所有这些都显示得很好。并且所有这些在 WSL2 文件系统中都找不到(至少通过文件名搜索),并且肯定不在指定的私有目录中。
那么他们在哪里??关于这个谜团有什么想法吗? :-)
谢谢!
P.S。我只注意到一条线索。第一次,我不小心将我的私有文件目录指定在 web 目录下面。然后它正常工作,我看到了上传的图像文件。但是如您所知,说明是它不应该在 web 目录中,而应该在它之外,而不是 HTTPS 可访问的。所以也许 DDEV 有某种不寻常的特性,使得在 web 目录之外拥有私有目录成为一个问题。
问题由rfay对原文的评论回答post。
要在 ddev 中使用 Drupal 8.9 配置私有文件系统,请执行以下操作:
在/var/www/html中创建私有文件夹,例如/var/www/html/privatefiles(不高于html,ddev重启时会删除)
确保该文件夹可由网络服务器写入,就像网络文件夹一样
drwxr-xr-x 2 myuser myuser 4096 january 15 16:36 privatefiles/
drwxr-xr-x 8 myuser myuser 4096 january 15 18:59 web/
在 settings.php
中设置 $settings['file_private_path'] 值
$settings['file_private_path'] = '/var/www/html/privatefiles';
清除缓存,Drupal 将在您指定的文件夹中生成适当的 .htaccess 文件
确认在 admin/report/status 处未发现文件系统或私有文件目录错误。可以在 admin/config/media/file-system.
查看设置
您只需将以下几行添加到您的分布式 settings.php
即可仅在 DDEV 内部生效以创建和设置私有文件目录:
if (isset($_ENV['DDEV_PROJECT'])) {
$private_files_path = $app_root . '/' . $site_path . '/files/private';
if (!is_dir($private_files_path)) {
mkdir($private_files_path, 0755);
}
$settings['file_private_path'] = $private_files_path;
}
这里有一些神秘的东西:我是 运行 Windows WSL2 上的 Drupal 9 安装,带有 Docker 和 DDEV,效果很好。现在我决定为图像设置一个私有文件目录。我已经按照所有说明(例如,与 web 目录处于同一级别的私有目录)这样做了。我对 cPanel 上的实时服务器做了同样的事情。然后我创建了一个只有图像字段的简单测试实体,指定上传的图像进入私有目录。
cPanel 服务器版本完全符合预期——当我创建一个新的图像实体时,该图像直接进入了私有目录。所以我很确定我的程序是正确的。
但是 DDEV 版本做了一些神秘的事情。当我创建一个新的图像实体时,一切都很顺利,实体已创建,我可以看到图像等。但是私有目录是空的。此外,如果我搜索整个 WSL2 文件系统,也找不到图像文件。然而它就在那里,在某个地方。我已经创建了几个这样的实体,现在有大约十个图像文件的一个很好的列表,所有这些都显示得很好。并且所有这些在 WSL2 文件系统中都找不到(至少通过文件名搜索),并且肯定不在指定的私有目录中。
那么他们在哪里??关于这个谜团有什么想法吗? :-)
谢谢!
P.S。我只注意到一条线索。第一次,我不小心将我的私有文件目录指定在 web 目录下面。然后它正常工作,我看到了上传的图像文件。但是如您所知,说明是它不应该在 web 目录中,而应该在它之外,而不是 HTTPS 可访问的。所以也许 DDEV 有某种不寻常的特性,使得在 web 目录之外拥有私有目录成为一个问题。
问题由rfay对原文的评论回答post。
要在 ddev 中使用 Drupal 8.9 配置私有文件系统,请执行以下操作:
在/var/www/html中创建私有文件夹,例如/var/www/html/privatefiles(不高于html,ddev重启时会删除)
确保该文件夹可由网络服务器写入,就像网络文件夹一样
drwxr-xr-x 2 myuser myuser 4096 january 15 16:36 privatefiles/ drwxr-xr-x 8 myuser myuser 4096 january 15 18:59 web/
在 settings.php
中设置 $settings['file_private_path'] 值$settings['file_private_path'] = '/var/www/html/privatefiles';
清除缓存,Drupal 将在您指定的文件夹中生成适当的 .htaccess 文件
确认在 admin/report/status 处未发现文件系统或私有文件目录错误。可以在 admin/config/media/file-system.
查看设置
您只需将以下几行添加到您的分布式 settings.php
即可仅在 DDEV 内部生效以创建和设置私有文件目录:
if (isset($_ENV['DDEV_PROJECT'])) {
$private_files_path = $app_root . '/' . $site_path . '/files/private';
if (!is_dir($private_files_path)) {
mkdir($private_files_path, 0755);
}
$settings['file_private_path'] = $private_files_path;
}