Node.js: Pierwsze kroki

Dowiedz się, jak szybko i bezpiecznie wdrożyć usługę Node.js na Stackhero

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Node.js cloud, które zapewnia wiele korzyści, w tym:

  • Wdrażaj swoją aplikację w kilka sekund za pomocą prostego git push.
  • Używaj własnej nazwy domeny i korzystaj z automatycznej konfiguracji certyfikatów HTTPS dla zwiększonego bezpieczeństwa.
  • Ciesz się spokojem dzięki automatycznym kopiom zapasowym, aktualizacjom jednym kliknięciem oraz prostemu, przejrzystemu i przewidywalnemu cennikowi.
  • Uzyskaj optymalną wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj sobie życie: wypróbowanie rozwiązania Node.js cloud hosting Stackhero zajmuje tylko 5 minut!

Wdrożenie usługi Node.js na Stackhero jest szybkie, efektywne i niezawodne. Ten przewodnik przeprowadzi Cię przez kluczowe kroki, aby wdrożyć aplikację w kilka sekund, zapewniając jednocześnie najwyższy poziom bezpieczeństwa i wydajności.

Rozpocznij od utworzenia usługi Node.js na Stackhero. Ten krok stanowi podstawę dla wdrożenia aplikacji i przygotowuje Cię do odkrywania wszystkich zalet rozwiązania chmurowego Stackhero.

Przed wdrożeniem na Stackhero upewnij się, że masz zainstalowane następujące narzędzia:

  1. Git. Możesz go pobrać z https://git-scm.com/downloads.
  2. Dla użytkowników Windows zalecamy korzystanie z Windows Terminal dostępnego w Microsoft Store dla lepszego doświadczenia.

Jedyną potrzebną konfiguracją jest aktualizacja klucza publicznego SSH. Ten klucz pozwala Stackhero na bezpieczny dostęp do Twojego repozytorium kodu.

Aby zlokalizować swój klucz publiczny, uruchom jedną z tych komend:

cat ~/.ssh/id_rsa.pub

lub

cat ~/.ssh/id_ed25519.pub

Jeśli nie masz jeszcze pary kluczy SSH, możesz ją wygenerować, uruchamiając ssh-keygen na Linuxie lub macOS lub ssh-keygen.exe na Windows.

Po uzyskaniu klucza publicznego, zaloguj się do panelu Stackhero, wybierz swoją usługę Node.js, przejdź do jej konfiguracji i wklej swój klucz.

Wskazówka: Możesz ustawić swój klucz publiczny SSH globalnie, aby wszystkie przyszłe usługi automatycznie go zawierały. Aby to zrobić, przejdź do panelu Stackhero, kliknij swoje zdjęcie profilowe (znajdujące się w prawym górnym rogu), przejdź do 'Twój profil' i wklej swój klucz publiczny SSH.

Dostarczona jest przykładowa aplikacja Node.js, aby zilustrować proces wdrażania na Stackhero. Możesz sklonować repozytorium za pomocą następujących komend:

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

Wdrożenie aplikacji za pomocą git jest szybkie, niezawodne i proste na Stackhero. Na głównej stronie swojej usługi znajdziesz komendę do dodania zdalnego repozytorium git. Może wyglądać to tak:

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

Po prostu skopiuj i wklej komendę do swojego terminala.

Wypchnij swój kod do Stackhero za pomocą następującej komendy:

git push stackhero main

Za pierwszym razem, gdy wypchniesz, zostaniesz poproszony o dodanie odcisku palca klucza. Wpisz "yes", aby kontynuować.

