Ustvarjanje aplikacije Node.js v cPanelu (Setup Node.js App)

cPanel Branje: 5 min

Na naših gostovanjih cPanel lahko poganjaš tudi aplikacijo Node.js. Aplikacije upravlja CloudLinux Node.js Selector, ki je v cPanelu dosegljiv pod imenom Setup Node.js App. Tu izbereš različico Node.js ter aplikacijo zaženeš, ustaviš in znova zaženeš. Aplikacijo poganja Phusion Passenger, zato ti ni treba odpirati ločenih vrat ali uporabljati upravitelja procesov (na primer pm2).

Splošen pregled najdeš v blogovskem zapisu o gostovanju aplikacij Node.js.

Ustvarjanje aplikacije

  1. Prijavi se v cPanel in v skupini Programska oprema klikni ikono Setup Node.js App. Seznam SPLETNE APLIKACIJE na strani Node.js, ki se odpre, kaže že ustvarjene aplikacije.
  2. Klikni gumb USTVARI APLIKACIJO.
  3. Izpolni polja:
    • Različica Node.js: različica Node.js, ki jo želiš uporabljati. Izberi tisto, za katero si razvil svojo aplikacijo.
    • Način aplikacije: način Production (produkcijski) ali Development (razvojni). To bo vrednost okoljske spremenljivke NODE_ENV.
    • Koren aplikacije: imenik aplikacije na gostovanju, glede na tvoj imenik (/home/felhasznalo), na primer nodeapp. Ne navedi imenika public_html, ker bi bilo tako mogoče izvorno kodo javno prenesti.
    • URL aplikacije: domena in pot, na kateri bo aplikacija dosegljiva, na primer pelda.hu ali pelda.hu/api.
    • Zagonska datoteka aplikacije: vstopna datoteka aplikacije, na primer app.js.
    • Dnevniška datoteka Passenger: če navedeš datoteko, na primer /home/felhasznalo/logs/nodeapp.log, pridejo vanjo izpisi in sporočila o napakah aplikacije.
  4. V zgornjem desnem kotu klikni gumb USTVARI.

Node.js: obrazec USTVARI APLIKACIJO z različico, načinom, imenikom in URL-jem aplikacije

cPanel ustvari imenik in, če vstopna datoteka še ne obstaja, vanj postavi preprosto vzorčno aplikacijo „It works!”. Na naslovu URL aplikacije lahko preveriš, ali deluje.

Nalaganje aplikacije

Datoteke aplikacije naloži v imenik Koren aplikacije z Upraviteljem datotek ali prek FTP. Minimalna aplikacija Express je videti tako:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Pozdrav iz aplikacije Node.js!');
});

app.listen(process.env.PORT || 3000);

Vrat ti ni treba nastaviti: Passenger prevzame klic listen() aplikacije in dohodne zahteve usmeri k aplikaciji.

Pomembno: Passenger zna neposredno naložiti le module CommonJS (require). Če tvoja aplikacija uporablja module ES (import), ustvari datoteko app_wrapper.cjs z naslednjo vsebino in jo navedi kot vstopno datoteko:

(() => import('./app.js'))();

Namestitev paketov

Odvisnosti lahko namestiš na podlagi datoteke package.json v imeniku aplikacije:

  1. Datoteko package.json naloži v imenik Koren aplikacije.
  2. V vmesniku Setup Node.js App klikni ikono za urejanje (svinčnik) ob aplikaciji.
  3. V razdelku Zaznane konfiguracijske datoteke se prikaže package.json. Klikni gumb Zaženi namestitev NPM.

Urejanje aplikacije Node.js: ukaz virtualnega okolja, USTAVI APLIKACIJO, ZNOVA ZAŽENI, Zaženi namestitev NPM in Zaženi skript JS

Pomembno: Node.js Selector pakete hrani zunaj imenika aplikacije, v ločenem virtualnem okolju, v imeniku aplikacije pa postavi le povezavo (symlink) z imenom node_modules. Zato ne nalagaj lastnega imenika node_modules. Če je tak imenik ali datoteka v korenu aplikacije, se namestitev ustavi z napako. Izbriši ga in pakete namesti na zgornji način.

Z gumbom Zaženi skript JS lahko zaženeš ukaze, navedene v delu scripts datoteke package.json (na primer build).

Okoljske spremenljivke

Na strani za urejanje aplikacije lahko z gumbom DODAJ SPREMENLJIVKO vneseš okoljske spremenljivke, na primer dostop do podatkovne baze ali ključ API. Aplikacija jih doseže prek objekta process.env, zato gesel ni treba pisati v izvorno kodo. Po shranjevanju aplikacijo znova zaženi.

Ponovni zagon po spremembi

