如何 运行 Mercure 投入生产
How to run Mercure in production
我正在尝试 运行 生产环境中 Symfony 上的 Mercure。
[第一题]
看来我需要保持我的 ssh 连接处于活动状态才能保持 mercure 运行ning。
另外,我希望能够 运行 多个 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 实例(vhost ) (mercure 是我项目的根)
其次,提供一个完整的示例以及如何解决端口问题或如何使用代理的问题。
您可以使用nohup
命令,例如JWT_KEY='[key]' nohup ./mercure/mercure &
正确的方法是使用 supervisord
管理此进程,因为您希望在服务器启动时自动 运行 mercure
为此有一个 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 用户绑定。这就是 permission denied
错误的原因,因为 www-data
用户
我正在尝试 运行 生产环境中 Symfony 上的 Mercure。
[第一题]
看来我需要保持我的 ssh 连接处于活动状态才能保持 mercure 运行ning。
另外,我希望能够 运行 多个 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 实例(vhost ) (mercure 是我项目的根)
其次,提供一个完整的示例以及如何解决端口问题或如何使用代理的问题。
您可以使用
nohup
命令,例如JWT_KEY='[key]' nohup ./mercure/mercure &
正确的方法是使用
supervisord
管理此进程,因为您希望在服务器启动时自动 运行mercure
为此有一个
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 用户绑定。这就是 permission denied
错误的原因,因为 www-data
用户