我在使用 Mercure 的 Apache 服务器上有一个 Symfony 项目,并且我尝试在生产中设置 Mercure hub。
为了在生产中运行 Mercure hub,我将存档 Mercure_0.6.2_Linux_x86_64.tar.gz ( https://github.com/dunglas/mercure/releases ) 提取到项目根目录下的子文件夹 Mercure 中。
然后我运行命令:
JWT_KEY='myJWTKey' ACME_HOSTS='example.com' ./mercure
Run Code Online (Sandbox Code Playgroud)
与我的信息
但集线器无法运行并出现以下错误:
FATA[0000] 监听 tcp:443:绑定:权限被拒绝
我看到了类似的问题(How to run Mercure in production),但建议的答案使用 ADDR 来更改端口,并且根据文档,“Let's Encrypt 仅支持默认端口:要使用 Let's Encrypt,请勿设置此变量。” 。
如何在生产环境中运行 Mercure?
我正在尝试使用 Docker 映像在 Symfony 上运行 Mercure。
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"
Run Code Online (Sandbox Code Playgroud)
当我去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
Run Code Online (Sandbox Code Playgroud)
MERCURE_JWT_SECRET 是使用来自 Docker 配置 (MySecret) 的 JWT_KEY 生成的有效 JWT 令牌和有效负载:
{
"mercure": {
"publish": []
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试这样一个简单的例子时:
public function getCountUnreadMessagesAction(Publisher $publisher)
{
// some API logic
$update = new Update(
'http://my_project.com/api/v1/messages/count-unread',
json_encode(['count' => $count])
); …Run Code Online (Sandbox Code Playgroud)