symfony - 如何在生产中运行 Mercure

标签 symfony proxy reverse-proxy symfony4 mercure

我正在尝试在生产环境中在 Symfony 上运行 Mercure。

[第一个问题]

看来我需要保持 ssh 连接处于事件状态才能保持 Mercure 运行。
另外,我希望能够运行 Mercure 的多个实例(每个虚拟主机一个)

[第二个问题]

由于我的虚拟主机已在使用 HTTPS,因此我使用以下命令来运行 Mercure:

JWT_KEY='4e2da03eda9acdfdb9253ab0f8f9e4011706fd6ba6d8293d9727e833752fb15b' CERT_FILE='/etc/letsencrypt/live/my-project.my-domain.com/fullchain.pem' KEY_FILE='/etc/letsencrypt/live/my-project.my-domain.com/privkey.pem' ALLOW_ANONYMOUS=1 ./mercure/mercure

如果我对网络用户 (www-data) 尝试此命令,则会收到以下错误:

ERRO[0000] listen tcp :443: bind: permission denied

如果我尝试使用 root 运行它,则会收到此错误:

ERRO[0000] listen tcp :443: bind: address already in use

网络上到处都有建议使用代理的消息,但没有提供任何示例。


有人可以提供一种解决方案吗,首先,运行 Mercure,而无需在 ssh 上保持用户连接,并且如果可能的话,能够为每个项目(虚拟主机)运行一个 Mercure 实例(mercure 位于我的项目的根目录下) )

其次,提供完整的示例以及如何解决端口问题或如何使用代理的问题。

最佳答案

  1. 您可以使用nohup命令,例如 JWT_KEY='[key]' nohup ./mercure/mercure &

    正确的方法是使用 supervisord管理此进程,因为您想要自动运行 mercure在服务器启动时

  2. 有一个ADDR为此,例如JWT_KEY='[key]' ADDR=127.0.0.1:3000 ./mercure/mercure会听127.0.0.1:3000地址。您需要运行 mercure 的多个实例每个项目的不同端口。

    您可以使用nginx proxy像这样的东西:

server {
    listen 80 ssl http2;
    listen [::]:80 ssl http2;
    server_name project1.exmaple.com;

    ssl_certificate /path/to/ssl/cert.crt;
    ssl_certificate_key /path/to/ssl/cert.key;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_read_timeout 24h;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

server {
    listen 80 ssl http2;
    listen [::]:80 ssl http2;
    server_name project2.exmaple.com;

    ssl_certificate /path/to/ssl/cert.crt;
    ssl_certificate_key /path/to/ssl/cert.key;

    location / {
        proxy_pass http://127.0.0.1:3002;
        proxy_read_timeout 24h;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

端口 < 1024只能由root用户绑定(bind)。这就是为什么你有 permission denied错误,对于 www-data用户

关于symfony - 如何在生产中运行 Mercure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55854989/

相关文章:

linux - 直通代理到不同的 IP 地址

Apache2 代理反向断开 Tomcat8 链接

Symfony2 用于子域路由的多个配置和路由文件

c# - 将 CRM 代理类生成为单独的文件

node.js - 修改代理请求的 header

proxy - 企业代理背后的 Windows 上的 cargo

docker:将结构拆分为有用的网络

symfony - Symfony Elasticsearch 查询 bool 排序

sql - 再次数据库、表和列命名约定

javascript - 在 React 中实现硬重载