Docker4Drupal как включить несколько сайтов?

Аватар пользователя VasyOK VasyOK 5 ноября 2020 в 12:06

Кто у нас нас на форуме разбирается в Docker4Drupal (и английском языке)?
Подскажите, как заставить работать одновременно несколько сайтов?
Инструкция вот: https://wodby.com/docs/1.0/stacks/drupal/local/#running-multiple-projects

Single port

  1. Download traefik.yml file (part of docker4x.tar.gz archive). Place it separately from your projects, it will be a global traefik container that will route requests to your projects on a specified port
  2. Now we need to provide traefik names of docker networks of our projects. Let's say projects directories with docker-compose.yml named foo and bar. Docker Compose will create default docker networks for these projects called foo_default and bar_default. Update external networks names accordingly in traefik.yml
  3. In docker-compose.yml of your projects comment out traefik service and make sure traefik.http.* labels have ${PROJECT_NAME}_ prefix
  4. Make sure$PROJECT_BASE_URL and $PROJECT_NAME (in .env file) differ, both hosts point to 127.0.0.1 in /etc/hosts
  5. Run your projects: make (or docker-compose up -d)
  6. Run stand-alone traefik: docker-compose -f traefik.yml up -d
  7. Now when you visit URL from $PROJECT_BASE_URL, traefik will route traffic to the corresponding docker networks

Но пока вопросов больше чем ответов.

Лучший ответ

Аватар пользователя VasyOK VasyOK 6 ноября 2020 в 16:57

Решение. Может кому-то пригодится. К сожалению в данных вопросах я не компетентен, не факт, что смогу подсказать.

Docker4Drupal устанавливал по инструкции niklan-а https://niklan.net/blog/172. Версия https://github.com/wodby/docker4drupal/releases/tag/5.4.17 - последущие версии некоторых даунгдрейд правок требуют под D8. docker-compose.override.yml из проектов удален.

Для примера нужно запустить 2 проекта: clean и dark.

1. Из дистрибутива docker4drupal копируем в папку с проектами файл traefik.yml. Т.е. структура:

~/Projects/local:
traefik.yml
/clean
-docker-compose.yml
-docker-sync.yml
-.env
-Makefile
-traefik.yml
/dark
-docker-compose.yml
-docker-sync.yml
-.env
-Makefile
-traefik.yml/code>

2.  редактируем <strong>traefik.yml</strong>

<code>version: '3'

services:
  traefik:
    image: traefik:v2.0
    command: --api.insecure=true --providers.docker
    networks:
      - project1
      - project2
    ports:
      - '80:80'
      - '8080:8080'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  project1:
    external:
      name: clean_default
  project2:
    external:
      name: dark_default

3. В .env каждого проекта:

PROJECT_NAME=clean
PROJECT_BASE_URL=clean.localhost

и

PROJECT_NAME=dark
PROJECT_BASE_URL=dark.localhost

4. В /etc/hosts:
127.0.0.1       localhost
хотя врядли у кого-то по другому.

5. В docker-compose.yml каждого проекта комментируем секцию traefik так:

#  traefik:
#    image: traefik:v2.0
#    container_name: "${PROJECT_NAME}_traefik"
#    command: --api.insecure=true --providers.docker
#    ports:
#      - '80:80'
#      - '8080:8080' # Dashboard
#    volumes:
#      - /var/run/docker.sock:/var/run/docker.sock

6. В папке каждого проекта запускаем $ docker-compose up -d

7. В папке со всеми проектами $ docker-compose -f traefik.yml up -d
Должно высветиться: Creating local_traefik_1 ... done

Всё.

Если кто-то напишет лучше - пожалуйста.

Комментарии

Аватар пользователя VasyOK VasyOK 5 ноября 2020 в 12:08

Для начала первые 3 пункта
1. Download traefik.yml file ...
Скопировал этот файл в выше папок проектов, теперь, структура (2 проекта clean и dark):
traefik.yml
/clean
-docker-compose.yml
-docker-sync.yml
-.env
-Makefile
-traefik.yml
/dark
-docker-compose.yml
-docker-sync.yml
-.env
-Makefile
-traefik.yml

traefik.yml - из папки каждого проекта удалять?

2. Now we need to provide traefik names of docker networks of our projects ...

Корневой traefik.yml. Что тут менять?

version: '3'

