Добавить Mercure Hub в DDEV
Я только изучаю, как использовать Mercure, изучая реализацию Symfonys Turbo.
Я только что прошел курс Symfonycasts Turbo, и у меня не было проблем с использованием Turbo Streams и Mercure Hub через двоичный файл symfony / локальный веб-сервер Symfony.
Следующим моим шагом было попробовать все это в «реальном» проекте, над которым я работаю со своей командой.
Поскольку мы используем DDEV для локальной разработки в нашей команде, я попытался внедрить mercure в свою среду DDEV.
Я новичок в docker compose и DDEV, поэтому я просто попытался следить за разделом документации DDEV об определении пользовательских служб, где говорится:
Чтобы добавить в проект настраиваемую конфигурацию или дополнительные службы, создайте файлы docker-compose в каталоге .ddev вашего проекта. ddev будет обрабатывать любые файлы, используя соглашение об именах docker-compose.[servicename].yaml, и включать их в выполнение функций docker-compose.
В документации DDEV также указываются следующие шаги:
При определении дополнительных сервисов для вашего проекта мы рекомендуем вам следовать этим соглашениям, чтобы гарантировать, что ddev обрабатывает ваш сервис так же, как ddev обрабатывает сервисы по умолчанию.
To name containers follow this naming convention ddev-[projectname]-[servicename]
Provide containers with the following labels
* com.ddev.site-name: ${DDEV_SITENAME}
* com.ddev.approot: $DDEV_APPROOT
Exposing ports for service: you can expose the port for a service to be accessible as projectname.ddev.site:portNum while your project is running. This is achieved by the following configurations for the container(s) being added:
* Define only the internal port in the ports section for docker-compose. The hostPort:containerPort convention normally used to expose ports in docker should not be used here, since we are leveraging the ddev router to expose the ports.
Затем я взглянул на документацию Mercure, где предлагается пример определения службы docker-compose, которая выглядит следующим образом:
# docker-compose.yml
version: "3.7"
services:
caddy:
image: dunglas/mercure
restart: unless-stopped
environment:
# Uncomment the following line to disable HTTPS
#SERVER_NAME: ':80'
MERCURE_PUBLISHER_JWT_KEY: '!ChangeMe!'
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeMe!'
# Uncomment the following line to enable the development mode
#command: /usr/bin/caddy run -config /etc/caddy/Caddyfile.dev
ports:
- "80:80"
- "443:443"
volumes:
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
Согласно документу DDEV, я попытался изменить sample-config, в результате получилось что-то вроде этого:
version: "3.7"
services:
mercure:
# Name of container using standard ddev convention
container_name: ddev-${DDEV_SITENAME}-mercure
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
image: dunglas/mercure
restart: unless-stopped
environment:
# Uncomment the following line to disable HTTPS
# SERVER_NAME: ':80'
MERCURE_PUBLISHER_JWT_KEY: '!ChangeMe!'
MERCURE_SUBSCRIBER_JWT_KEY: '!ChangeMe!'
# Uncomment the following line to enable the development mode
#command: /usr/bin/caddy run -config /etc/caddy/Caddyfile.dev
ports:
- "80"
- "443"
volumes:
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
Итак, все, что я сделал, - это проследил за соглашением об именах контейнеров, добавил две метки и определил только внутренние порты.
Но это, похоже, не работает, поскольку я не могу получить доступ к URL-адресу концентраторов mercure, и когда я пытаюсь использовать Mercure Hub в своем приложении, как я успешно сделал, используя сервер Symfony вместо DDEv, я получаю следующее сообщение об ошибке :
Не удалось отправить обновление.
Может ли кто-нибудь помочь мне настроить концентратор Mercure через DDEV?
Очевидно, что эти настройки кажутся более сложными, чем мои, когда я смотрю на те, которые уже представлены на DDEV-contrib.
Вот пример файла, который они предоставляют для elasticsearch:
version: '3.6'
services:
elasticsearch:
container_name: ddev-${DDEV_SITENAME}-elasticsearch
hostname: ${DDEV_SITENAME}-elasticsearch
image: elasticsearch:7.10.1
expose:
- "9200"
- "9300"
environment:
- cluster.name=docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- VIRTUAL_HOST=$DDEV_HOSTNAME
- HTTP_EXPOSE=9200:9200
- HTTPS_EXPOSE=9201:9200
labels:
com.ddev.site-name: ${DDEV_SITENAME}
com.ddev.approot: $DDEV_APPROOT
volumes:
- elasticsearch:/usr/share/elasticsearch/data
- ".:/mnt/ddev_config"
web:
links:
- elasticsearch:elasticsearch
volumes:
elasticsearch:
Благодарю за любую помощь.