Passenger še naprej poganja že naloženo aplikacijo, zato je treba aplikacijo po spremembi datotek znova zagnati. Za to klikni gumb ZNOVA ZAŽENI na vrhu strani za urejanje ali ikono ponovnega zagona v stolpcu Dejanja seznama aplikacij. Z gumbom USTAVI APLIKACIJO jo lahko ustaviš, z gumbom UNIČI (ali z ikono koša na seznamu) pa aplikacijo izbrišeš.

Uporaba v ukazni vrstici (SSH)

V paketih z dostopom SSH (cP Premium, cP Pro in cP Pro 100) lahko v virtualno okolje aplikacije vstopiš tudi iz terminala. Točen ukaz vmesnik Setup Node.js App pokaže na vrhu strani za urejanje aplikacije in je videti tako:

source /home/felhasznalo/nodevenv/nodeapp/20/bin/activate && cd /home/felhasznalo/nodeapp

Nato ukaza node in npm tečeta z izbrano različico, zato je mogoče uporabiti na primer tudi npm install. Prijavo SSH opisuje članek o nastavitvi ključa SSH v cPanelu.

Avtomatizacija iz ukazne vrstice (cloudlinux-selector)

V paketih z dostopom SSH je korake vmesnika Setup Node.js App mogoče opraviti tudi z ukazom cloudlinux-selector, zato je ustvarjanje in posodabljanje aplikacije mogoče avtomatizirati tudi iz skripta ali postopka CI/CD. Ukaz teče s tvojim uporabnikom, pravice root zanj niso potrebne. Za Node.js Selector ni dokumentiranega spletnega API-ja in tudi cPanel UAPI teh aplikacij ne upravlja, zato je za avtomatizacijo potrebna povezava SSH.

Aplikacijo ustvariš tako:

A="--json --interpreter nodejs"
R="--app-root nodeapp"

cloudlinux-selector create $A --domain pelda.hu $R --app-uri api --version 22 \
  --app-mode production --startup-file app.js \
  --env-vars '{"KULCS":"ertek"}' \
  --passenger-log-file=/home/felhasznalo/logs/nodeapp.log

Stikalo --interpreter nodejs je treba navesti pri vsakem ukazu, ker je privzet PHP. --app-root je pot glede na tvoj imenik, --domain in --app-uri skupaj dasta URL aplikacije (tu pelda.hu/api), vrednost --app-mode pa je production ali development.

Nato datoteke naloži v imenik Koren aplikacije, na primer prek SFTP ali z ukazom rsync, nato namesti pakete, zaženi potrebni skript in aplikacijo znova zaženi:

cloudlinux-selector install-modules $A $R
cloudlinux-selector run-script $A $R --script-name build
cloudlinux-selector restart $A $R

Druge operacije so dosegljive enako:

cloudlinux-selector get $A                          # seznam aplikacij in različic
cloudlinux-selector set $A $R --env-vars '{"KULCS":"uj-ertek"}' --new-version 24
cloudlinux-selector set $A $R --app-mode development
cloudlinux-selector stop $A $R
cloudlinux-selector start $A $R
cloudlinux-selector destroy $A $R

V skriptu bodi pozoren na naslednje:

  • Po uspešnem ukazu je vrednost polja result v izpisu JSON success. To preveri v skriptu.
  • run-script izpis in povratno kodo skripta vrne kodirana v base64 v polju data. Z ukazom base64 -d ju narediš berljiva.
  • Če z ukazom set spremeniš različico Node.js ali okoljsko spremenljivko, lahko aplikacija po ponovnem zagonu še nekaj sekund odgovarja s prejšnjimi vrednostmi. Po zamenjavi različice preveri, s katero različico aplikacija dejansko teče (process.version). Nameščenih paketov po zamenjavi različice ni bilo treba znova namestiti.
  • Naslov ustavljene aplikacije vrne napako 403.
  • destroy izbriše virtualno okolje, izvorne kode pa ne. Imenik Koren aplikacije, dnevniško datoteko in mapo, ustvarjeno za pot v korenskem imeniku domene (na primer public_html/api, v njej prazna datoteka .htaccess), izbriši ročno, ker naslov vrača napako 403, dokler ta mapa obstaja.

Iskanje napak

  • Če se aplikacija ne zažene, poglej dnevniško datoteko, navedeno v polju Dnevniška datoteka Passenger.
  • Med razvojem način Development prikazuje podrobnejša sporočila o napakah. Na produkcijski strani ga ne puščaj vklopljenega.
  • Aplikacija teče znotraj omejitev virov računa gostovanja. Če se zaradi pomanjkanja pomnilnika ustavi, preveri porabo virov.
Nazaj: cPanel – članki (48)