Po kilku chwilach Twoja aplikacja będzie dostępna online. Możesz sprawdzić jej status, odwiedzając URL strony podany na panelu Stackhero (na przykład, https://XXXXX.stackhero-network.com).

To wszystko. Twoja aplikacja jest teraz wdrożona!

Jeśli wprowadzisz zmiany w pliku app.js, po prostu zatwierdź i wypchnij swoje modyfikacje:

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

Dla istniejących aplikacji dodaj zdalne repozytorium, jak opisano wcześniej w sekcji Skonfiguruj zdalny serwer repozytorium. Następnie wdroż swoje zmiany za pomocą:

git push stackhero main

Jeśli napotkasz następujący błąd:

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.

Ten błąd wskazuje, że Twoje lokalne repozytorium nie jest zsynchronizowane z repozytorium zdalnym. W takim przypadku możesz wymusić wypchnięcie, wykonując:

git push -f stackhero main

Jeśli zobaczysz ten błąd podczas uruchamiania 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'

To wskazuje, że gałąź main nie istnieje. Możesz spróbować wypchnąć gałąź master zamiast tego:

git push stackhero master

Jeśli git odpowiada "Everything up-to-date", ale Twoje zmiany nie są wdrożone, może to być spowodowane tym, że zapomniałeś zatwierdzić swoje zmiany. W takim przypadku uruchom:

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

Jeśli nie wprowadzono żadnych zmian, ale nadal chcesz wymusić wdrożenie, możesz wymusić pusty commit:

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

Jeśli chcesz wdrożyć gałąź inną niż main, na przykład production, możesz użyć następującej komendy:

git push stackhero production:main

Jeśli pracujesz z tagami i chcesz wdrożyć konkretny tag (na przykład, v1.0), uruchom:

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

Tutaj, ^{} zapewnia, że commit związany z tagiem jest wypchnięty.

Jeśli musisz wdrożyć konkretny commit, najpierw zidentyfikuj hash commita za pomocą git log. Następnie wdroż go za pomocą:

git push -f stackhero <HASH>:main

Możesz skonfigurować wiele usług Node.js dla różnych środowisk, takich jak produkcja i staging. Aby zmienić nazwę obecnego zdalnego repozytorium z stackhero na stackhero-staging, uruchom:

git remote rename stackhero stackhero-staging

Następnie utwórz nową usługę Node.js w panelu Stackhero i dodaj ją jako stackhero-production:

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

Wdróż do produkcji lub stagingu za pomocą odpowiednich komend:

git push stackhero-production main

lub

git push stackhero-staging main

Na macOS możesz być proszony o hasło do klucza SSH za każdym razem, gdy wypychasz swój kod. Dla większej wygody i bezpieczeństwa (bez usuwania hasła do klucza) możesz zapisać je w pęku kluczy macOS, uruchamiając:

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

Ta komenda zapisuje hasło do klucza w pęku kluczy, dzięki czemu nie będziesz proszony o nie podczas przyszłych wdrożeń.

Dla środowisk staging i produkcji, bezpieczne zarządzanie sekretami, takimi jak tokeny czy hasła, jest kluczowe. Zamiast przechowywać te sekrety bezpośrednio w repozytorium, używaj zmiennych środowiskowych dla zwiększonego bezpieczeństwa.

Możesz dodać zmienne środowiskowe za pośrednictwem panelu Stackhero i uzyskać do nich dostęp w swoim kodzie Node.js. Na przykład, jeśli zdefiniujesz zmienną o nazwie mySecret, możesz uzyskać do niej dostęp w swojej aplikacji w następujący sposób:

process.env.mySecret

Jeśli Twoja aplikacja nie korzysta z HTTP, może być konieczne otwarcie dodatkowych portów TCP i UDP za pośrednictwem panelu Stackhero. Wystarczy określić publiczny port wejściowy, port docelowy na Twojej usłudze Node.js i protokół (TCP lub UDP), aby zapewnić odpowiednią łączność.

Do przechowywania plików, takich jak zdjęcia użytkowników, najlepiej używać rozwiązania do przechowywania obiektów. To podejście umożliwia udostępnianie plików między wieloma usługami i instancjami, jednocześnie oddzielając kod od danych. Polecamy MinIO jako proste, szybkie i potężne rozwiązanie kompatybilne z protokołem Amazon S3.

Jeśli wolisz lokalne przechowywanie, możesz użyć dostępnego z Twoją instancją Node.js trwałego magazynu. Ten magazyn znajduje się w /persistent/storage/.

UWAGA: Nigdy nie przechowuj danych poza folderem /persistent/storage/!

Dane przechowywane poza tym folderem mogą zostać utracone, jeśli Twoja instancja zostanie zrestartowana lub jeśli wypchniesz zmiany w kodzie.

Podczas wdrażania nowej wersji aplikacji, stara wersja otrzymuje sygnał zakończenia z wyprzedzeniem. Daje to czas na łagodne zamknięcie połączeń z bazą danych i zatrzymanie innych usług.

Sygnał zakończenia SIGTERM jest emitowany. Możesz przechwycić ten sygnał w swoim kodzie w następujący sposób:

process.on('SIGTERM', () => {
  // Ten log pojawia się na panelu Stackhero w zakładce 'logs'
  console.info('😯 Otrzymano sygnał SIGTERM.');

  // Zamknij tutaj otwarte połączenia z bazą danych lub inne usługi
  // ...
});

Domyślnie Node.js działa na jednym rdzeniu, używając jednego wątku. Aby w pełni wykorzystać wszystkie dostępne rdzenie CPU, rozważ użycie API cluster Node.js. Możesz zapoznać się z oficjalną dokumentacją tutaj: https://nodejs.org/api/cluster.html.

Poniżej znajduje się prosty przykład, który tworzy serwer HTTP wykorzystujący wszystkie dostępne 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`);
}