Posodobitve kritičnih PHP ranljivosti (CVE-2026-109618, CVE-2026-109619). VEČ O TEM

✕
Košarica (0)
  • Vaša košarica je trenutno prazna

NEOSERV BLOG

Nasveti, vodiči in koristne informacije o domenah, gostovanju, SSL certifikatih, e-pošti, spletni optimizaciji in varnosti na spletu.

Node.js aplikacija na spletnem gostovanju
Kategorija: Triki in nasveti
Objavljeno:

Vse več spletnih aplikacij nastaja s pomočjo umetne inteligence (ChatGPT, Claude, Cursor, …). Koda hitro deluje na vašem računalniku, ko pa jo želite objaviti, se pojavijo vprašanja: ali moj paket gostovanja to podpira, kam naložim datoteke, zakaj se stran ne odpre?

V tem prispevku boste izvedeli, kako na NEOSERV spletnem gostovanju postaviti Node.js aplikacijo, na primer API v ogrodju Express ali Fastify. Predstavili bomo postopek namestitve, nastavitve in najpogostejše težave, na katere lahko naletite. Vse opisane korake smo preizkusili na naših strežnikih, na paketih Zeleni in Turbo.

Kazalo

Kateri paketi podpirajo Node.js?

Node.js aplikacije lahko poganjate na paketih Zeleni, Modri in Rdeči, na paketih Reseller gostovanja ter na vseh paketih Turbo gostovanja. Paketa Beli in Oranžni Node.js aplikacij ne podpirata.

Ali vaš paket podpira Node.js, najhitreje preverite v nadzorni plošči cPanel: v sekciji Software mora obstajati ikona Setup Node.js App. Če je ni, lahko paket kadarkoli nadgradite, doplačate pa le razliko v ceni.

cPanel (Jupiter) - Setup Node.js App

Na voljo so različice Node.js od 6 do 24. Za nove projekte priporočamo Node.js 22 ali 24 (različici z dolgoročno podporo).

Kako Node.js aplikacija teče na našem strežniku?

To je pomembno razumeti, saj pojasni večino težav, na katere naletijo razvijalci:

  • Aplikacijo zažene spletni strežnik LiteSpeed ob prvem obisku. Ni vam je treba zaganjati ročno z node app.js ali npm start.
  • Aplikacija teče kot en proces, ki obdeluje vse zahtevke. Ko enkrat teče, se ob neaktivnosti ne zaustavi.
  • Če se aplikacija sesuje, jo strežnik ob naslednjem obisku samodejno znova zažene. Zagon traja približno 0,7 sekunde (Next.js 1–2 sekundi).
  • Vrata (port) določi strežnik. Spremenljivka PORT ni nastavljena, zato v kodi uporabite app.listen(process.env.PORT || 3000). Strežnik zahtevke preusmeri v vašo aplikacijo ne glede na številko.
  • Hkrati lahko ena aplikacija obdeluje 12 zahtevkov, nadaljnji počakajo v vrsti. Za običajne spletne aplikacije je to dovolj, saj je vsak zahtevek obdelan v nekaj milisekundah.

1. korak: ustvarite aplikacijo v cPanel

1. V nadzorni plošči cPanel kliknite Setup Node.js App in nato CREATE APPLICATION.

2. Izpolnite polja:

  • Node.js version: npr. 22,
  • Application mode: Production,
  • Application root: mapa z vašo aplikacijo, npr. mojaapi (nahaja se v domači mapi, izven public_html, zato datoteke niso javno dostopne),
  • Application URL: naslov, na katerem bo aplikacija dostopna, npr. vasadomena.si/api ali poddomena,
  • Application startup file: datoteka, ki zažene aplikacijo, npr. app.js (pri package.json je to datoteka iz polja main ali iz skripte start).

3. Kliknite CREATE.

cPanel ustvari mapo aplikacije in lastno virtualno okolje. Ko odprete URL aplikacije, se izpiše »It works!« in različica Node.js.

Na vrhu strani aplikacije je prikazan ukaz za vstop v virtualno okolje, na primer:

source /home/uporabnik/nodevenv/mojaapi/22/bin/activate && cd /home/uporabnik/mojaapi

Pozor: dve aplikaciji ne smeta imeti istega Application URL. cPanel vas ne opozori, druga aplikacija pa tiho prevzame naslov prve.

2. korak: naložite kodo in namestite pakete