services:
  traefik:
    image: traefik:v2.0
    command: --api.insecure=true --providers.docker
    networks:
      - project1
      - project2
    ports:
      - '80:80'
      - '8080:8080'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  project1:
    external:
      name: project1-dir_default
  project2:
    external:
      name: project2-dir_default

3. In docker-compose.yml of your projects comment out traefik service and make sure traefik.http.* labels have ${PROJECT_NAME}_ prefix

В docker-compose.yml каждого проекта изменить это? Или не только это? на что?:

labels:
      - "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)"
Аватар пользователя ivnish ivnish 5 ноября 2020 в 12:08
1

Либо назначить каждому сайту разный http порт, либо пот**хаться с traefik, либо использовать docksal, там это "из коробки" реализовано

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 5 ноября 2020 в 12:09

очень хороший вопрос

0 надо удалить траефик из докеров
1 надо запустить новый траефик, к которому подключено несколько сеток

Аватар пользователя gun_dose gun_dose 5 ноября 2020 в 13:55

Да, именно так оно и работает. Но у меня был какой-то прикол, когда добавил 5 сайтов, всё было ок. Когда добавил 6-й, то периодически глючило всё и вместо файлов 6 сайта грузились вайлы пятого. С 7 и 8 та же фигня. При этом 1,2,3 и 4 сайты работали нормально. А по итогу я понял, что нет такой прямо огромной необходимости держать запущенными на локалке сразу несколько сайтов.

Аватар пользователя VasyOK VasyOK 5 ноября 2020 в 14:04

Не мне хотя бы 2 одновременно запустить и то хорошо. Инструкция увы крайне не внятная.

Аватар пользователя Punk_UnDeaD Punk_UnDeaD 5 ноября 2020 в 23:52

что именно не ясно?
траефики в d4d выключены?

докер с траефиков включается?
нетворки можно получить командой docker network list

project1 - название проекта
project1-dir_default - назначенная ему сеть

Аватар пользователя VasyOK VasyOK 6 ноября 2020 в 7:26

bumble, я не знаю в чем разница: на одном образе или на двух. Мне нужно просто пару сайтов в разных окнах включить.

Punk_UnDeaD,
"
траефики в d4d выключены?
докер с траефиков включается?
"
Как это узнать?

alex@alexPC:~/Projects/local$ docker network list
NETWORK ID          NAME                      DRIVER           SCOPE
84042a5b9f16       clean_default        bridge              local
9fa5b08ea7c4        dark_default          bridge              local
Аватар пользователя gun_dose gun_dose 6 ноября 2020 в 8:06
1

