Node.js: Aan de slag

Leer hoe u snel en veilig een Node.js-service op Stackhero kunt implementeren

👋 Welkom bij de documentatie van Stackhero!

Stackhero biedt een kant-en-klare Node.js cloud oplossing die tal van voordelen biedt, waaronder:

  • Implementeer uw applicatie in seconden met een eenvoudige git push.
  • Gebruik uw eigen domeinnaam en profiteer van de automatische configuratie van HTTPS-certificaten voor verbeterde beveiliging.
  • Geniet van gemoedsrust met automatische back-ups, updates met één klik, en eenvoudige, transparante en voorspelbare prijzen.
  • Krijg optimale prestaties en robuuste beveiliging dankzij een privé en dedicated VM.

Bespaar tijd en vereenvoudig uw leven: het kost slechts 5 minuten om de Node.js cloud hosting oplossing van Stackhero te proberen!

Het implementeren van een Node.js-service op Stackhero is snel, efficiënt en betrouwbaar. Deze gids leidt u door de essentiële stappen om uw app in enkele seconden te implementeren, terwijl u zorgt voor uitstekende beveiliging en prestaties.

Begin met het maken van een Node.js-service op Stackhero. Deze stap legt de basis voor uw applicatie-implementatie en bereidt u voor om alle voordelen van Stackhero's cloudhostingoplossing te verkennen.

Voordat u op Stackhero implementeert, moet u ervoor zorgen dat u de volgende tools hebt geïnstalleerd:

  1. Git. U kunt het downloaden van https://git-scm.com/downloads.
  2. Voor Windows-gebruikers raden we aan om Windows Terminal te gebruiken, beschikbaar via de Microsoft Store, voor een betere ervaring.

De enige configuratie die u nodig hebt, is het bijwerken van uw SSH-publieke sleutel. Deze sleutel stelt Stackhero in staat om veilig toegang te krijgen tot uw coderepository.

Om uw publieke sleutel te vinden, voert u een van deze opdrachten uit:

cat ~/.ssh/id_rsa.pub

of

cat ~/.ssh/id_ed25519.pub

Als u nog geen SSH-sleutelpaar hebt, kunt u er een genereren door ssh-keygen uit te voeren op Linux of macOS of ssh-keygen.exe op Windows.

Nadat u uw publieke sleutel hebt opgehaald, logt u in op het Stackhero-dashboard, selecteert u uw Node.js-service, navigeert u naar de configuratie en plakt u uw sleutel.

Tip: U kunt uw SSH-publieke sleutel globaal instellen zodat alle toekomstige services deze automatisch opnemen. Ga hiervoor naar het Stackhero-dashboard, klik op uw profielfoto (rechtsboven), navigeer naar 'Uw profiel' en plak uw SSH-publieke sleutel.

Een voorbeeld van een Node.js-applicatie wordt verstrekt om het implementatieproces op Stackhero te illustreren. U kunt de repository klonen met de volgende opdrachten:

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

Het implementeren van uw applicatie via git is snel, betrouwbaar en eenvoudig op Stackhero. Op de hoofdpagina van uw service vindt u een opdracht om een git-remote toe te voegen. Het kan er als volgt uitzien:

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

Kopieer en plak de opdracht eenvoudig in uw terminal.

Push uw code naar Stackhero met de volgende opdracht:

git push stackhero main

De eerste keer dat u pusht, wordt u gevraagd om de sleutelvingerafdruk toe te voegen. Typ "yes" om door te gaan.

