Как адаптировать существующие конфигурационные файлы для использования с Docker?

Я планирую внедрить Docker в текущий проект и столкнулся с проблемой при перезагрузке Nginx. В процессе возникает предупреждение: <i>[warn] conflicting server name "lk.project.local" on 0.0.0.0:80, ignored</i>. 

Вот структура моего проекта: 
<pre><code>frontend
   - web
      - index.php
docker
   - nginx
     - api.project.local.conf
     - lk.project.local.conf
   - php8.1-fpm
     - Dockerfile
   - php.ini
docker-compose.yml</code></pre> 

Кроме того, ниже представлен содержимое Dockerfile: 
<pre><code>FROM php:8.1-fpm

RUN apt-get update
RUN apt-get install -y curl git zip

RUN docker-php-ext-install pdo pdo_mysql

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN usermod -u 1000 www-data &amp;&amp; groupmod -g 1000 www-data

USER "1000:1000"

WORKDIR /var/www

ENTRYPOINT [ "php-fpm" ]</code></pre> 

А вот содержание docker-compose.yml: 
<pre><code class="yaml">version: '3.2'

networks:
  project:

services:
  nginx:
    container_name: project_nginx
    image: nginx:1.18.0
    ports:
      - 80:80
    volumes:
      - ./:/var/wwww/project
      - ./docker/nginx/api.project.local:/etc/nginx/conf.d/api.project.local.conf
      - ./docker/nginx/b.project.local:/etc/nginx/conf.d/b.project.local.conf
      - ./docker/nginx/lk.project.local:/etc/nginx/conf.d/b.project.local.conf
    networks:
      - project
    depends_on:
      - php
  php:
    container_name: project_php
    build: /docker/php8.1-fpm
    volumes:
      - ./:/var/wwww/project
      - ./docker/php.ini:/usr/local/etc/php/conf.d/php.ini
    networks:
      - project
    depends_on:
      - db
  db:
    container_name: project_db
    command: ["--default-authentication-plugin=m
  • 5 октября 2024 г. 20:14
Ответы на вопрос 2
Чтобы адаптировать конфигурационные файлы вашего проекта под Docker и устранить проблему с конфликтующими `server_name`, можно учесть несколько моментов. Давайте разберем это шаг за шагом.

1. **Проблема с конфликтующими именами серверов**:
   Сообщение `conflicting server name "lk.project.local" on 0.0.0.0:80, ignored` возникает, когда несколько виртуальных хостов в конфигурации Nginx содержат одно и то же имя сервера. В вашем `docker-compose.yml` вы указали два файла конфигурации для одного и того же виртуального хоста `lk.project.local`:

   ```yaml
   - ./docker/nginx/api.project.local:/etc/nginx/conf.d/api.project.local.conf
   - ./docker/nginx/b.project.local:/etc/nginx/conf.d/b.project.local.conf
   - ./docker/nginx/lk.project.local:/etc/nginx/conf.d/b.project.local.conf  # Здесь ошибка
   ```

   Вам следует исправить это на:

   ```yaml
   - ./docker/nginx/lk.project.local.conf:/etc/nginx/conf.d/lk.project.local.conf
   ```

2. **Путь к файлам в томах**:
   Убедитесь, что вы правильно монтируете директории и указываете нужные пути к вашим файлам. В вашем случае `- ./:/var/wwww/project` должен быть изменен на:

   ```yaml
   - ./:/var/www/project
   ```

   Проверьте, чтобы путь к директории был корректным. Существует несколько опечаток, например, `wwww` вместо `www`.

3. **Настройка конфигурационных файлов Nginx**:
   Вам нужно убедиться, что конфигурационные файлы Nginx правильно настроены для работы в Docker. Примеры конфигурации виртуальных хостов для Nginx должны содержать соответствующие блоки:

   ```nginx
   server {
       listen 80;
       server_name api.project.local;

       root /var/www/project/frontend/web;
       index index.php;

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

       location ~ \.php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass php:9000; # Убедитесь, что php отправляется на правильный порт
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
       }
   }
   ```

4. **Обновление docker-compose.yml**:
   Убедитесь, что все ваши сервисы правильно настроены и зависимости обрабатываются. Вот измененный фрагмент `docker-compose.yml`:

   ```yaml
   version: '3.2'

   networks:
     project:

   services:
     nginx:
       container_name: project_nginx
       image: nginx:1.18.0
       ports:
         - 80:80
       volumes:
         - ./:/var/www/project
         - ./docker/nginx/api.project.local.conf:/etc/nginx/conf.d/api.project.local.conf
         - ./docker/nginx/b.project.local.conf:/etc/nginx/conf.d/b.project.local.conf
         - ./docker/nginx/lk.project.local.conf:/etc/nginx/conf.d/lk.project.local.conf
       networks:
         - project
       depends_on:
         - php
     php:
       container_name: project_php
       build: /docker/php8.1-fpm
       volumes:
         - ./:/var/www/project
         - ./docker/php.ini:/usr/local/etc/php/conf.d/php.ini
       networks:
         - project
       depends_on:
         - db
     db:
       container_name: project_db
       ...
   ```

Теперь у вас не должно возникать сообщений о конфликте имен серверов, и все ваши конфигурации должны быть правильно подключены к Nginx через Docker. После этих правок рекомендуется перезапустить Docker-контейнеры с помощью:

```bash
docker-compose down
docker-compose up --build
```

Это должно помочь в корректной загрузке конфигурации Nginx и запуске вашего проекта в Docker.
в структуре проекта пишете про два файла 
- api.project.local.conf
- lk.project.local.conf


а в композе монтируете без расширения. (хотя причиной это вряд ли может быть, да и warn эт не особо страшно, лучше бы информацию что не работает)

upd
плюс монтирование одного и того же файла в разные конфигурации
- ./docker/nginx/b.project.local:/etc/nginx/conf.d/b.project.local.conf
- ./docker/nginx/lk.project.local:/etc/nginx/conf.d/b.project.local.conf
Похожие вопросы