Bereitstellung einer Java-Anwendung auf VPS: Schritt-für-Schritt-Anleitung von A bis Z
\n\nDie Entwicklung einer Java-Anwendung ist nur die eine Hälfte der Arbeit. Die zweite, ebenso wichtige Hälfte ist deren Bereitstellung (Deployment) auf einem Produktionsserver. In dieser Anleitung durchlaufen wir den vollständigen Bereitstellungszyklus einer Java (Spring Boot) Anwendung auf einem virtuellen privaten Server (VPS) mit dem Betriebssystem Ubuntu 22.04. Sie erfahren, wie Sie den Server konfigurieren, das Projekt bauen, es als Systemdienst starten und einen sicheren Zugriff über einen Webserver gewährleisten.
\n\n1. VPS-Vorbereitung und Installation der erforderlichen Software
\n\nDer erste Schritt ist die Verbindung zu Ihrem VPS per SSH und die Installation der Java Runtime Environment (JRE) und Git.
\n\nVerbindung zum Server
\nssh root@ihre-server-ip\n\nPaketaktualisierung und Installation von Java (OpenJDK 17)
\nFür Spring Boot 3.x wird Java 17 empfohlen. Wir installieren OpenJDK.
\napt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version\nSie sollten Informationen zur Java 17 Version sehen.
\n\nInstallation von Nginx (für Reverse Proxy)
\napt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx\n\n2. Build der Java-Anwendung (Maven/Gradle)
\n\nAuf Ihrem lokalen Rechner (oder direkt auf dem Server, wenn Sie das Repository klonen) muss die JAR-Datei erstellt werden. Wir betrachten beide Varianten.
\n\nVariante A: Lokaler Build und Kopieren auf den Server
\nAngenommen, Sie haben ein Spring Boot Projekt mit Maven.
\n# Auf dem lokalen Rechner\nmvn clean package -DskipTests\n# Die Datei erscheint in target/my-app-0.0.1-SNAPSHOT.jar\nDann kopieren Sie sie per SCP auf den Server:
\nscp target/my-app-0.0.1-SNAPSHOT.jar root@ihre-ip:/opt/myapp/\n\nVariante B: Build direkt auf dem Server
\nRepository klonen und Projekt bauen:
\ncd /opt\ngit clone https://github.com/ihr-benutzername/ihr-repository.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# Oder, wenn Maven global installiert ist:\nmvn clean package -DskipTests\n\n3. Konfiguration der Produktionseinstellungen und Erstellung des systemd-Dienstes
\n\nDamit die Anwendung automatisch beim Systemstart startet und bei einem Absturz neu gestartet wird, erstellen wir eine systemd-Unit-Datei.
\n\nErstellung des Startskripts
\nErstellen Sie ein Verzeichnis für die Anwendung (falls noch nicht geschehen):
\nmkdir -p /opt/myapp\n# Verschieben Sie die JAR-Datei in dieses Verzeichnis, falls sie noch nicht dort ist\n\nErstellung des systemd-Dienstes
\nErstellen Sie die Datei /etc/systemd/system/myapp.service:
nano /etc/systemd/system/myapp.service\nFügen Sie den folgenden Inhalt ein (passen Sie Pfade und Parameter an Ihr Projekt an):
\n[Unit]\nDescription=My Java Spring Boot Application\nAfter=syslog.target network.target\n\n[Service]\nUser=root\nWorkingDirectory=/opt/myapp\nExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/my-app-0.0.1-SNAPSHOT.jar --server.port=8080\nSuccessExitStatus=143\nRestart=always\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target\nErklärung der Parameter:
\n- \n
-Xms256m -Xmx512m— Anfangs- und Maximalgröße des Java-Heaps. \n --server.port=8080— Port, auf dem die Anwendung laufen wird. \n Restart=always— Automatischer Neustart bei Absturz. \n
Starten und Überprüfen des Dienstes
\nsystemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp # Autostart beim Hochfahren\nÜberprüfen Sie, ob die Anwendung lokal antwortet:
\ncurl http://localhost:8080/actuator/health\nSie sollten eine JSON-Antwort mit dem Status UP erhalten.
4. Konfiguration des Reverse Proxy mit Nginx
\n\nDer direkte Zugriff auf die Anwendung über Port 8080 ist unsicher. Wir konfigurieren Nginx als Proxyserver, der Anfragen auf