Symfony 4 и Mercure с Docker - не удалось подключиться к серверу
Я пытаюсь запустить Mercure на Symfony с изображением Docker.
версия symfony/mercure: "v0.2.0",
Конфигурация docker-compose.yaml:
mercure:
container_name: mercure
image: dunglas/mercure
environment:
- JWT_KEY=MySecret
- DEMO=1
- ALLOW_ANONYMOUS=1
- PUBLISH_ALLOWED_ORIGINS=http://my_project.com:9090/hub
- DEBUG=1
- CORS_ALLOWED_ORIGINS=*
ports:
- "9090:80"
Когда я иду на http://my_project.com:9090/ вижу работающую страницу инструментов отладки Mercure. Mercure правильно установлен и работает с док-контейнером.
Файл Symfony .env:
MERCURE_PUBLISH_URL=http://my_project.com/hub
MERCURE_JWT_SECRET=valid_generated_JWT_token
MERCURE_JWT_SECRET - это действительный токен JWT, сгенерированный с помощью JWT_KEY из конфигурации Docker (MySecret) с полезной нагрузкой:
{
"mercure": {
"publish": []
}
}
Когда я пытаюсь простой пример, как это:
public function getCountUnreadMessagesAction(Publisher $publisher)
{
// some API logic
$update = new Update(
'http://my_project.com/api/v1/messages/count-unread',
json_encode(['count' => $count])
);
// The Publisher service is an invokable object
$publisher($update);
// return 200
return $this->ok((int)$count);
}
Я получаю сообщение об ошибке "Не удалось подключиться к серверу по адресу " http://my_project.com/hub "
Попытка добавить порт 9090 или 80 на MERCURE_PUBLISH_URL, но появляется та же ошибка. Я перезапускал Docker каждый раз, когда менял.env файл.
Как правильно установить URL для Mercure Hub с конфигурацией Docker?
РЕДАКТИРОВАТЬ:
Мой код JS, который находится за пределами Docker:
<script type="application/javascript">
const es = new EventSource('http://my_project.com:9090/hub?topic=' + encodeURIComponent('http://my_project.com/api/v1/messages/count-unread'));
es.onmessage = e => {
// Will be called every time an update is published by the server
console.log(JSON.parse(e.data));
}
</script>
У меня нет проблем с CORS после установки - CORS_ALLOWED_ORIGINS=* в Docker. Я не использую JWT в JS для аутентификации.
1 ответ
Я наконец разобрался.
Это должно быть имя контейнера докера:
MERCURE_PUBLISH_URL=http://mercure/hub