Datoteke aplikacije naložite v mapo aplikacije (prek upravitelja datotek, FTP ali Git). Ne nalagajte mape node_modules. V mapi aplikacije je node_modules povezava v virtualno okolje, ki ga ustvari cPanel.

Pakete namestite prek SSH ali aplikacije Terminal v cPanel:

source /home/uporabnik/nodevenv/mojaapi/22/bin/activate
cd ~/mojaapi
npm install

Pakete lahko namestite tudi v vmesniku Setup Node.js App z gumbom Run NPM Install.

Ukaz npm v virtualnem okolju vedno namešča v aplikacijo, katere okolje ste aktivirali, ne glede na mapo, v kateri ste. Če imate več aplikacij, pred npm install vedno aktivirajte pravo okolje.

node_modules šteje v omejitev števila datotek paketa (npr. 150.000 pri paketu Zeleni). Ne nameščajte paketov, ki jih aplikacija ne potrebuje, razvojna orodja pa izpustite z npm install --omit=dev.

3. korak: nastavite spremenljivke okolja

Gesla, ključe API in podatke za bazo vpišite v Setup Node.js App → Environment variables (npr. DB_PASS, OPENAI_API_KEY) in kliknite SAVE. Aplikacija jih prebere s process.env.DB_PASS. Spremenljivka NODE_ENV je v načinu Production samodejno nastavljena na production.

Če uporabljate datoteko .env (paket dotenv), jo hranite v mapi aplikacije, nikoli v public_html.

4. korak: ponovno zaženite aplikacijo

Strežnik sprememb v kodi ne zazna sam. Po vsaki spremembi aplikacijo ponovno zaženite z gumbom RESTART v Setup Node.js App ali z ukazom:

touch ~/mojaapi/tmp/restart.txt

Ob ponovnem zagonu aplikacija prejme signal SIGTERM, zato lahko pred zaustavitvijo zapre povezave z bazo.

Primer: najmanjša Express aplikacija

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

app.get('/api/pozdrav', (req, res) => {
res.json({ sporocilo: 'Pozdravljeni!' });
});

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

Pomembno: aplikacija prejme celotno pot, vključno z naslovom iz polja Application URL. Če je aplikacija na vasadomena.si/api, mora biti pot v Expressu /api/pozdrav, ne /pozdrav. Če želite poti pisati brez predpone, uporabite usmerjevalnik:

const router = express.Router();
router.get('/pozdrav', (req, res) => res.json({ ok: true }));
app.use('/api', router);

Pri aplikaciji na poddomeni (npr. api.vasadomena.si) predpone ni.

Dnevniki in iskanje napak

Napake se zapisujejo v datoteko stderr.log v mapi aplikacije. Vanjo pride vse, kar izpišete s console.error, in neujete napake. Izpis console.log se ne shrani, zato za pomembna sporočila uporabite console.error ali lasten zapis v datoteko.

Omejitve paketov pri uporabi Node.js

Node.js aplikacija deli sredstva vašega paketa z vsem ostalim na njem (spletna stran, e-pošta, cron opravila). Za paket Zeleni veljajo omejitve, prikazane v spodnji tabeli.

Sredstvo Zeleni Kaj to pomeni za Node.js
Procesor 1 jedro Jedro si delijo vse aplikacije in PHP strani na paketu.
Pomnilnik 1 GB Express aplikacija porabi približno 75–100 MB.
Procesi in niti 100 Šteje vsak proces in vsaka nit. Express aplikacija porabi 7–11 niti, nekatera orodja pa več deset (glejte spodaj).
Število datotek 150.000 Šteje tudi node_modules.

Vse našteto si delijo vsi procesi na paketu: Node.js aplikacije, PHP (npr. WordPress), PM2, cron opravila in tudi vaša SSH seja. Ko je omejitev procesov in niti dosežena, PHP strani na paketu vračajo napako 503, prijava prek SSH pa ne uspe, dokler se procesi ne sprostijo.

Zakaj nekatera orodja ustvarijo toliko niti? Node.js in orodja, napisana v jeziku Rust (Next.js, Vite), na strežniku zaznajo vse procesorje strežnika, ne le tistega, ki je na voljo vašemu paketu, in temu primerno ustvarijo niti. Zato:

  • frontend (Vite, Vue, React) zgradite na svojem računalniku in naložite samo rezultat,
  • Next.js na paketih Zeleni, Modri in Rdeči poganjajte samo v načinu output: "standalone".

