Laravel 存储符号:链接在本地环境中不起作用

mar*_*rks 7 symlink storage laravel docker

我使用默认的 laravel 文件夹结构和文件系统public

'public' => [
    'driver'     => 'local',
    'root'       => storage_path('app/public'),
    'url'        => env('APP_URL') . '/storage',
    'visibility' => 'public',
],
Run Code Online (Sandbox Code Playgroud)

一切都在 docker 上运行,完整的 laravel 文件夹安装到/var/www/html

#... Laravel PHP-FPM service definition
  volumes:
    - "./:/var/www/html"
#...
Run Code Online (Sandbox Code Playgroud)

当我运行php artisan storage:link然后cd /var/www/html/publicls -la看到符号链接存在:

lrwxr-xr-x 1 root root 32 May 5 11:19 storage -> /var/www/html/storage/app/public

如果我然后检查链接的文件夹是否也存在于容器中,cd /var/www/html/storage/app/public则一切都按预期存在。

另外,直接检查时ls -la /var/www/html/public/storage/它会显示链接文件夹的内容。所以从符号链接的角度来看一切都正常

# ls -la /var/www/html/public/storage/
total 512
drwxr-xr-x  4 www-data www-data    128 May  5 11:21 .
drwxr-xr-x 11 www-data www-data    352 Apr 19 14:03 ..
-rw-r--r--  1 www-data www-data     14 Feb 16 16:58 .gitignore
-rw-r--r--  1 www-data www-data 519648 May  5 10:58 sample.png
Run Code Online (Sandbox Code Playgroud)

但是,当打开 url 时,/storage/sample.png服务器返回 404。

的其余内容/var/www/html/public工作正常,因此例如/var/www/html/public/test.png在 下可见localhost/test.png

在生产中,一切都很好。任何想法为什么符号链接在本地系统上不起作用而链接实际上是正确的?

我已经尝试删除存储链接并再次设置符号链接。

Tom*_*Tom 5

您提到您正在使用 docker。我认为它不能在本地工作但在生产中工作的原因可能是两个部署之间存在配置转换。

为了让它工作,Nginx 容器必须能够访问存储文件夹,因为它应该为位于那里的资产提供服务。我猜目前情况并非如此,仅安装了公共文件夹。

检查整个项目或两者./public是否./storage已安装到 Nginx 容器中。

像这样的东西:

services:
  #...
  nginx:
   #...
   volumes:
    - "./public:/var/www/html/public:ro"
    - "./storage/app:/var/www/html/storage/app:ro"
    #...
Run Code Online (Sandbox Code Playgroud)