带有Docker的Symfony 4和Mercure-无法连接到服务器

时间:2019-07-29 10:54:15

标签: symfony docker docker-compose symfony4 mercure

我正在尝试使用Docker映像在Symfony上运行Mercure。

symfony /商业版本:“ 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已正确安装并与Docker容器一起运行。

Symfony .env文件:

MERCURE_PUBLISH_URL=http://my_project.com/hub
MERCURE_JWT_SECRET=valid_generated_JWT_token

MERCURE_JWT_SECRET是一个有效的JWT令牌,该令牌是通过有效负载从Docker配置(MySecret)使用JWT_KEY生成的:

{
    "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连接到服务器”

试图在MERCURE_PUBLISH_URL上添加端口9090或80,但出现相同的错误。每次更改.env文件时,我都会重新启动Docker。

如何通过Docker配置正确设置Mercure hub的URL?

编辑:

我的Docker之外的JS代码:

  <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没有任何问题-Docker中的CORS_ALLOWED_ORIGINS = *。我不在JS中使用JWT进行身份验证。

1 个答案:

答案 0 :(得分:1)

我终于明白了。

应为docker容器名称:

MERCURE_PUBLISH_URL=http://mercure/hub