Node.js - Przewodnik na start
Node.js to środowisko uruchomieniowe JavaScript służące do tworzenia aplikacji po stronie serwera. Ten serwer zawiera preinstalowane: Node.js 22 LTS, npm, menedżera procesów PM2, git oraz pakiet build-essential. Nie wymaga żadnej dodatkowej konfiguracji – wystarczy połączyć się przez SSH i rozpocząć wdrażanie swoich aplikacji.
Krok 1 – Sprawdzenie działania Node.js
Adres IP serwera oraz hasło użytkownika root znajdziesz w sekcji Server Information na karcie Overview w panelu klienta. Połącz się z serwerem przez SSH:
ssh root@your.server.ipSprawdź, czy Node.js oraz PM2 są poprawnie zainstalowane:
node –version npm –version pm2 –versionJeżeli serwer znajduje się za routerem VyOS w sieci prywatnej, skonfiguruj przekierowanie portów 22, 80 i 443, aby aplikacja była dostępna z Internetu, lub połącz się z serwerem przez VPN i korzystaj z jego prywatnego adresu IP.
Krok 2 – Wdrożenie pierwszej aplikacji
Utwórz prosty serwer HTTP, aby sprawdzić, czy wszystko działa poprawnie:
mkdir ~/myapp && cd ~/myapp cat > app.js << 'EOF’ const http = require(’http’); const server = http.createServer((req, res) => { res.writeHead(200, {’Content-Type’: 'text/plain’}); res.end(’Hello from Node.js ’ + process.version + '\n’); }); server.listen(3000, () => console.log(’Server running on port 3000′)); EOF node app.jsOtwórz w przeglądarce adres http://your.server.ip:3000. Powinien wyświetlić się komunikat powitalny. Aby zatrzymać serwer, naciśnij Ctrl+C.
Wdrożenie z repozytorium Git
cd /root git clone https://github.com/your-username/your-project.git cd your-project npm installKrok 3 – Konfiguracja reverse proxy i SSL (opcjonalnie)
Aby udostępnić aplikację pod własną domeną na portach 80 i 443, zainstaluj Nginx jako reverse proxy:
apt update && apt install -y nginx cat > /etc/nginx/sites-available/myapp << 'EOF’ server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade’; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_cache_bypass $http_upgrade; } } EOF ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ rm /etc/nginx/sites-enabled/default nginx -t && systemctl reload nginxNastępnie włącz bezpłatny certyfikat SSL Let’s Encrypt:
apt install -y certbot python3-certbot-nginx certbot –nginx -d your-domain.comCertbot automatycznie skonfiguruje HTTPS oraz odnowienia certyfikatu.
PM2 – Menedżer procesów
Uruchomienie aplikacji za pomocą node app.js powoduje jej zatrzymanie po zamknięciu terminala lub w przypadku awarii. PM2 utrzymuje aplikację działającą w tle, automatycznie uruchamia ją ponownie po błędzie oraz startuje ją po restarcie serwera.
Podstawowe polecenia:
# Uruchomienie aplikacji pm2 start app.js –name myapp # Lista uruchomionych aplikacji pm2 list # Podgląd logów pm2 logs myapp # Restart / zatrzymanie / usunięcie pm2 restart myapp pm2 stop myapp pm2 delete myappAutomatyczne uruchamianie po restarcie serwera
PM2 jest już skonfigurowany do uruchamiania wraz ze startem systemu. Po uruchomieniu aplikacji zapisz listę procesów, aby były automatycznie przywracane po restarcie serwera:
pm2 saveUruchamiaj polecenie pm2 save ponownie po każdym dodaniu lub usunięciu aplikacji.
Tryb klastra
Uruchom wiele instancji aplikacji, aby wykorzystać wszystkie dostępne rdzenie procesora:
# Jedna instancja na każdy rdzeń CPU pm2 start app.js -i max –name myapp # Lub określ liczbę instancji pm2 start app.js -i 2 –name myappMonitorowanie
Wyświetlanie w czasie rzeczywistym użycia procesora i pamięci:
pm2 monitPo instalacji
Fail2Ban – Ochrona przed atakami brute force
Serwer jest wyposażony we wstępnie skonfigurowany Fail2Ban, który chroni usługę SSH przed atakami typu brute force.
| Reguła | Maks. liczba prób | Czas blokady |
|---|---|---|
| SSH | 5 nieudanych logowań | 10 minut |
Przydatne polecenia:
# Sprawdzenie zablokowanych adresów IP fail2ban-client status sshd # Odblokowanie adresu IP fail2ban-client set sshd unbanip 1.2.3.4Jeżeli przypadkowo zablokujesz własny adres IP, połącz się z serwerem przez konsolę VNC dostępną w panelu klienta i odblokuj go.
Zarządzanie usługami
PM2 zarządza aplikacjami Node.js. Nginx (jeżeli został zainstalowany jako reverse proxy) działa jako usługa systemd:
# Demon PM2 pm2 resurrect # przywrócenie zapisanej listy procesów pm2 status # przegląd procesów # Reverse proxy Nginx systemctl status nginx systemctl reload nginx journalctl -u nginx -n 100Moduły natywne
Pakiet build-essential (gcc, g++, make) jest już zainstalowany, dzięki czemu pakiety npm zawierające natywne rozszerzenia C/C++ kompilują się bez dodatkowej konfiguracji:
npm install bcrypt npm install sharp npm install sqlite3Aktualizacje
# Aktualizacja Node.js apt update && apt install -y nodejs # Aktualizacja PM2 npm install -g pm2 pm2 update # Aktualizacja systemu operacyjnego apt update && apt upgrade -yZainstalowane oprogramowanie
| Komponent | Wersja |
|---|---|
| Ubuntu | 24.04 LTS |
| Node.js | 22.x LTS |
| npm | 10.x |
| PM2 | 6.x |
| git | 2.43 |
| build-essential | gcc 13.3 |
| Fail2Ban | 1.0.2 |
Rozwiązywanie problemów
| Problem | Rozwiązanie |
|---|---|
| Aplikacja ulega awarii i nie uruchamia się ponownie | Uruchamiaj aplikację przez PM2 zamiast node app.js: pm2 start app.js |
| Aplikacja nie uruchamia się po restarcie serwera | Po uruchomieniu aplikacji wykonaj polecenie pm2 save, aby włączyć automatyczne uruchamianie. |
| Port jest już zajęty | Sprawdź, który proces korzysta z portu: ss -tlnp | grep :3000 |
| npm install kończy się błędami kompilacji | Pakiet build-essential jest już zainstalowany. Sprawdź treść błędu. Niektóre pakiety wymagają dodatkowo zainstalowanego python3. |
| Brak miejsca na dysku | Sprawdź zajętość dysku: df -h /. Wyczyść pamięć podręczną npm: npm cache clean –force |
| Adres IP został zablokowany przez Fail2Ban | Połącz się z serwerem przez konsolę VNC dostępną w panelu klienta i odblokuj swój adres IP. |
| Zapomniane hasło użytkownika root | Skorzystaj z konsoli VNC dostępnej w panelu klienta, aby zresetować hasło. |