Node.js: Pradžia

Sužinokite, kaip greitai ir saugiai diegti Node.js paslaugą Stackhero platformoje

👋 Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo paruoštą naudoti Node.js cloud sprendimą, kuris suteikia daugybę privalumų, įskaitant:

  • Įdiekite savo programą per kelias sekundes su paprastu git push.
  • Naudokite savo domeno vardą ir pasinaudokite automatiniu HTTPS sertifikatų konfigūravimu, kad padidintumėte saugumą.
  • Mėgaukitės ramybe su automatinėmis atsarginėmis kopijomis, vieno paspaudimo atnaujinimais ir paprasta, skaidria bei prognozuojama kainodara.
  • Gaukite optimalią veikimo ir tvirtą saugumą dėka privačios ir dedikuotos VM.

Taupykite laiką ir supaprastinkite savo gyvenimą: išbandyti Stackhero Node.js cloud hosting sprendimą užtrunka tik 5 minutes!

Node.js paslaugos diegimas Stackhero yra greitas, efektyvus ir patikimas. Šis vadovas padės jums atlikti esminius veiksmus, kad galėtumėte diegti savo programą per kelias sekundes, užtikrinant aukščiausio lygio saugumą ir našumą.

Pradėkite kurdami Node.js paslaugą Stackhero. Šis žingsnis sudaro pagrindą jūsų programos diegimui ir leidžia jums išnaudoti visus Stackhero debesų prieglobos sprendimo privalumus.

Prieš diegdami Stackhero, įsitikinkite, kad turite įdiegtus šiuos įrankius:

  1. Git. Jį galite atsisiųsti iš https://git-scm.com/downloads.
  2. Windows vartotojams rekomenduojame naudoti Windows Terminal, kurį galima rasti Microsoft Store, kad patirtis būtų geresnė.

Vienintelė reikalinga konfigūracija yra jūsų SSH viešojo rakto atnaujinimas. Šis raktas leidžia Stackhero saugiai pasiekti jūsų kodo saugyklą.

Norėdami rasti savo viešąjį raktą, vykdykite vieną iš šių komandų:

cat ~/.ssh/id_rsa.pub

arba

cat ~/.ssh/id_ed25519.pub

Jei dar neturite SSH raktų poros, galite ją sugeneruoti vykdydami ssh-keygen Linux arba macOS arba ssh-keygen.exe Windows.

Gavę savo viešąjį raktą, prisijunkite prie Stackhero valdymo skydelio, pasirinkite savo Node.js paslaugą, eikite į jos konfigūraciją ir įklijuokite savo raktą.

Patarimas: Galite nustatyti savo SSH viešąjį raktą globaliai, kad visi būsimi paslaugos automatiškai jį įtrauktų. Norėdami tai padaryti, eikite į Stackhero valdymo skydelį, spustelėkite savo profilio nuotrauką (esančią viršutiniame dešiniajame kampe), eikite į 'Jūsų profilis' ir įklijuokite savo SSH viešąjį raktą.

Pateikiama pavyzdinė Node.js programa, iliustruojanti diegimo procesą Stackhero. Galite klonuoti saugyklą naudodami šias komandas:

git clone https://github.com/stackhero-io/nodejsGettingStarted.git stackhero-nodejs-getting-started
cd stackhero-nodejs-getting-started

Programos diegimas per git yra greitas, patikimas ir paprastas Stackhero. Jūsų paslaugos pagrindiniame puslapyje rasite komandą, kaip pridėti git nuotolinį. Tai gali atrodyti taip:

git remote add stackhero ssh://stackhero@XXXXX.stackhero-network.com:222/project.git

Tiesiog nukopijuokite ir įklijuokite komandą į savo terminalą.

Stumkite savo kodą į Stackhero naudodami šią komandą:

git push stackhero main

Pirmą kartą stumiant, jums bus paprašyta pridėti rakto pirštų atspaudą. Įveskite "yes", kad tęstumėte.

