Как установить Drupal в подпапках поддомене с использованием сервера Nginx и контейнеров Docker

Вопрос или проблема

Я хочу развернуть установку Drupal в подкаталоге поддомена. Я использую контейнеры Docker, так как запускаю различные сервисы и благодаря этому могу придерживаться одной и той же синтаксической и структурной настройки.

Я запускаю обратный прокси-сервер jwilder-nginx, за которым у меня стоит обычный веб-сервер nginx на поддомене website.domain.com (оригинальный домен скрыт).

Я уже получаю доступ к index.html (website.domain.com) и установке phpMyAdmin (website.domain.com/pma), и теперь хочу развернуть несколько установок Drupal на website.domain.com/v22, website.domain.com/v23 и т.д., но не могу получить доступ к подкаталогам поддомена.

Эти установки Drupal – это контейнеры Docker drupal-fpm-alpine, которые имеют копию работающего сайта с другого.domain.com с адаптированным drupal-site-settings.php.

  v23:
    container_name: v23
    image: drupal:8.7.8-fpm-alpine
    restart: unless-stopped
    networks:
      - proxy-tier
    volumes:
      - ./html/v23:/var/www/html

  v22:
    ...

  v21:
    ...

Мой nginx.conf выглядит следующим образом:

server {
    listen 80;
    listen [::]:80;
    server_name website.domain.com;

    location / {
        # Первая попытка обслужить запрос как файл, затем
        # как каталог, затем вернуться к отображению 404.
        try_files $uri =404;
    }

    location ~ \/pma/ {
        rewrite ^/pma(/.*)$ $1 break;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://pma;
    }

    location /v23/ {
        location ~ / {
            try_files $uri /index.php$is_args$args;
        }

        rewrite ^/core/authorize.php/core/authorize.php(.*)$ /core/authorize.php$1;

        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass v23:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }

        location ~ /\.ht {
            deny all;
        }

        location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
            expires max;
            log_not_found off;
        }
    }
    location /v22/ {
    #...
       fastcgi_pass v22:9000;
    #...
    }
    location /v21/ {
    #...
       fastcgi_pass v21:9000;
    #...
    }
}

Эта конфигурация является измененной копией конфигурации моего работающего nginx.conf с другого.domain.com, где я запускаю Drupal без подкаталога, но это не работает. В итоге я сейчас застрял с загруженным index.php и ошибкой 404 Not Found на website.domain.com/v23.

#2024/09/18 15:32:47 [error] 7#7: *1 directory index of "/etc/nginx/html/v23/" is forbidden, client: 172.25.0.4, server: website.domain.com, request: "GET /v23/ HTTP/1.1", host: "website.domain.com"

Если я пытаюсь получить доступ к самому index.php через website.domain.com/v23/index.php, он просто загружает этот файл вместо того, чтобы запускать его через php-fpm.

Может кто-нибудь направить меня к рабочему решению для этого?

Ответ или решение

Для настройки установки Drupal в подпапках на поддомене с использованием сервера Nginx и контейнеров Docker, вам необходимо внести определенные изменения в конфигурацию Nginx и убедиться, что все соответствующие пути корректно настраиваются для работы с PHP-FPM.

Шаг 1: Конфигурация Docker

В вашем docker-compose.yml убедитесь, что для каждого экземпляра Drupal (v21, v22, v23) настроены правильные тома и имена контейнеров. Примерный фрагмент для установки v23 может выглядеть следующим образом:

version: '3.7'

services:
  v23:
    container_name: v23
    image: drupal:8.7.8-fpm-alpine
    restart: unless-stopped
    networks:
      - proxy-tier
    volumes:
      - ./html/v23:/var/www/html

  # Добавьте дополнительные экземпляры v22, v21 аналогичным образом

Шаг 2: Настройка конфигурации Nginx

Ваш текущий фрагмент конфигурации Nginx нуждается в исправлениях. Приведем обновленный пример конфигурации:

server {
    listen 80;
    listen [::]:80;
    server_name website.domain.com;

    root /var/www/html;

    location / {
        try_files $uri $uri/ =404;
    }

    location /pma/ {
        rewrite ^/pma(/.*)$ $1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://pma;
    }

    location /v23/ {
        try_files $uri $uri/ /v23/index.php$is_args$args;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass v23:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$v23$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info; 
        }

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

    location /v22/ {
        try_files $uri $uri/ /v22/index.php$is_args$args;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass v22:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$v22$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info; 
        }
    }

    location /v21/ {
        try_files $uri $uri/ /v21/index.php$is_args$args;

        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass v21:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$v21$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info; 
        }
    }

    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

Шаг 3: Проверка прав доступа к папкам

Убедитесь, что у контейнера Nginx есть доступ к директориям с вашими установками Drupal. Проверьте права доступа:

chmod -R 755 ./html/v23
chmod -R 755 ./html/v22
chmod -R 755 ./html/v21

Также проверьте, что у пользователя, под которым работает Nginx, есть права доступа к папкам, где установлены Drupal (например, www-data).

Шаг 4: Проверка конфигурации и перезапуск

После внесения всех изменений проверьте конфигурацию Nginx на наличие ошибок:

nginx -t

Если ошибок нет, перезапустите Nginx, чтобы применить изменения:

docker-compose restart <nginx-service-name>

Заключение

Теперь, после всех модификаций, вы должны иметь возможность получить доступ к вашим установкам Drupal по адресам website.domain.com/v22, website.domain.com/v23 и т.д. Убедитесь, что все пути правильно настроены и доступ к файлам не ограничен.

Если у вас по-прежнему возникают проблемы, проверьте логи Nginx и PHP-FPM на наличие дополнительных подсказок об ошибках.

Оцените материал
Добавить комментарий

Капча загружается...