我正在尝试在生产环境中的Symfony上运行Mercure。
[第一个问题]
看来我需要保持ssh连接处于活动状态才能保持运行状态。
另外,我希望能够运行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
如果我以Web用户(www-data)尝试此命令,则会收到以下错误:
ERRO [0000]监听tcp:443:绑定:权限被拒绝
如果我尝试以root身份运行它,则会收到此错误:
ERRO [0000]监听tcp:443:bind:地址已在使用中
网络上到处都是一些消息,建议使用代理,但不提供任何示例。
有人可以提供一种解决方案,首先运行Mercure,而不必将我的用户连接保持在ssh上;如果可能的话,能够为每个项目(vhost)运行一个Merure实例(mercury是我项目的根源) )
第二,提供一个完整的示例,以及如何解决端口问题或如何使用代理的问题。
答案 0 :(得分:1)
您可以使用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
错误