Si të vendosni aplikacione Node.js duke përdorur Systemd dhe Nginx
Prezantimi
Kur vendosni një aplikacion ueb në një Droplet, mund të jetë joshëse që thjesht të përdorni të njëjtin lloj konfigurimi siç përdoret në zhvillim, p.sh. duke nisur serverin duke ekzekutuar \ruby app.rb ose \node server.js në një terminal. Kjo është e thjeshtë dhe e lehtë, ndërkohë që ofron regjistra të dukshëm. Dikush mund të përdorë edhe \ekranin ose \tmux ose \nohup që të vazhdojë të funksionojë edhe kur sesioni SSH është hequr. Kjo është e rrezikshme: çfarë ndodh nëse serveri prishet dhe askush nuk është afër për ta rifilluar?
Dikush mund të përdorë cgroups, dhe nisja e avancuar e demonit mund të aksesohet, kontrollohet dhe rregullohet mirë në një mënyrë të unifikuar.
Ky tutorial përdor një aplikacion të thjeshtë Node.js, por është i zbatueshëm edhe për shumicën, nëse jo të gjithë, të tjerë (qofshin Ruby, Python, etj). Për aplikacionet në ueb PHP, rekomandohet të përdorni një stack më të specializuar LEMP.
Komandat do të ofrohen si për Fedora ashtu edhe për Arch, sigurohuni që të shmangni konfigurimin e gabuar dhe/ose konfuzionin. Kur nuk tregohet, komanda është e njëjtë për të dy sistemet. Rekomandohet gjithashtu që të lexoni të gjithë udhëzuesin përpara se ta provoni hap pas hapi, në mënyrë që të merrni një ide se çfarë përfshin dhe nëse është i përshtatshëm për situatën tuaj.
Paraprakisht të sistemit
- Një server me sistemi. Pikat e Arch Linux dhe Fedora janë konfiguruar kështu si parazgjedhje.
- Nginx, për t'u përdorur si një server http dhe websocket me përfaqësues të kundërt.
- Git, për të instaluar nvm dhe për të tërhequr aplikacionin tuaj nëse përdorni git.
- Akses Root. Është gjithashtu e mundur që të identifikoheni si një përdorues normal dhe sudo të gjitha komandat, ose në su - ose sudo su - në një prompt rrënjë.
Instaloni paketat
Harku:
# pacman -Sy
# pacman -S nginx git
Fedora:
# yum install nginx git
Paraprakisht Aplikimi
Këto janë cilësime që mund t'i personalizoni sipas dëshirës tuaj, por ato duhet të vendosen dhe të vendosen përpara se të filloni.
Përdoruesi
Aplikacioni do të funksionojë në llogarinë e tij të veçantë të përdoruesit. Zgjidhni një emër, ai duhet të lidhet me aplikacionin për ta bërë të lehtë për t'u mbajtur mend dhe mirëmbajtur. Këtu përdoret srv-node-sample
.
# useradd -mrU srv-node-sample
Port
Për të shmangur konfliktet, zgjidhni një port të lartë. Këtu përdoret 15301.
Konfigurimi i aplikacionit
Filloni duke instaluar atë që është e nevojshme për ekzekutimin e aplikacionit. Për Node.js (dhe Ruby, Python…), ka dy zgjedhje: ose përdorni kohën e funksionimit të sistemit, ose një instalim specifik për përdoruesit (p.sh. duke përdorur virtualenv, etj.).
Duke përdorur nyjen e sistemit
Harku:
# pacman -S nodejs
Fedora:
# yum install nodejs
Përdorimi i një instalimi specifik të përdoruesit
Kjo duhet të instalohet në direktorinë kryesore të aplikacionit, d.m.th. /home/srv-node-sample
, e cila bëhet më lehtë duke u identifikuar si ai përdorues:
# su srv-node-sample
$ cd
$ curl https://raw.github.com/creationix/nvm/master/install.sh | sh
$ source ~/.nvm/nvm.sh
$ nvm install 0.10
$ nvm alias default 0.10
Pastaj vini re se ku është instaluar nyja binar:
$ which node
/home/srv-node-sample/.nvm/v0.10.22/bin/node
Vendosni aplikacionin tuaj
Ndërsa jeni identifikuar në srv-node-sample
, vendosni kodin tuaj. Ky është vetëm një shembull, procesi juaj do të ndryshojë.
$ git clone git@server.company.tld:user/repo.git .
$ npm install
$ grunt deploy
Për këtë tutorial, përdoret mostra e mëposhtme e aplikacionit:
js
var http = require('http');
http.createServer(function(req, res) {
res.end('<h1>Hello, world.</h1>');
}).listen(15301);
Pastaj kthehuni në rrënjë:
$ exit
Konfigurimi i Nginx
Ky tutorial mbulon vetëm shkurtimisht konfigurimin e nevojshëm, për një tutorial më të plotë mbi konfigurimin e Nginx, shihni manualin nginx.
Vendoseni këtë në bllokun e serverit tuaj:
location / {
proxy_pass http://localhost:15301/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
Pastaj konfiguroni demonin e tij:
# systemctl enable nginx
# systemctl restart nginx
Konfigurimi i sistemit
Krijo një skedar shërbimi për aplikacionin, në /etc/systemd/system/node-sample.service
.
Ka disa variabla që duhet të plotësohen:
- [node binary] Ky është dalja e \cilës nyje si përdorues srv-node-sample. Ose
/usr/bin/node
ose~/.nvm/...
rruga e shënuar më sipër. - [main file] Ky është skedari kryesor i aplikacionit tuaj. Këtu, 'index.js\.
- Mos harroni të zëvendësoni
srv-node-sample
!
[Service]
ExecStart=[node binary] /home/srv-node-sample/[main file]
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=node-sample
User=srv-node-sample
Group=srv-node-sample
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
Tani filloni shërbimin:
# systemctl enable node-sample
# systemctl start node-sample
Përdorimi
Statusi
# systemctl status node-sample
node-sample.service
Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)
Active: active (running) since Fri 2013-11-22 01:12:15 UTC; 35s ago
Main PID: 7213 (node)
CGroup: name=systemd:/system/node-sample.service
└─7213 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...
Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.
Regjistrat
# journalctl -u node-sample
-- Logs begin at Thu 2013-11-21 19:05:17 UTC, end at Fri 2013-11-22 01:12:15 UTC. --
Nov 22 01:12:15 d02 systemd[1]: Starting node-sample.service...
Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.
Nov 22 01:12:30 d02 node-sample[7213]: Sample message from application
Rinisni, ndaloni, etj
Detyro një rinisje:
# systemctl restart node-sample
Ndalo aplikacionin:
# systemctl stop node-sample
Aplikacioni do të riniset automatikisht nëse vdes ose vdes:
# systemctl status node-sample
node-sample.service
Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)
Active: active (running) since Fri 2013-11-22 01:12:15 UTC; 35s ago
Main PID: 7213 (node)
CGroup: name=systemd:/system/node-sample.service
└─7213 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...
Nov 22 01:12:15 d02 systemd[1]: Started node-sample.service.
# kill 7213
# systemctl status node-sample
node-sample.service
Loaded: loaded (/etc/systemd/system/node-sample.service; enabled)
Active: active (running) since Fri 2013-11-22 01:54:37 UTC; 6s ago
Main PID: 7236 (node)
CGroup: name=systemd:/system/node-sample.service
└─7236 /home/srv-node-sample/.nvm/v0.10.22/bin/node /home/srv-nod...
Nov 22 01:54:37 d02 systemd[1]: node-sample.service holdoff time over, sch...t.
Nov 22 01:54:37 d02 systemd[1]: Stopping node-sample.service...
Nov 22 01:54:37 d02 systemd[1]: Starting node-sample.service...
Nov 22 01:54:37 d02 systemd[1]: Started node-sample.service.
PID ka ndryshuar, duke treguar se aplikacioni me të vërtetë është vrarë dhe rifilluar.
Prizat e internetit
Nëse aplikacioni përdor uebsocket, linjat e mëposhtme duhet të shtohen në konfigurimin Nginx:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
dhe Nginx duhet të ringarkohet:
# systemctl reload nginx