Как запустить Mercure в производство - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь запустить Mercure в Symfony в рабочей среде.

[1-я проблема]

Похоже, мне нужно поддерживать активное соединение sshдля поддержания работы Mercure.
Кроме того, я хотел бы иметь возможность запускать несколько экземпляров Mercure (по одному на виртуальный хост)

[2-я проблема]

Поскольку мой vhost уже использует 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] прослушивание tcp: 443: bind: разрешение отклонено

Если я пытаюсь запустить его с root, вместо этого я получаю эту ошибку:

ERRO [0000] прослушивание tcp: 443: bind: адрес уже используется

В некоторых сообщениях здесь и там в Интернете предлагается использовать прокси, но не приводим никакого примера.


Может ли кто-нибудь предложить решение, во-первых, запустить Mercure, не поддерживая подключение пользователя на ssh, и, если возможно,e, возможность запуска одного экземпляра mercure для каждого проекта (vhost) (mercure лежит в основе моего проекта)

Во-вторых, приведите полный пример и узнайте, как решить проблему с портами или какиспользовать прокси.

1 Ответ

1 голос
/ 26 апреля 2019
  1. Вы можете использовать команду nohup, например, JWT_KEY='[key]' nohup ./mercure/mercure &

    . Правильно было бы использовать supervisord для управления этим процессом, поскольку вы хотите автоматически запускать mercureпри запуске сервера

  2. Для этого существует ADDR env, например, 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 пользователя

...