Podrobnosti najdete v prispevku Next.js ali Vue/React aplikacija z Node.js zaledjem.

Omejitve ostalih paketov najdete v pogojih uporabe. Paketi Turbo imajo bistveno več sredstev.

Najpogostejše napake in rešitve

▪️ Stran vrne 404 ali »Cannot GET /…«. Poti v aplikaciji ne vsebujejo predpone iz Application URL (glejte primer zgoraj).

▪️ Napaka 503. Aplikacija se ob zagonu sesuje. Poglejte stderr.log v mapi aplikacije. Najpogosteje manjka paket (Cannot find module) ali spremenljivka okolja.

▪️ Aplikacija vrača 503, v stderr.log pa je spawn EAGAIN, uv_thread_create ali »Resource temporarily unavailable«. Dosežena je omejitev procesov in niti paketa. Preverite, ali na paketu ne teče več aplikacij ali build, ki ste ga zagnali na strežniku. Next.js zaženite v načinu standalone.

▪️ Sprememba kode se ne pozna. Aplikacijo ponovno zaženite.

▪️ Aplikacija uporablja ES module ("type": "module", import). Deluje brez dodatnih nastavitev, tudi z zagonsko datoteko s končnico .mjs.

▪️ Aplikacija je napisana v TypeScriptu. Kodo prevedite na svojem računalniku (npm run build oz. tsc) in kot startup file nastavite prevedeno datoteko, npr. dist/server.js. Orodij ts-node in tsx za produkcijo ne uporabljajte.

▪️ Ob večjem številu hkratnih počasnih zahtevkov se odzivi zamaknejo. Aplikacija obdeluje 12 zahtevkov hkrati, ostali čakajo. Počasne zunanje klice (npr. AI API) izvajajte asinhrono in jim nastavite časovno omejitev.

Ko z AI asistentom pripravljate aplikacijo za objavo na našem gostovanju, mu lahko podate naslednje navodilo:

Aplikacijo bom objavil na spletnem gostovanju cPanel s CloudLinux "Setup Node.js App" in spletnim strežnikom LiteSpeed.

- Strežnik naj posluša na process.env.PORT || 3000, ne na fiksnih vratih.

- Aplikacija bo na naslovu /api (Application URL), zato naj Express poti vključujejo /api ali naj bo usmerjevalnik priklopljen z app.use('/api', router).

- Napake izpisuj s console.error (console.log se ne shranjuje).

- Gesla in ključe beri iz process.env, ne iz kode.

- TypeScript prevedi v JavaScript, startup file naj bo prevedena datoteka.

- Frontend naj kliče API z relativno potjo (npr. /api/...), ne localhost:3000.

- Za MySQL uporabi mysql2 z bazenom povezav (connectionLimit 5) in utf8mb4.

- Za Next.js uporabi output: "standalone".

- Za Prisma uporabi engineType = "client" in @prisma/adapter-mariadb (brez Rust pogona).

- Socket.io: nastavi path pod naslovom aplikacije (npr. /api/socket.io) na strežniku in v brskalniku.

Katero gostovanje izbrati za Node.js aplikacijo?

Spletno gostovanje s podporo za Node.js je odlično za spletne aplikacije, API-je, bote, webhooke in manjše projekte.

Turbo gostovanje priporočamo za Next.js aplikacije s strežniškim izrisovanjem, več aplikacij na enem paketu, aplikacije z WebSocket povezavami in procese, ki morajo teči ves čas (PM2). Paketi Turbo imajo bistveno več sredstev, okolje pa ostane enako enostavno za upravljanje.

VPS strežnik priporočamo, ko potrebujete:

  • stalno obremenitev (obdelava podatkov, analitika),
  • veliko sočasnih uporabnikov ali dolgotrajne povezave (npr. klepetalnice, igre),
  • lastne sistemske pakete, Docker ali poljubne nastavitve strežnika,
  • razvojno ali testno okolje.

Na VPS strežniku dobite poln (root) dostop in sistem v celoti prilagodite svoji aplikaciji.

KOMENTARJI

KOMENTIRAJTE OBJAVO

(obvezno)
(obvezno, e-poštni naslov bo skrit)
(neobvezno)
Varnostno vprašanje, ki potrdi, da ste resnična oseba.