如何使用Apache在生产中运行Mercure

如何使用Apache在生产中运行Mercure,apache,mercure,Apache,Mercure,我在使用Mercure的Apache服务器上有一个Symfony项目,我尝试在生产中设置Mercure hub 为了在生产环境中运行Mercure hub,我将归档文件Mercure_0.6.2_Linux_x86_64.tar.gz()解压缩到项目根目录下的子文件夹Mercure中 然后我运行命令: JWT_KEY='myJWTKey' ACME_HOSTS='example.com' ./mercure 用我的信息 但是集线器没有运行此错误: FATA[0000]侦听tcp:443:bin

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

为了在生产环境中运行Mercure hub,我将归档文件Mercure_0.6.2_Linux_x86_64.tar.gz()解压缩到项目根目录下的子文件夹Mercure中

然后我运行命令:

JWT_KEY='myJWTKey' ACME_HOSTS='example.com' ./mercure
用我的信息

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

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

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


如何在生产中运行Mercure?

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

我使用以下命令运行Mercure:

JWT_KEY='aVerySecretKey' ADDR='myhub.com:3000' CORS_ALLOWED_ORIGINS='https://mywebsite.com' DEBUG=1 ALLOW_ANONYMOUS=1 ./mercure
所以,Mercure在这里运行:

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

ProxyPass / http://myhub.com:3000/
ProxyPassReverse / https://myhub.com/
现在,我可以从我的域访问HTTPS中的集线器


多亏了Mercure的作者dunglas。

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

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_令牌与MERCURE_JWT_秘密混淆

从根目录下,运行Mercure server进行测试,如下所示:

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问题。

要回答您在我的主题中删除的问题,不,我到目前为止没有解决我的问题,我也没有尝试过一段时间。总的来说,反向代理似乎是解决方案,可以使用nginx或apache。我曾经联系过Mercure的作者,他告诉我要么以root用户身份运行Mercure,要么使用authbind之类的工具来解决:445问题。但这不管用。如果我不能解决这个问题,我会简单地寻找一个非mercure解决方案。