gpt4 book ai didi

php - 在Docker上使用Php/Nginx的Craft CMS无法在文档根目录之外编写

转载 作者:行者123 更新时间:2023-12-02 18:43:47 25 4
gpt4 key购买 nike

我正在尝试使用Docker和Php和Nginx设置基本Craft CMS的容器化版本。 Craft似乎无法写入Nginx文档根目录之外的文件夹。 (有关更多详细信息,请参见文章底部。)我正在使用Docker-Compose,这是我当前的Docker-compose.yml:

nginx:
build: ./compose/nginx/
ports:
- 80:80
links:
- php
volumes_from:
- app

php:
build: ./compose/php/
expose:
- 9000
links:
- mysql
volumes_from:
- app

app:
image: php:7.0-fpm
volumes:
- ./app:/var/www/html
- ./vendors:/var/www
command: "true"

mysql:
image: mysql:latest
volumes_from:
- data
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: project
MYSQL_USER: project
MYSQL_PASSWORD: project

data:
image: mysql:latest
volumes:
- /var/lib/mysql
command: "true"

phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8080:8080
links:
- mysql
environment:
PMA_HOST: mysql

该设置可以完美运行,这是我的两个Nginx构建文件
-DockerFile:
FROM nginx:latest

COPY ./default.conf /etc/nginx/conf.d/default.conf

Default.conf
server {
listen 80 default_server;
root /var/www/html;
index index.html index.php;

charset utf-8;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }

access_log off;
error_log /var/log/nginx/error.log error;

sendfile off;

client_max_body_size 100m;

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}

location ~ /\.ht {
deny all;
}
}

一切工作几乎完美无缺,直到我尝试部署Craft CMS为止,我了解我并没有所有的php扩展名,但是我不相信这会影响我的问题。我不断收到错误消息,/ var / www / craft / config无法用PHP写入。请解决此问题。因此,我假设这是Nginx和PHP权限的错误。虽然,我尝试在我的nginx和php容器以及chmod 777 craft / config文件夹中同时打开bash shell,但仍然收到此错误,因此对于如何解决它有些困惑。

编辑1 ------
通过将以下内容实现到我的php构建配置文件中的Dockerfile中,我能够解决此问题。
RUN usermod -u 1000 www-data
RUN usermod -G staff www-data
RUN chown -R www-data:www-data /var/www

我不确定这是否是最安全的方法。

最佳答案

在您的docker-compose.yml 应用程序容器定义中,卷声明 ./vendors:/var/www 有效覆盖 ./app:/var/www/html 。 / var / www / craft /因此很可能不存在。
应用程序的音量声明应如下所示:

app:
image: php:7.0-fpm
volumes:
- ./app:/var/www/html
- ./vendors:/var/www/vendors
command: "true"

关于php - 在Docker上使用Php/Nginx的Craft CMS无法在文档根目录之外编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34573881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com