2016-04-30 41 views
1

我想獲得一個node.js網站生活在端口80(我正在使用數字海洋)。我在服務文件使用sudo與ExecStart(systemd)

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

在本地主機上,如果我使用sudo來啓動站點這部作品在80端口細做這個使用systemd用,但也不是沒有sudo的。顯然你需要以1024以下的端口爲根運行。

如何在ExecStart中允許sudo?或者我在這裏完全錯誤的方式,如果是這樣,我如何獲得端口80上的快速應用程序?

乾杯,邁克

回答

4

Systemd開始在ExecStart=表述爲默認的根可執行文件。這意味着如果您尚未在我們的服務文件中指定User =或Group=,則您的二進制文件已啓動特權。

你可以通過啓動id或whoami程序來驗證。例如:ExecStart=/usr/bin/idExecStart=/usr/bin/whoami(請注意,程序的路徑可能會因您而異)

+0

我確實已經指定了一個組(非根),但是我想保留它,因爲這是不錯的做法,不要運行網站爲根。我如何解決我的問題? – Mike

+0

你需要有一個.socket單元作爲特權用戶監聽它的端口。然後systemd將你的服務傳給套接字。它需要對nodejs進行代碼修改,以使systemd套接字激活。 – Umut

+0

我試過 require('systemd'); var port = process.env.LISTEN_PID> 0? 'systemd':3050; app.set('port',port); 但到目前爲止還沒有運氣。 – Mike