2

我在使用 Mercure 的 Apache 服务器上有一个 Symfony 项目,我尝试在生产环境中设置 Mercure 集线器。

为了在生产环境中运行 Mercure 集线器,我将存档 mercure_0.6.2_Linux_x86_64.tar.gz ( https://github.com/dunglas/mercure/releases ) 提取到项目根目录下的子文件夹 mercure 中。

然后我运行命令:

JWT_KEY='myJWTKey' ACME_HOSTS='example.com' ./mercure

用我的信息

但是集线器没有运行并出现此错误:

FATA [0000] 侦听 tcp :443: 绑定: 权限被拒绝

我看到了一个类似的问题(如何在生产中运行 Mercure),但建议的答案使用 ADDR 来更改端口,并且根据文档,“Let's Encrypt 仅支持默认端口:要使用 Let's Encrypt,请不要设置此变量。” .

如何在生产环境中运行 Mercure?

4

2 回答 2

4

以下是我为解决问题所做的步骤:

我使用以下命令运行 Mercure:

JWT_KEY='aVerySecretKey' ADDR='myhub.com:3000' CORS_ALLOWED_ORIGINS='https://mywebsite.com' DEBUG=1 ALLOW_ANONYMOUS=1 ./mercure

所以,美居在这里运行:http: //myhub.com :3000 。

我使用 Apache 作为具有以下参数的代理:

ProxyPass / http://myhub.com:3000/
ProxyPassReverse / https://myhub.com/

所以现在,我可以从我的域https://mywebsite.com访问https://myhub.com/hub中的 HTTPS 集线器。

感谢 Mercure 的作者 dunglas。

于 2020-01-15T09:45:59.223 回答
2

我不知道这是否有帮助,但经过一番努力,我让 Mercure 在这样的实时服务器上工作。(我一直使用端口 9090。)在 Apache 域 conf 中:

ProxyPass /hub/ http://localhost:9090/
ProxyPassReverse /hub/ http://localhost:9090/

在 Javascript 中:

new URL('https://www.example.com/hub/.well-known/mercure');

在 Symfony 中:

MERCURE_PUBLISH_URL=https://www.example.com/hub/.well-known/mercure

注意不要将 MERCURE_JWT_TOKEN 与 MERCURE_JWT_SECRET 混淆。

从 root 开始,像这样运行 Mercure 服务器进行测试:

docker run     -e JWT_KEY='!ChangeMe!' -e DEMO=1 -e ALLOW_ANONYMOUS=1 -e CORS_ALLOWED_ORIGINS='*' -e PUBLISH_ALLOWED_ORIGINS='*'     -p 9090:80     dunglas/mercure

所以现在一切正常,没有 https / 443 问题。

于 2020-03-24T17:48:21.213 回答