2016-04-30 6 views
1

Я пытаюсь получить сайт node.js в прямом эфире на порту 80 (я использую Digital Ocean). Я делаю это с помощью Systemd с в сервисном файлеИспользование sudo с ExecStart (systemd)

... 
ExecStart=/usr/bin/nodejs /var/www/bin/app.js 
... 

На локальном хосте это прекрасно работает на порту 80, если я использую Sudo, чтобы запустить сайт, но не без Судо. По-видимому, вам нужно запускать как root для портов ниже 1024.

Как разрешить sudo в ExecStart? Или я совсем не совсем прав, и если да, то как мне получить экспресс-приложение на порт 80?

Cheers, Майк

ответ

4

Systemd запускает исполняемый файл, указанный в ExecStart= как корень по умолчанию. Это означает, что если вы не указали User = или Group= в нашем файле службы, ваш двоичный файл запускается с привилегией.

Вы можете проверить это, начиная с id или программы whoami. Пример: ExecStart=/usr/bin/id или ExecStart=/usr/bin/whoami (обратите внимание, что путь для программ может быть другим для вас)

+0

Я действительно указал группу (не root), но я хотел бы сохранить ее таким образом, так как это хорошая практика не запускать сайтов с правами root. Как я могу обойти свои проблемы? – Mike

+0

Вам необходимо иметь .socket-устройство для порта, который прослушивает его как привилегированный пользователь. Затем systemd передает вашу службу в сокет. Для того, чтобы активировать функцию systemd socket, необходимы модификации узла на nodejs. – Umut

+0

Я попробовал require ('systemd'); var port = process.env.LISTEN_PID> 0? 'systemd': 3050; app.set ('порт', порт); , но пока не повезло. – Mike