Возникла необходимость прикрутить приложение на Node.js к Django-проекту, над которым сейчас работаю. Сам проект работает через gunicorn + nginx. Открывать в мир порт, который будет слушать Node.js неохота, да и не хочу чтобы на любом виртуалхосте он был доступен, поэтому решил прикрутить его (Node.js) к nginx’у. Ну и создать для него (Node.js) юнит в systemd, чтоб запускть-перезапускать.
Сам юнит:
1
|
sudo nano /etc/systemd/system/node_ имя_вхоста.service |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[Unit] Description=node_имя_вхоста.js -- Node JS App for имя_вхоста After=network.target [Service] Environment=NODE_PORT=номер_порта Type=simple User=имя_пользователя ExecStart=/usr/bin/node /путь/к/nodejs/приложению/имя_приложения.js Restart=on-failure [Install] WantedBy=multi-user.target |
Енаблим и запускаем:
1
2
|
sudo systemctl enable node_имя_вхоста sudo systemctl start node_имя_вхоста |
Далее добавляем кусок в конфиг виртуалхоста nginx’а:
1
|
sudo nano /etc/nginx/conf .d/имя_вхоста.conf |
1
2
3
4
5
6
7
8
9
10
|
... location /nodejs/ { proxy_pass http://localhost:номер_порта/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; } .... |
Перезапускаем nginx:
1
|
sudo systemctl restart nginx |
И готово:
1
2
3
4
5
6
7
|
var http = require( 'http' ); var server = http.createServer( function (req, res) { res.writeHead(200); res.end( '<h1>Hello, node.js!</h1>' ); }); server.listen(номер_порта); |