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
Другие вопросы по тегам