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 platformoje yra sukurtas taip, kad būtų greitas, efektyvus ir patikimas. Šiame vadove žingsnis po žingsnio parodysime, kaip per kelias minutes paleisti savo aplikaciją, užtikrinant saugumą ir našumą.

Pirmiausia sukurkime Node.js paslaugą Stackhero platformoje. Tai bus jūsų aplikacijos diegimo pagrindas ir suteiks prieigą prie visų Stackhero debesų talpinimo privalumų.

Prieš pradėdami įsitikinkite, kad turite šiuos įrankius:

  1. Git: Atsisiųskite iš https://git-scm.com/downloads.
  2. Windows naudotojams: Patogesniam darbui rekomenduojama naudoti Windows Terminal, kurį rasite Microsoft Store.

Pagrindinis konfigūravimo žingsnis – atnaujinti savo SSH viešąjį raktą. Šis raktas leidžia Stackhero saugiai pasiekti jūsų kodo saugyklą.

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

cat ~/.ssh/id_rsa.pub

arba

cat ~/.ssh/id_ed25519.pub

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

Kai jau turite viešąjį raktą, prisijunkite prie Stackhero valdymo skydelio, pasirinkite savo Node.js paslaugą, eikite į konfigūracijos skiltį ir įklijuokite raktą į tam skirtą lauką.

Tip: Jei norite, kad jūsų SSH viešasis raktas būtų prieinamas visoms būsimoms paslaugoms, galite jį nustatyti globaliai. Stackhero valdymo skydelyje spustelėkite savo profilio nuotrauką (viršuje dešinėje), pasirinkite „Jūsų profilis“ ir įklijuokite SSH viešąjį raktą ten.

Kad pradėti būtų lengviau, pateikiame Node.js aplikacijos pavyzdį, kuris parodo, kaip veikia diegimas Stackhero platformoje. Galite klonuoti saugyklą šiomis komandomis:

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

Aplikacijos diegimas per Git Stackhero platformoje yra paprastas. Jūsų paslaugos pagrindiniame puslapyje rasite komandą, skirtą pridėti Git nutolusią saugyklą. Ji gali atrodyti taip:

git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Nukopijuokite ir įklijuokite šią komandą į terminalą, kad nustatytumėte nutolusią saugyklą.

Norėdami diegti, tiesiog išsiųskite kodą į Stackhero su:

git push stackhero main

Pirmą kartą siunčiant kodą, būsite paprašyti patvirtinti rakto „fingerprint“. Tiesiog įveskite „yes“, kad tęstumėte.