Если в docker-compose.yml слева от каждой строки, касающейся контейнера traefik, поставить решёточку (#), то он выключится. Biggrin

Не знаю, как ещё объяснить, если ты не понимаешь.

Аватар пользователя VasyOK VasyOK 6 ноября 2020 в 8:32

1. В docker-compose.yml каждого проекта
Закоментировать это (?) или еще что-то (?):

 traefik:
    image: traefik:v2.0
    container_name: "${PROJECT_NAME}_traefik"
    command: --api.insecure=true --providers.docker
    ports:
      - '80:80'
#      - '8080:8080' # Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

а просто удалить traefik.yml из каждого проекта не то будет?

2. В корневом traefik.yml изменить только это достаточно (?):

networks:
  project1:
    external:
      name: clean
  project2:
    external:
      name: dark
Аватар пользователя gun_dose gun_dose 6 ноября 2020 в 11:02

Нужно закомментировать то, что ты в 1 пункте написал.

traefik.yml в каждом проекте и так не используется. Это файл заготовка для траефика одного на несколько проектов. Если у тебя несколько проектов, то нужно позакомментить всё то, что в пункте 1. А в одном из проектов взять этот traefik.yml и настроить под твою конфу и запустить отдельно с указанием файла, типа
docker-compose up -d -f=traefik.yml
или как-то так. Я делал это года 2 назад, работало. Но тот комп давече крякнул и все данные утеряны, так что увы, не смогу посмотреть, как делал точно.

Аватар пользователя VasyOK VasyOK 6 ноября 2020 в 13:31

Ок, ползу дальше.

3. In docker-compose.yml of your projects comment out traefik service and make sure traefik.http.* labels have ${PROJECT_NAME}_ prefix

Я так понимаю тут ничего менять не надо (?),

labels:
      - "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)"

если в .env прописано:

PROJECT_NAME=clean
PROJECT_BASE_URL=clean.localhost

4. Make sure$PROJECT_BASE_URL and $PROJECT_NAME (in .env file) differ, both hosts point to 127.0.0.1 in /etc/hosts

Вот мой /etc/hosts тут вроде тоже ничего не меняем(?)

127.0.0.1       localhost
127.0.1.1       alexPC
127.0.0.1       example.localhost

5. Run your projects: make (or docker-compose up -d)
Зашел в папку каждого проекта, запустил $ docker-compose up -d - вроде компоненты запустились.

6. Run stand-alone traefik: docker-compose -f traefik.yml up -d
А вот тут не понятно. Где эту команду запускать?

В папке всех проектов не получается:

alex@alexPC:~/Projects/local$ docker-compose -f traefik.yml up -d
ERROR: Network project1-dir_default declared as external, but could not be found. Please create the network manually using `docker network create project1-dir_default` and try again.

В папке каждого проекта - тоже. Что он хочет?

Аватар пользователя gun_dose gun_dose 6 ноября 2020 в 13:35

Последнюю команду надо запускать там, где лежит твой traefik.yml. Тот. который ты отредактировал и внёс в него все свои проекты.

Аватар пользователя gun_dose gun_dose 6 ноября 2020 в 13:55

Что-то судя по тексту ошибки, ты не тот traefik.yml отредактировал. Можешь скинуть, что там в нём сейчас?

Аватар пользователя VasyOK VasyOK 6 ноября 2020 в 14:38

Консоль:

~/Projects/local$ docker-compose -f traefik.yml up -d
ERROR: Network clean declared as external, but could not be found. Please create the network manually using `docker network create clean` and try again.

файл traefik.yml

version: '3'

services:
  traefik:
    image: traefik:v2.0
    command: --api.insecure=true --providers.docker
    networks:
      - project1
      - project2
    ports:
      - '80:80'
      - '8080:8080'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  project1:
    external:
      name: clean
  project2:
    external:
      name: dark

Аватар пользователя VasyOK VasyOK 6 ноября 2020 в 16:57

Решение. Может кому-то пригодится. К сожалению в данных вопросах я не компетентен, не факт, что смогу подсказать.

Docker4Drupal устанавливал по инструкции niklan-а https://niklan.net/blog/172. Версия https://github.com/wodby/docker4drupal/releases/tag/5.4.17 - последущие версии некоторых даунгдрейд правок требуют под D8. docker-compose.override.yml из проектов удален.

Для примера нужно запустить 2 проекта: clean и dark.

1. Из дистрибутива docker4drupal копируем в папку с проектами файл traefik.yml. Т.е. структура:

~/Projects/local:
traefik.yml
/clean
-docker-compose.yml
-docker-sync.yml
-.env
-Makefile
-traefik.yml
/dark
-docker-compose.yml
-docker-sync.yml
-.env
-Makefile
-traefik.yml/code>

2.  редактируем <strong>traefik.yml</strong>

<code>version: '3'

services:
  traefik:
    image: traefik:v2.0
    command: --api.insecure=true --providers.docker
    networks:
      - project1
      - project2
    ports:
      - '80:80'
      - '8080:8080'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  project1:
    external:
      name: clean_default
  project2:
    external:
      name: dark_default

3. В .env каждого проекта:

PROJECT_NAME=clean
PROJECT_BASE_URL=clean.localhost

и

PROJECT_NAME=dark
PROJECT_BASE_URL=dark.localhost

4. В /etc/hosts:
127.0.0.1       localhost
хотя врядли у кого-то по другому.

5. В docker-compose.yml каждого проекта комментируем секцию traefik так:

#  traefik:
#    image: traefik:v2.0
#    container_name: "${PROJECT_NAME}_traefik"
#    command: --api.insecure=true --providers.docker
#    ports:
#      - '80:80'
#      - '8080:8080' # Dashboard
#    volumes:
#      - /var/run/docker.sock:/var/run/docker.sock

6. В папке каждого проекта запускаем $ docker-compose up -d

7. В папке со всеми проектами $ docker-compose -f traefik.yml up -d
Должно высветиться: Creating local_traefik_1 ... done

Всё.

Если кто-то напишет лучше - пожалуйста.