Na enkele momenten is uw applicatie live. U kunt de status verifiëren door de website-URL te bezoeken die op het Stackhero-dashboard wordt verstrekt (bijvoorbeeld https://XXXXX.stackhero-network.com).

Dat is alles. Uw applicatie is nu geïmplementeerd!

Als u wijzigingen aanbrengt in het app.js-bestand, commit en push dan eenvoudig uw wijzigingen:

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

Voor bestaande applicaties voegt u de externe repository toe zoals eerder beschreven onder Configureer de externe repositoryserver. Implementeer vervolgens uw wijzigingen met:

git push stackhero main

Als u de volgende fout tegenkomt:

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.

Deze fout geeft aan dat uw lokale repository niet is gesynchroniseerd met de externe repository. In dit geval kunt u de push forceren door uit te voeren:

git push -f stackhero main

Als u deze fout ziet bij het uitvoeren van 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'

Dit geeft aan dat de branch main niet bestaat. U kunt proberen de master-branch in plaats daarvan te pushen:

git push stackhero master

Als git reageert met "Everything up-to-date" maar uw wijzigingen niet zijn geïmplementeerd, kan het zijn dat u bent vergeten uw wijzigingen te committen. Voer in dat geval uit:

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

Als er geen wijzigingen zijn aangebracht maar u toch een implementatie wilt forceren, kunt u een lege commit forceren:

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

Als u een andere branch dan main wilt implementeren, zoals production, kunt u de volgende opdracht gebruiken:

git push stackhero production:main

Als u met tags werkt en een specifieke tag wilt implementeren (bijvoorbeeld v1.0), voer dan uit:

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

Hier zorgt ^{} ervoor dat de commit die aan de tag is gekoppeld, wordt gepusht.

Als u een specifieke commit moet implementeren, identificeer dan eerst de commit-hash met git log. Implementeer deze vervolgens met:

git push -f stackhero <HASH>:main

U kunt meerdere Node.js-services instellen voor verschillende omgevingen, zoals productie en staging. Om de huidige remote van stackhero naar stackhero-staging te hernoemen, voert u uit:

git remote rename stackhero stackhero-staging

Maak vervolgens een nieuwe Node.js-service in het Stackhero-dashboard en voeg deze toe als stackhero-production:

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

Implementeer naar productie of staging met de respectieve opdrachten:

git push stackhero-production main

of

git push stackhero-staging main

Op macOS kan het zijn dat u wordt gevraagd om uw SSH-sleutelwachtwoord elke keer dat u uw code pusht. Voor meer gemak en veiligheid (zonder uw sleutelwachtwoord te verwijderen), kunt u het opslaan in de macOS-sleutelhanger door uit te voeren:

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

Deze opdracht slaat uw sleutelwachtwoord op in de sleutelhanger, zodat u niet opnieuw wordt gevraagd tijdens toekomstige implementaties.

Voor staging- en productieomgevingen is het essentieel om geheimen zoals tokens of wachtwoorden veilig te beheren. In plaats van deze geheimen direct in uw repository op te slaan, gebruikt u omgevingsvariabelen voor verbeterde beveiliging.

U kunt omgevingsvariabelen toevoegen via het Stackhero-dashboard en er toegang toe krijgen in uw Node.js-code. Als u bijvoorbeeld een variabele met de naam mySecret definieert, kunt u er in uw app als volgt toegang toe krijgen:

process.env.mySecret

Als uw applicatie geen gebruik maakt van HTTP, moet u mogelijk extra TCP- en UDP-poorten openen via het Stackhero-dashboard. Specificeer eenvoudig de openbare invoerpoort, de bestemmingspoort op uw Node.js-service en het protocol (TCP of UDP) om een goede connectiviteit te garanderen.

Voor het opslaan van bestanden zoals gebruikersfoto's is het het beste om een objectopslagoplossing te gebruiken. Deze aanpak maakt het delen van bestanden tussen meerdere services en instanties mogelijk, terwijl uw code gescheiden blijft van uw gegevens. We raden MinIO aan als een eenvoudige, snelle en krachtige oplossing die compatibel is met het Amazon S3-protocol.

Als u de voorkeur geeft aan lokale opslag, kunt u de persistente opslag gebruiken die beschikbaar is bij uw Node.js-instantie. Deze opslag bevindt zich op /persistent/storage/.

LET OP: Sla nooit gegevens op buiten de map /persistent/storage/!

Gegevens die buiten deze map worden opgeslagen, kunnen verloren gaan als uw instantie opnieuw opstart of als u codewijzigingen pusht.

Bij het implementeren van een nieuwe versie van uw app ontvangt de oude versie vooraf een beëindigingssignaal. Dit geeft het de tijd om databaseverbindingen netjes te sluiten en andere services te stoppen.

Het beëindigingssignaal SIGTERM wordt uitgezonden. U kunt dit signaal in uw code opvangen als volgt:

process.on('SIGTERM', () => {
  // Deze log verschijnt op het Stackhero-dashboard in het tabblad 'logs'
  console.info('😯 SIGTERM-signaal ontvangen.');

  // Sluit hier openstaande databaseverbindingen of andere services
  // ...
});

Standaard draait Node.js op één kern met één thread. Om volledig gebruik te maken van alle beschikbare CPU-kernen, overweeg het gebruik van de Node.js cluster API. U kunt de officiële documentatie hier bekijken: https://nodejs.org/api/cluster.html.

Hieronder staat een eenvoudig voorbeeld dat een HTTP-server maakt die gebruikmaakt van alle beschikbare CPU's:

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 delen elke TCP-verbinding; in dit geval een HTTP-server
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

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