Po kelių akimirkų jūsų aplikacija bus pasiekiama. Jos būseną galite patikrinti apsilankę Stackhero valdymo skydelyje nurodytu svetainės adresu (pvz., https://<XXXXXX>.stackhero-network.com).

Viskas – jūsų aplikacija jau įdiegta.

Jei norite atlikti pakeitimus, atnaujinkite app.js failą, įvykdykite pakeitimus ir išsiųskite juos:

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

Jei jau turite Node.js aplikaciją, pridėkite Stackhero nutolusią saugyklą, kaip aprašyta aukščiau, ir diekite kodą su:

git push stackhero main

Jei gaunate šią klaidą:

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.

Tai reiškia, kad jūsų vietinė saugykla nėra sinchronizuota su nutolusia. Galite priverstinai išsiųsti pakeitimus su:

git push -f stackhero main

Jei siunčiant kodą matote:

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

Tai dažniausiai reiškia, kad šaka main neegzistuoja. Pabandykite išsiųsti šaką master vietoje:

git push stackhero master

Jei Git praneša „Everything up-to-date“, bet jūsų pakeitimai neįdiegti, tikėtina, kad pamiršote įvykdyti pakeitimus. Pabandykite šią komandą:

git add -A .
git commit -m "Jūsų commit žinutė"
git push stackhero main

Jei pakeitimų nėra, bet vis tiek norite inicijuoti diegimą, galite priverstinai sukurti tuščią commit:

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

Jei norite diegti ne main, o, pavyzdžiui, production šaką, naudokite:

git push stackhero production:main

Jei naudojate tag'us ir norite diegti konkretų tag'ą (pvz., v1.0), paleiskite:

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

^{} užtikrina, kad bus išsiųstas su tag'u susietas commit.

Norėdami diegti konkretų commit, pirmiausia raskite jo hash su git log. Tada diekite su:

git push -f stackhero <HASH>:main

Galite norėti atskirti production ir staging aplinkas. Norėdami pervadinti esamą nutolusią saugyklą iš stackhero į stackhero-staging, paleiskite:

git remote rename stackhero stackhero-staging

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

git remote add stackhero-production ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git

Dabar galite diegti į kiekvieną aplinką su:

git push stackhero-production main

arba

git push stackhero-staging main

macOS aplinkoje gali būti, kad kiekvieną kartą siunčiant kodą bus prašoma SSH rakto slaptažodžio. Patogumui ir saugumui galite jį išsaugoti macOS keychain paleisdami:

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

Ši komanda išsaugo rakto slaptažodį, todėl ateityje diegiant jo nebereikės įvesti.

Dirbant su staging ir production aplinkomis, svarbu saugiai tvarkyti slaptus duomenis, tokius kaip token'ai ar slaptažodžiai. Vietoj to, kad juos laikytumėte saugykloje, naudokite aplinkos kintamuosius.

Aplinkos kintamuosius galite pridėti Stackhero valdymo skydelyje ir pasiekti juos Node.js kode. Pavyzdžiui, jei apibrėžiate kintamąjį mySecret, aplikacijoje jį pasieksite taip:

process.env.mySecret

Jei jūsų aplikacijai reikia naudoti kitus protokolus nei HTTP, galite Stackhero valdymo skydelyje atverti papildomus TCP ar UDP prievadus. Nurodykite viešą įėjimo prievadą, paskirties prievadą Node.js paslaugoje ir protokolą (TCP arba UDP).

Norint saugoti naudotojų failus, pvz., nuotraukas, rekomenduojama naudoti objektų saugyklą (object storage). Tai leidžia dalintis failais tarp kelių paslaugų ir instancijų bei atskirti kodą nuo duomenų. Rekomenduojame MinIO kaip greitą, paprastą ir galingą sprendimą, suderinamą su Amazon S3 protokolu.

Jei pageidaujate vietinio saugojimo, galite naudoti nuolatinę atmintį, kuri prieinama jūsų Node.js instance. Ši atmintis yra kataloge /persistent/storage/.

DĖMESIO: Visada saugokite duomenis kataloge /persistent/storage/.

Duomenys, saugomi už šio katalogo ribų, gali būti prarasti, jei instance bus paleistas iš naujo arba išsiųsite kodo pakeitimus.

Diegiant naują aplikacijos versiją, ankstesnei versijai prieš išjungiant siunčiamas nutraukimo signalas. Tai suteikia aplikacijai laiko uždaryti duomenų bazės ryšius ir kitus servisus korektiškai.

Nutraukimo signalas SIGTERM siunčiamas jūsų aplikacijai. Jį galite apdoroti kode taip:

process.on('SIGTERM', () => {
  // Šis log'as matomas Stackhero valdymo skydelyje „logs“ skiltyje
  console.info('SIGTERM signal received.');

  // Čia uždarykite atvirus duomenų bazės ryšius ar kitus servisus
  // ...
});

Pagal nutylėjimą Node.js naudoja vieną branduolį ir vieną giją. Norėdami išnaudoti visus CPU branduolius, galite naudoti Node.js cluster API. Oficialią dokumentaciją rasite čia: https://nodejs.org/api/cluster.html.

Štai paprastas pavyzdys, kuris sukuria HTTP serverį, naudojantį visus prieinamus 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 dalinasi bet kokiu TCP ryšiu, šiuo atveju – HTTP serveriu
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

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