Я пытаюсь настроить контейнерную версию базовой Craft CMS с использованием Docker с Php и Nginx. Похоже, что 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. Хотя я попытался открыть оболочку bash внутри обоих контейнеров nginx и php и папки chmod 777 craft / config, и я все еще получаю эту ошибку, поэтому я немного запутался в том, как ее исправить.
РЕДАКТИРОВАТЬ 1 ——
Я смог решить эту проблему, внедрив следующее в свой Dockerfile в моем профиле сборки php.
RUN usermod -u 1000 www-data
RUN usermod -G staff www-data
RUN chown -R www-data:www-data /var/www
Я не уверен, что это самый безопасный способ.
В вашем докер-compose.yml приложение определение контейнера декларация объема ./ Поставщиков: / вар / WWW эффективно перезаписывает ./ Приложение: / вар / WWW / HTML. / Вар / WWW / корабль / поэтому, скорее всего, не существует.
Объемные декларации для приложение вместо этого должен выглядеть следующим образом:
app:
image: php:7.0-fpm
volumes:
- ./app:/var/www/html
- ./vendors:/var/www/vendors
command: "true"
Других решений пока нет …