Кто у нас нас на форуме разбирается в Docker4Drupal (и английском языке)?
Подскажите, как заставить работать одновременно несколько сайтов?
Инструкция вот: https://wodby.com/docs/1.0/stacks/drupal/local/#running-multiple-projects
Single port
- 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
- 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
- In docker-compose.yml of your projects comment out traefik service and make sure traefik.http.* labels have ${PROJECT_NAME}_ prefix
- Make sure$PROJECT_BASE_URL and $PROJECT_NAME (in .env file) differ, both hosts point to 127.0.0.1 in /etc/hosts
- Run your projects: make (or docker-compose up -d)
- Run stand-alone traefik: docker-compose -f traefik.yml up -d
- Now when you visit URL from $PROJECT_BASE_URL, traefik will route traffic to the corresponding docker networks
Но пока вопросов больше чем ответов.
Комментарии
Для начала первые 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. Что тут менять?
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 каждого проекта изменить это? Или не только это? на что?:
- "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)"
Либо назначить каждому сайту разный http порт, либо пот**хаться с traefik, либо использовать docksal, там это "из коробки" реализовано
очень хороший вопрос
0 надо удалить траефик из докеров
1 надо запустить новый траефик, к которому подключено несколько сеток
Да, именно так оно и работает. Но у меня был какой-то прикол, когда добавил 5 сайтов, всё было ок. Когда добавил 6-й, то периодически глючило всё и вместо файлов 6 сайта грузились вайлы пятого. С 7 и 8 та же фигня. При этом 1,2,3 и 4 сайты работали нормально. А по итогу я понял, что нет такой прямо огромной необходимости держать запущенными на локалке сразу несколько сайтов.
Не мне хотя бы 2 одновременно запустить и то хорошо. Инструкция увы крайне не внятная.
что именно не ясно?
траефики в d4d выключены?
докер с траефиков включается?
нетворки можно получить командой docker network list
project1 - название проекта
project1-dir_default - назначенная ему сеть
а в чем смысл запуска нескольких сайтов на одном образе?
почему на одном? это разные докеры
вопрос в одновременности
ок. зачем?
bumble, я не знаю в чем разница: на одном образе или на двух. Мне нужно просто пару сайтов в разных окнах включить.
Punk_UnDeaD,
"
траефики в d4d выключены?
докер с траефиков включается?
"
Как это узнать?
NETWORK ID NAME DRIVER SCOPE
84042a5b9f16 clean_default bridge local
9fa5b08ea7c4 dark_default bridge local
Если в docker-compose.yml слева от каждой строки, касающейся контейнера traefik, поставить решёточку (#), то он выключится.
Не знаю, как ещё объяснить, если ты не понимаешь.
1. В docker-compose.yml каждого проекта
Закоментировать это (?) или еще что-то (?):
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 изменить только это достаточно (?):
project1:
external:
name: clean
project2:
external:
name: dark
Нужно закомментировать то, что ты в 1 пункте написал.
traefik.yml в каждом проекте и так не используется. Это файл заготовка для траефика одного на несколько проектов. Если у тебя несколько проектов, то нужно позакомментить всё то, что в пункте 1. А в одном из проектов взять этот traefik.yml и настроить под твою конфу и запустить отдельно с указанием файла, типа
docker-compose up -d -f=traefik.yml
или как-то так. Я делал это года 2 назад, работало. Но тот комп давече крякнул и все данные утеряны, так что увы, не смогу посмотреть, как делал точно.
А во 2м пункте?
Вроде да.
Ок, ползу дальше.
3. In docker-compose.yml of your projects comment out traefik service and make sure traefik.http.* labels have ${PROJECT_NAME}_ prefix
Я так понимаю тут ничего менять не надо (?),
- "traefik.http.routers.${PROJECT_NAME}_nginx.rule=Host(`${PROJECT_BASE_URL}`)"
если в .env прописано:
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.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
А вот тут не понятно. Где эту команду запускать?
В папке всех проектов не получается:
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.
В папке каждого проекта - тоже. Что он хочет?
Последнюю команду надо запускать там, где лежит твой traefik.yml. Тот. который ты отредактировал и внёс в него все свои проекты.
Да, тут и запускаю.
~/Projects/local
-traefik.yml
-/clean
-/dark
Что-то судя по тексту ошибки, ты не тот traefik.yml отредактировал. Можешь скинуть, что там в нём сейчас?
Консоль:
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
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
Мне кажется, имена сетей у тебя будут clean_default и dark_default
Большое спасибо!
Щас решение оформлю.
Решение. Может кому-то пригодится. К сожалению в данных вопросах я не компетентен, не факт, что смогу подсказать.
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. Т.е. структура:
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_BASE_URL=clean.localhost
и
PROJECT_BASE_URL=dark.localhost
4. В /etc/hosts:
127.0.0.1 localhost
хотя врядли у кого-то по другому.
5. В 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
6. В папке каждого проекта запускаем $ docker-compose up -d
7. В папке со всеми проектами $ docker-compose -f traefik.yml up -d
Должно высветиться: Creating local_traefik_1 ... done
Всё.
Если кто-то напишет лучше - пожалуйста.