Bereitstellung einer Kotlin-Anwendung auf einem VPS: Schritt-für-Schritt-Anleitung für Fortgeschrittene
Die Entwicklung mit Kotlin ist nur die halbe Miete. Wahre Meisterschaft zeigt sich, wenn Ihre Anwendung in einer Produktionsumgebung auf Ihrem eigenen VPS-Server läuft. In diesem Artikel betrachten wir fortgeschrittene Techniken zur Bereitstellung von Kotlin-Anwendungen: vom Bau eines fat JAR bis zur Konfiguration eines unterbrechungsfreien Betriebs mit systemd, eines Reverse Proxy über Nginx und der Automatisierung durch CI/CD. Das Material richtet sich an Entwickler, die bereits mit den Grundlagen von Kotlin vertraut sind und ein professionelles Niveau erreichen möchten.
1. Vorbereitung des Produktions-Builds der Kotlin-Anwendung
Der erste Schritt ist die Erstellung eines optimierten Builds. Wir verwenden das shadow-Plugin für Gradle, das alle Abhängigkeiten in eine einzige ausführbare JAR-Datei (fat JAR) packt.
Fügen Sie in build.gradle.kts hinzu:
plugins { kotlin("jvm") version "1.9.22" id("com.github.johnrengelman.shadow") version "8.1.1" application}
application { mainClass.set("com.example.MainKt")}
tasks.shadowJar { archiveBaseName.set("app") archiveClassifier.set("") archiveVersion.set("") minimize()}Bauen Sie das JAR mit dem Befehl:
./gradlew shadowJarAls Ergebnis erhalten Sie die Datei build/libs/app.jar. Für die Produktion wird empfohlen, Debug-Logs zu deaktivieren und die Protokollierungsebene über Umgebungsvariablen zu konfigurieren.
Beispielkonfiguration von logback.xml für die Produktion:
<configuration> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/var/log/app/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
<root level="INFO"> <appender-ref ref="FILE"/> </root></configuration>2. Erstellen eines systemd-Dienstes für den automatischen Start
Damit die Anwendung automatisch beim Systemstart startet und bei Fehlern neu gestartet wird, verwenden wir systemd. Erstellen Sie die Datei /etc/systemd/system/kotlin-app.service:
[Unit]Description=Kotlin Application ServiceAfter=network.target
[Service]Type=simpleUser=appuserGroup=appuserWorkingDirectory=/opt/kotlin-appExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/kotlin-app/app.jarRestart=on-failureRestartSec=10StandardOutput=journalStandardError=journalEnvironment="APP_ENV=production"Environment="DB_URL=jdbc:postgresql://localhost:5432/mydb"
[Install]WantedBy=multi-user.targetFühren Sie nach dem Erstellen der Datei Folgendes aus:
sudo systemctl daemon-reloadsudo systemctl enable kotlin-appsudo systemctl start kotlin-appÜberprüfen Sie den Status:
sudo systemctl status kotlin-appLogs können Sie mit journalctl -u kotlin-app -f anzeigen.
3. Konfiguration von Nginx als Reverse Proxy mit SSL
Nginx sorgt für Lastverteilung, Caching und HTTPS. Installieren Sie Nginx und Certbot:
sudo apt updatesudo apt install nginx certbot python3-certbot-nginxErstellen Sie die Konfiguration /etc/nginx/sites-available/kotlin-app:
server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri;}
server { listen 443 ssl http2; server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letse