Bereitstellung einer Java-Anwendung auf VPS: Schritt-für-Schritt-Anleitung von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Bereitstellung einer Java-Anwendung auf VPS: Schritt-für-Schritt-Anleitung von A bis Z

\n\n

Die 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\n

1. VPS-Vorbereitung und Installation der erforderlichen Software

\n\n

Der erste Schritt ist die Verbindung zu Ihrem VPS per SSH und die Installation der Java Runtime Environment (JRE) und Git.

\n\n

Verbindung zum Server

\n
ssh root@ihre-server-ip
\n\n

Paketaktualisierung und Installation von Java (OpenJDK 17)

\n

Für Spring Boot 3.x wird Java 17 empfohlen. Wir installieren OpenJDK.

\n
apt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version
\n

Sie sollten Informationen zur Java 17 Version sehen.

\n\n

Installation von Nginx (für Reverse Proxy)

\n
apt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx
\n\n

2. Build der Java-Anwendung (Maven/Gradle)

\n\n

Auf Ihrem lokalen Rechner (oder direkt auf dem Server, wenn Sie das Repository klonen) muss die JAR-Datei erstellt werden. Wir betrachten beide Varianten.

\n\n

Variante A: Lokaler Build und Kopieren auf den Server

\n

Angenommen, 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
\n

Dann kopieren Sie sie per SCP auf den Server:

\n
scp target/my-app-0.0.1-SNAPSHOT.jar root@ihre-ip:/opt/myapp/
\n\n

Variante B: Build direkt auf dem Server

\n

Repository klonen und Projekt bauen:

\n
cd /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\n

3. Konfiguration der Produktionseinstellungen und Erstellung des systemd-Dienstes

\n\n

Damit die Anwendung automatisch beim Systemstart startet und bei einem Absturz neu gestartet wird, erstellen wir eine systemd-Unit-Datei.

\n\n

Erstellung des Startskripts

\n

Erstellen Sie ein Verzeichnis für die Anwendung (falls noch nicht geschehen):

\n
mkdir -p /opt/myapp\n# Verschieben Sie die JAR-Datei in dieses Verzeichnis, falls sie noch nicht dort ist
\n\n

Erstellung des systemd-Dienstes

\n

Erstellen Sie die Datei /etc/systemd/system/myapp.service:

\n
nano /etc/systemd/system/myapp.service
\n

Fü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
\n

Erklä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
\n\n

Starten und Überprüfen des Dienstes

\n
systemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp  # Autostart beim Hochfahren
\n

Überprüfen Sie, ob die Anwendung lokal antwortet:

\n
curl http://localhost:8080/actuator/health
\n

Sie sollten eine JSON-Antwort mit dem Status UP erhalten.

\n\n

4. Konfiguration des Reverse Proxy mit Nginx

\n\n

Der direkte Zugriff auf die Anwendung über Port 8080 ist unsicher. Wir konfigurieren Nginx als Proxyserver, der Anfragen auf

Blogs

Buchempfehlungen