Einleitung
Die Entwicklung einer Java-Anwendung ist nur die eine Hälfte der Arbeit. Der zweite, nicht weniger wichtige Teil ist das fachgerechte Deployment auf einem Production-Server. Viele Entwickler stoßen beim Übertragen der Anwendung von einem lokalen Rechner auf einen VPS auf Schwierigkeiten: Einrichtung der Umgebung, Build, Ausführung im Hintergrund, Gewährleistung der Sicherheit. In diesem Artikel werden wir den gesamten Prozess des Deployments einer Java-Anwendung auf einem VPS (Virtual Private Server) durchgehen – vom Kauf des Servers bis zur Einrichtung von HTTPS. Alle Schritte werden von Codebeispielen und Konfigurationen begleitet.
Wir werden Ubuntu 22.04 LTS als Betriebssystem des VPS verwenden, und als Beispiel für eine Java-Anwendung eine einfache Spring Boot REST-Anwendung, die als JAR-Datei verpackt ist. Wenn Sie ein anderes Framework (Jakarta EE, Micronaut, Quarkus) verwenden, bleiben die allgemeinen Prinzipien dieselben.
1. Vorbereitung des VPS und Installation von Java
1.1. Verbindung zum Server herstellen
Nach dem Kauf des VPS erhalten Sie eine IP-Adresse, einen Benutzernamen (normalerweise root) und ein Passwort oder einen SSH-Key. Stellen Sie über das Terminal eine Verbindung zum Server her:
ssh root@ihre-server-ipWenn Sie einen SSH-Key verwenden, geben Sie den Pfad dazu an:
ssh -i /pfad/zum/private_key root@ihre-server-ip1.2. Systemaktualisierung und Installation von Java
Als Erstes aktualisieren wir den Paketmanager und installieren das Java Development Kit (JDK). Für die meisten modernen Java-Anwendungen ist OpenJDK 17 oder 21 ausreichend:
apt update && apt upgrade -yapt install openjdk-17-jdk -yÜberprüfen Sie die Installation:
java -versionSie sollten etwas Ähnliches sehen wie:
openjdk version "17.0.10" 2024-01-16 LTSOpenJDK Runtime Environment (build 17.0.10+7-Ubuntu-122.04.1)OpenJDK 64-Bit Server VM (build 17.0.10+7-Ubuntu-122.04.1, mixed mode, sharing)1.3. Einrichtung von Umgebungsvariablen (optional)
Wenn Ihre Anwendung spezifische Variablen benötigt (z. B. JAVA_HOME), fügen Sie sie der Datei ~/.bashrc oder /etc/environment hinzu:
echo "export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" >> ~/.bashrcsource ~/.bashrc2. Build und Upload der Anwendung auf den Server
2.1. Build des JAR/WAR auf dem lokalen Rechner
Angenommen, Sie haben ein Maven-Projekt. Führen Sie den Build aus:
mvn clean package -DskipTestsAls Ergebnis erscheint im Ordner target/ die Datei myapp-0.0.1-SNAPSHOT.jar (oder .war für Webanwendungen).
2.2. Upload der JAR-Datei auf den VPS
Verwenden Sie scp, um die Datei auf den Server zu kopieren:
scp target/myapp-0.0.1-SNAPSHOT.jar root@ihre-server-ip:/opt/myapp/Erstellen Sie auf dem Server ein Verzeichnis für die Anwendung, falls es noch nicht existiert:
mkdir -p /opt/myapp2.3. Überprüfung der Struktur auf dem Server
Überprüfen Sie nach dem Upload, ob die Datei vorhanden ist:
ls -la /opt/myapp/Sie sollten myapp-0.0.1-SNAPSHOT.jar sehen.
3. Einrichtung des Anwendungsstarts (systemd + Nginx)
3.1. Manueller Start der JAR-Datei (Test)
Stellen Sie vor der Einrichtung des dauerhaften Starts sicher, dass die Anwendung korrekt startet:
java -jar /opt/myapp/myapp-0.0.1-SNAPSHOT.jar --server.port=8080Wenn die Anwendung fehlerfrei startet, fahren wir mit der Erstellung des systemd-Dienstes fort.
3.2. Erstellung eines systemd-Dienstes
Systemd ermöglicht es, die Java-Anwendung als Daemon (im Hintergrund) auszuführen und sie bei einem Absturz oder einem Neustart des Servers automatisch neu zu starten.
Erstellen Sie die Dienstdatei:
nano /etc/systemd/system/myapp.serviceFügen Sie die folgende Konfiguration ein:
[Unit]Description=My Java ApplicationAfter=network.target
[Service]Type=simpleUser=rootWorkingDirectory=/opt/myappExecStart=/usr/bin/java -jar /opt/myapp/myapp-0.0.1-SNAPSHOT.j