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 usługę Node.js
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.
Wymagania wstępne
Przed wdrożeniem na Stackhero upewnij się, że masz zainstalowane następujące narzędzia:
- Git. Możesz go pobrać z https://git-scm.com/downloads.
- Dla użytkowników Windows zalecamy korzystanie z Windows Terminal dostępnego w Microsoft Store dla lepszego doświadczenia.
Skonfiguruj swoją usługę
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.
Sklonuj przykład
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
Skonfiguruj zdalny serwer repozytorium
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.
Wdróż swoją aplikację Node.js
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
Wdróż istniejącą aplikację
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
Obsłuż błąd "failed to push some refs to '[...]'"
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
Obsłuż błąd "src refspec main does not match any"
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
Obsłuż błąd "Everything up-to-date" podczas wypychania
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
Wdróż gałąź inną niż 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
Wdróż tag
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.
Cofnij lub wdroż konkretny commit
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
Wdróż do wielu środowisk
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
Zapisz hasło do prywatnego klucza SSH w pęku kluczy macOS
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ń.
Obsłuż sekrety
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
Otwórz inne porty sieciowe
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ść.
Przechowuj pliki
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.
Łagodne zamknięcie
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
// ...
});
Uruchom swój kod na wielu rdzeniach CPU
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`);
}