Смонтировать именованный том WordPress в подкаталог контейнера NGINX с помощью docker-compose

#wordpress #docker #nginx #docker-compose

#wordpress #docker #nginx #docker-compose

Вопрос:

Следующая конфигурация правильно обслуживает экземпляр WordPress. (Некоторые несвязанные детали конфигурации опущены для краткости.)

docker-compose.yml

 version: "3.7"

services:
  nginx:
    image: nginx:alpine
    links:
      - wordpress-1
    volumes:
      - wordpress-1_files:/var/www/html

  wordpress-1:
    image: wordpress:php7.3-fpm-alpine
    volumes:
      - wordpress-1_files:/var/www/html

volumes:
  wordpress-1_files:
 

wordpress-1.conf

 server {
  server_name wordpress-1.com;
  root /var/www/html;

  index index.php;

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

  location ~ .php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        fastcgi_pass wordpress-1:9000;
  }
}
 

Тем не менее, я хотел бы смонтировать wordpress-1_files том в подкаталог ( /var/www/html/wordpress-1 ) в nginx контейнере (чтобы я мог обслуживать несколько приложений с одного и того же прокси-сервера NGINX). Приведенная ниже конфигурация возвращает a 404 с a File not found. в теле ответа. Этот результат возникает с любой из двух SCRIPT_FILENAME строк wordpress-1.conf , приведенных ниже.

docker-compose.yml

 version: "3.7"

services:
  nginx:
    image: nginx:alpine
    links:
      - wordpress-1
    volumes:
      - wordpress-1_files:/var/www/html/wordpress-1

  wordpress-1:
    image: wordpress:php7.3-fpm-alpine
    volumes:
      - wordpress-1_files:/var/www/html

volumes:
  wordpress-1_files:
 

wordpress-1.conf

 server {
  server_name wordpress-1.com;
  root /var/www/html/wordpress-1;

  index index.php;

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

  location ~ .php$ {
        include fastcgi_params;
        # fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        fastcgi_param SCRIPT_FILENAME /var/www/html/wordpress-1$fastcgi_script_name;
        fastcgi_pass wordpress-1:9000;
  }
}
 

Когда я проверяю NGINX error_log debug , я вижу это:

FastCGI отправлен в stderr: «Основной сценарий неизвестен» при чтении заголовка ответа из восходящего потока, клиент: 555.69.70.132, сервер: wordpress-1.com , запрос: «GET / HTTP/1.1», восходящий поток: «fastcgi: // 172.18.0.3:9000», хост: «wordpress-1.com «

Это наводит меня на мысль, что существует проблема с SCRIPT_FILENAME , но /var/www/html$fastcgi_script_name /var/www/html/wordpress-1$fastcgi_script_name , похоже, ни то, ни другое не работает.

Вопрос:

Как я могу настроить свою вторую пару конфигурационных файлов, чтобы я мог обслуживать WordPress при монтировании тома WordPress в каталог, отличный от /var/www/html nginx контейнера?

Примечание: Приведенный выше пример представляет собой уменьшенный, минимальный пример проблемы, которую я пытаюсь решить. Фактический проект, над которым я работаю, находится здесь.

Ответ №1:

Тьфу, оказывается, мое тестирование было недостаточно тщательным (несмотря на то, что я занимался этим несколько выходных и так далее). Решение фактически использовало:

fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

Это потому wordpress:php7.3-fpm-alpine , что внутри изображения находится путь, по которому расположены файлы WordPress.

Во время тестирования я забыл отключить кэширование CloudFlare, которое находилось перед моим промежуточным сайтом. Итак, мои тесты не всегда проверяли то, что я думал…

Комментарии:

1. Нашли ли вы способ изменить местоположение установки WordPress по умолчанию ( /var/www/html/ ) на что-то другое, тем самым избегая этой проблемы?

2. Хм, не думаю, что я пытался. Я думаю, вы могли бы создать свой собственный образ Docker, который использует официальный образ WordPress в качестве основы, и переместить файлы в нужное место. Но я еще не пробовал этого делать.

3. Да, это действительно интересная идея … спасибо.