我创建了一个非常小而简单的docker-compose用于laravel的小测试。关于一切工作除此之外我无法加载我的样式表。它在代客服务中完美地运作。
这是我的docker-compose
version: '2'
services:
web:
build:
context: ./
dockerfile: ./dockerfiles/web.docker
ports:
- 8080:80
- 9090:8080
links:
- app
- mariadb
app:
build:
context: ./
dockerfile: ./dockerfiles/app.docker
volumes:
- ~/workbench/laravel/testproject:/var/www/testproject
depends_on:
- mariadb
mariadb:
image: mariadb:10.2
environment:
MYSQL_ROOT_PASSWORD: toor
MYSQL_DATABASE: testproject
TEST_DB_NAME: laravel_test
MYSQL_USER: laravel
MYSQL_PASSWORD: laravel
MARIADB_DATABASE: testproject
volumes:
- ./mariadb:/var/mariadb
ports:
- 33061:3306
这是我的nhostx vhost
server {
listen 80;
index index.php;
root /var/www/testproject/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
我可以访问我的所有路线,功能似乎工作得很好,只是我的javascript,图片或样式表都没有加载。 例如,我尝试从模板中加载引导程序,如下所示:
<link rel="stylesheet" href="/homer/vendor/bootstrap/dist/css/bootstrap.css" />
在我的公共文件夹中,我有整个目录/public/homer/vendor/bootstrap/dist/css/bootstrap.css,该文件位于正确的目录中。
我是否遗漏了我必须在vhost中做的事情,以确保这些文件可以正常加载?
我试过编辑
的路径<link rel="stylesheet" href="/homer/vendor/bootstrap/dist/css/bootstrap.css" />
到
<link rel="stylesheet" href="public/homer/vendor/bootstrap/dist/css/bootstrap.css" />
以及任何形式的公众。
但似乎没有效果。我也不必改变这一点,所以我的路径可以在docker和valet之间保持不变。
答案 0 :(得分:1)
显然我必须将索引server.php添加到我的vhost.conf中,所以它看起来如下:
server {
listen 80;
index index.php server.php;
root /var/www/testproject/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
但是我仍然不确定这是如何工作的,因为我在没有index.php的公共文件夹中设置了root。 server.php只加载index.php,我在这里错过了关于nginx索引如何工作的内容吗?
答案 1 :(得分:1)
这是一个古老的问题,但是今天我遇到了同样的问题,并通过向 web 服务添加相同的volumes
选项来解决此问题。之后,nginx可以查找 public 目录,并在该目录中找到所有资产文件。
volumes:
- ~/workbench/laravel/testproject:/var/www/testproject
如果您未在 web 服务中提供卷选项,则docker不会将文件映射到容器,并且/var/www/testproject
目录中将没有文件,因此找不到文件。
答案 2 :(得分:0)
尝试使用Laravel的内置asset()
方法,该方法会自动将主机预先添加到public
文件夹中。
<link rel="stylesheet" href="{{ asset('/bootstrap/dist/css/bootstrap.css') }}" />
注意:您可能必须使用Mix将bootstrap
文件夹移入
public
目录,或者自己动手。