Einleitung: Warum VPS die beste Wahl für die Produktion ist
Die Entwicklung einer JavaScript-Anwendung mit Node.js ist nur die halbe Miete. Der zweite, ebenso wichtige Teil ist das Deployment auf einem Produktionsserver. Viele Anfänger-Entwickler nutzen kostenlose Hosting-Dienste (Heroku, Render, Vercel), aber für ernsthafte Projekte wird irgendwann ein VPS (Virtual Private Server) benötigt.
Ein VPS gibt Ihnen die volle Kontrolle über die Umgebung: Sie wählen die Node.js-Version, konfigurieren den Webserver, verwalten Prozesse und Ressourcen. In diesem Artikel gehen wir Schritt für Schritt durch den Prozess des Deployments einer JavaScript-Anwendung auf einem VPS mit modernen Werkzeugen: Nginx als Reverse Proxy, PM2 für die Prozessverwaltung, Let's Encrypt für SSL und GitHub Actions für die Automatisierung.
Schritt 1: Servervorbereitung und Installation der benötigten Software
Der erste Schritt ist die Verbindung zu Ihrem VPS (normalerweise per SSH) und die Installation eines grundlegenden Werkzeugsatzes. Nehmen wir an, Sie verwenden Ubuntu 22.04 LTS.
# Update packagessudo apt update && sudo apt upgrade -y
# Install Node.js (recommended via NodeSource)curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -sudo apt install -y nodejs
# Check versionsnode -vnpm -v
# Install Git (if not already installed)sudo apt install git -y
# Install Nginxsudo apt install nginx -yKonfigurieren Sie außerdem unbedingt eine grundlegende Firewall (UFW):
sudo ufw allow OpenSSHsudo ufw allow 'Nginx Full'sudo ufw enableSchritt 2: Repository klonen und die Anwendung konfigurieren
Jetzt müssen Sie den Anwendungscode auf den Server übertragen. Der einfachste Weg ist, das Repository von GitHub/GitLab zu klonen.
# Navigate to the /var/www directory (standard for web projects)cd /var/www
# Clone the repository (replace with your URL)sudo git clone https://github.com/your-username/your-repository.git myapp
# Give permissions to the current usersudo chown -R $USER:$USER /var/www/myapp
# Navigate to the application foldercd /var/www/myapp
# Install dependenciesnpm install --productionErstellen Sie eine .env-Datei für Umgebungsvariablen (Port, API-Schlüssel, Datenbank-Verbindungszeichenfolge):
# Example .envPORT=3000NODE_ENV=productionDATABASE_URL=mongodb://localhost:27017/myappJWT_SECRET=your-secret-keySchritt 3: PM2 für die Prozessverwaltung konfigurieren
PM2 ist ein Prozessmanager für Node.js, der die Anwendung automatisch neu startet, falls sie abstürzt, und sie im Hintergrund am Laufen hält.
# Install PM2 globallysudo npm install -g pm2
# Start the application (if entry point is app.js or server.js)pm2 start app.js --name "myapp"
# Save the process list for auto-start on rebootpm2 savepm2 startup systemdNach der Ausführung von pm2 startup sehen Sie einen Befehl, der mit Root-Rechten ausgeführt werden muss. Kopieren Sie ihn und führen Sie ihn aus.
Sie können den Status mit dem Befehl pm2 status überprüfen. Wenn die Anwendung läuft, ist sie unter http://your-ip:3000 (dem Port aus .env) erreichbar.
Schritt 4: Nginx als Reverse Proxy konfigurieren
Der direkte Zugriff auf Node.js über Port 3000 ist keine empfohlene Vorgehensweise. Es ist besser, Nginx als Proxyserver zu verwenden, der Anfragen auf Port 80 (HTTP) entgegennimmt und an Ihre Anwendung weiterleitet.
Erstellen Sie eine Konfigurationsdatei für Ihre Domain (oder IP):
sudo nano /etc/nginx/sites-available/myappFügen Sie den folgenden Code ein:
server { listen 80; server_name your-domain.ru www.your-domain.ru;
location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connectio