php - php artisan storage:使用 Laravel 和 Docker 时的链接问题
问题描述
当人们设置 Docker 容器以使用该容器为 Laravel 应用程序提供服务时,这似乎是一个常见问题。
我的设置主要是这样(我删除了一些其他服务,因为我认为它们不适用于这里)
#docker-compose up --build
version: "2"
services:
nginx:
image: nginx
depends_on: [pacs-1,mysql_db]
restart: unless-stopped
ports: ["443:443"]
volumes:
- ./nginx-home:/nginx-home
- ./tls:/etc/nginx/tls
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
php-fpm:
build: php-fpm
volumes:
- ./nginx-home:/nginx-home
Laravel 项目的 nginx 的 default.conf 是:
server {
# implement the TLS
listen 443 ssl;
server_name dockerlaravel.medical.ky;
root /nginx-home/PortalRads/public;
access_log /nginx-home/logs/PortalRads-access.log;
error_log /nginx-home/logs/PortalRads-error.log info;
index index.php index.html index.htm;
client_max_body_size 4000M;
client_body_buffer_size 4000M;
# skip favicon.ico
#
#location = /favicon.ico {
#access_log off;
return 444;
#
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
error_page 404 /error_pages/404.php;
error_page 403 /error_pages/403.php;
error_page 401 /error_pages/401.php;
error_page 500 502 503 504 /errors/50x.html;
}
}
一旦我完成所有设置,一切似乎都可以正常工作。Composer 全局安装在主机上,我在主机端使用 composer update 来更新包。似乎没有必要使用我的设置在 Docker 上安装 composer,因为 php 容器具有 php 并且 artisan 二进制文件位于我的 Laravel 应用程序的根目录中。
我遇到的问题是从公共/存储到存储文件夹的符号链接似乎不起作用。我尝试了各种方法来创建链接。我实际上有单独的 nginx 和 php 容器,所以 artisan 不会在 nginx 容器中运行。
由于我使用 nginx 作为网络服务器,想知道是否可能有另一个位置块或服务器块基本上会在服务器端创建该连接,这样我就不必摆弄工匠创建的符号链接?
location /storage/ {
root . . .
. . .
}
我可以使用以下命令从 CLI 进入这些容器:
sudo docker exec -it orthanc-docker-dev_ris_php-fpm_1 /bin/bash sudo docker exec -it orthanc-docker-dev_ris_nginx_1 /bin/bash
我已经尝试从容器内创建符号链接,但这似乎也不起作用。
例如,我在 Laravel 中使用 JetStream 和 Livewire,那里的个人资料照片映射到:
https://dockerlaravel.medical.ky/storage/profile-photos/image.png
但这会产生 404 错误,因为符号链接不能正确设置。
关于这个问题有很多帖子。只是想知道“最佳”解决方案是什么,最好是在容器构建期间可以自动化的解决方案,这样用户就不必担心这一点。
谢谢。
解决方案
推荐阅读
- html - 使用 Golang 在特定打印机上打印 HTML
- reactjs - 内联使用情绪反应主题颜色
- javascript - 如何使用 formdata reactjs 发布图像数组
- http - 尽管 WriteHeader 用于返回另一个状态代码,但返回 200 状态代码
- ios - iOS SystemConfiguration plist - 更改HTTP代理不生效
- ios - 用画笔快速绘制
- html - Bootstrap 导航栏折叠没有折叠
- vba - excel to powerpoint Shapes.PasteSpecial DataType:=0 随机错误
- ansible - Ansible - 无法获取远程主机名
- r - 如何根据另一个列表的值从列表中提取元素?