Po kelių akimirkų jūsų programa bus gyva. Galite patikrinti jos būseną apsilankę svetainės URL, pateiktame Stackhero valdymo skydelyje (pvz., https://XXXXX.stackhero-network.com).

Viskas. Jūsų programa dabar įdiegta!

Jei atliksite pakeitimus app.js faile, tiesiog įsipareigokite ir stumkite savo pakeitimus:

git add -A .
git commit -m "Update app.js"
git push stackhero main

Esamoms programoms pridėkite nuotolinę saugyklą, kaip aprašyta anksčiau skyriuje Konfigūruokite nuotolinio saugyklos serverį. Tada diekite savo pakeitimus su:

git push stackhero main

Jei susiduriate su šia klaida:

error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
(e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ši klaida rodo, kad jūsų vietinė saugykla nėra sinchronizuota su nuotoline saugykla. Tokiu atveju galite priversti stumti vykdydami:

git push -f stackhero main

Jei matote šią klaidą vykdydami git push stackhero main:

error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'

Tai rodo, kad šaka main neegzistuoja. Galite pabandyti stumti šaką master vietoj:

git push stackhero master

Jei git atsako "Everything up-to-date", bet jūsų pakeitimai nėra įdiegti, tai gali būti dėl to, kad pamiršote įsipareigoti savo pakeitimus. Tokiu atveju vykdykite:

git add -A .
git commit -m "Your commit message"
git push stackhero main

Jei nebuvo atlikta jokių pakeitimų, bet vis tiek norite priversti diegimą, galite priversti tuščią įsipareigojimą:

git commit --allow-empty -m "Force update"
git push stackhero main

Jei norite diegti kitą šaką nei main, pvz., production, galite naudoti šią komandą:

git push stackhero production:main

Jei dirbate su žymomis ir norite diegti konkrečią žymą (pvz., v1.0), vykdykite:

git push stackhero 'v1.0^{}:main'

Čia ^{} užtikrina, kad su žyma susijęs įsipareigojimas būtų stumiamas.

Jei reikia diegti konkretų įsipareigojimą, pirmiausia nustatykite įsipareigojimo hash naudodami git log. Tada diekite jį su:

git push -f stackhero <HASH>:main

Galite nustatyti kelias Node.js paslaugas skirtingoms aplinkoms, pvz., produkcijai ir testavimui. Norėdami pervadinti dabartinį nuotolinį iš stackhero į stackhero-staging, vykdykite:

git remote rename stackhero stackhero-staging

Tada sukurkite naują Node.js paslaugą Stackhero valdymo skydelyje ir pridėkite ją kaip stackhero-production:

git remote add stackhero-production ssh://stackhero@XXXXX.stackhero-network.com:222/project.git

Diekite į produkciją arba testavimą naudodami atitinkamas komandas:

git push stackhero-production main

arba

git push stackhero-staging main

macOS gali paprašyti jūsų SSH rakto slaptažodžio kiekvieną kartą stumiant kodą. Dėl patogumo ir saugumo (nepašalinant rakto slaptažodžio) galite jį išsaugoti macOS raktų pakabuke vykdydami:

/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa

Ši komanda išsaugo jūsų rakto slaptažodį raktų pakabuke, kad ateityje diegiant nebūtų prašoma.

Testavimo ir produkcijos aplinkose saugiai valdyti paslaptis, tokias kaip žetonai ar slaptažodžiai, yra būtina. Vietoj to, kad šias paslaptis saugotumėte tiesiogiai savo saugykloje, naudokite aplinkos kintamuosius, kad padidintumėte saugumą.

Galite pridėti aplinkos kintamuosius per Stackhero valdymo skydelį ir pasiekti juos savo Node.js kode. Pavyzdžiui, jei apibrėžiate kintamąjį pavadinimu mySecret, galite jį pasiekti savo programoje taip:

process.env.mySecret

Jei jūsų programa nenaudoja HTTP, gali tekti atidaryti papildomus TCP ir UDP prievadus per Stackhero valdymo skydelį. Tiesiog nurodykite viešąjį įėjimo prievadą, paskirties prievadą jūsų Node.js paslaugoje ir protokolą (TCP arba UDP), kad užtikrintumėte tinkamą ryšį.

Norint saugoti failus, tokius kaip vartotojų nuotraukos, geriausia naudoti objektų saugojimo sprendimą. Šis požiūris leidžia dalintis failais tarp kelių paslaugų ir instancijų, tuo pačiu atskiriant jūsų kodą nuo duomenų. Rekomenduojame MinIO kaip paprastą, greitą ir galingą sprendimą, suderinamą su Amazon S3 protokolu.

Jei pageidaujate vietinio saugojimo, galite naudoti nuolatinį saugojimą, prieinamą su jūsų Node.js instancija. Šis saugojimas yra /persistent/storage/.

DĖMESIO: Niekada nesaugokite duomenų už /persistent/storage/ aplanko ribų!

Duomenys, saugomi už šio aplanko ribų, gali būti prarasti, jei jūsų instancija bus paleista iš naujo arba jei stumsite kodo pakeitimus.

Diegiant naują jūsų programos versiją, senoji versija iš anksto gauna nutraukimo signalą. Tai suteikia jai laiko švelniai uždaryti duomenų bazės ryšius ir sustabdyti kitas paslaugas.

Nutraukimo signalas SIGTERM yra siunčiamas. Galite užfiksuoti šį signalą savo kode taip:

process.on('SIGTERM', () => {
  // Šis logas pasirodo Stackhero valdymo skydelyje 'logs' skirtuke
  console.info('😯 SIGTERM signalas gautas.');

  // Uždarykite atidarytus duomenų bazės ryšius ar kitas paslaugas čia
  // ...
});

Pagal numatymą, Node.js veikia viename branduolyje naudodamas vieną giją. Norėdami pilnai išnaudoti visus galimus CPU branduolius, apsvarstykite galimybę naudoti Node.js cluster API. Galite peržiūrėti oficialią dokumentaciją čia: https://nodejs.org/api/cluster.html.

Žemiau pateiktas paprastas pavyzdys, kuris sukuria HTTP serverį, naudojantį visus galimus CPU:

const cluster = require('cluster');
const http = require('http');
const cpusCount = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers
  for (let i = 0; i < cpusCount; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Workers share any TCP connection; in this case, an HTTP server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}