Déploiement d'une application Kotlin sur VPS : guide étape par étape pour avancés
\n\nDévelopper en Kotlin n'est que la moitié du travail. La véritable maîtrise se manifeste lorsque votre application commence à fonctionner dans un environnement de production sur votre propre serveur VPS. Dans cet article, nous examinerons les techniques avancées de déploiement d'applications Kotlin : de la construction d'un fat JAR à la configuration d'un fonctionnement ininterrompu avec systemd, en passant par le proxy inverse via Nginx et l'automatisation via CI/CD. Ce contenu est destiné aux développeurs qui connaissent déjà les bases de Kotlin et souhaitent passer à un niveau professionnel.
\n\n1. Préparation du build de production de l'application Kotlin
\n\nLa première étape consiste à créer un build optimisé. Nous utilisons le plugin shadow pour Gradle, qui regroupera toutes les dépendances dans un seul fichier JAR exécutable (fat JAR).
Ajoutez dans build.gradle.kts :
plugins {\n kotlin("jvm") version "1.9.22"\n id("com.github.johnrengelman.shadow") version "8.1.1"\n application\n}\n\napplication {\n mainClass.set("com.example.MainKt")\n}\n\ntasks.shadowJar {\n archiveBaseName.set("app")\n archiveClassifier.set("")\n archiveVersion.set("")\n minimize()\n}\n\nConstruisez le JAR avec la commande :
\n\n./gradlew shadowJar\n\nVous obtiendrez le fichier build/libs/app.jar. Pour la production, il est recommandé de désactiver les logs de débogage et de configurer le niveau de journalisation via des variables d'environnement.
Exemple de configuration logback.xml pour la production :
<configuration>\n <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">\n <file>/var/log/app/app.log</file>\n <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">\n <fileNamePattern>/var/log/app/app.%d{yyyy-MM-dd}.log</fileNamePattern>\n <maxHistory>30</maxHistory>\n </rollingPolicy>\n <encoder>\n <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>\n </encoder>\n </appender>\n\n <root level="INFO">\n <appender-ref ref="FILE"/>\n </root>\n</configuration>\n\n2. Création d'un service systemd pour le démarrage automatique
\n\nPour que l'application démarre automatiquement au démarrage du système et redémarre en cas de panne, nous utilisons systemd. Créez le fichier /etc/systemd/system/kotlin-app.service :
[Unit]\nDescription=Kotlin Application Service\nAfter=network.target\n\n[Service]\nType=simple\nUser=appuser\nGroup=appuser\nWorkingDirectory=/opt/kotlin-app\nExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/kotlin-app/app.jar\nRestart=on-failure\nRestartSec=10\nStandardOutput=journal\nStandardError=journal\nEnvironment="APP_ENV=production"\nEnvironment="DB_URL=jdbc:postgresql://localhost:5432/mydb"\n\n[Install]\nWantedBy=multi-user.target\n\nAprès avoir créé le fichier, exécutez :
\n\nsudo systemctl daemon-reload\nsudo systemctl enable kotlin-app\nsudo systemctl start kotlin-app\n\nVérifiez le statut :
\n\nsudo systemctl status kotlin-app\n\nLes logs peuvent être consultés via journalctl -u kotlin-app -f.
3. Configuration de Nginx comme proxy inverse avec SSL
\n\nNginx assurera l'équilibrage de charge, la mise en cache et le HTTPS. Installez Nginx et Certbot :
\n\nsudo apt update\nsudo apt install nginx certbot python3-certbot-nginx\n\nCréez la configuration /etc/nginx/sites-available/kotlin-app :
server {\n listen 80;\n server_name yourdomain.com;\n return 301 https://$server_name$request_uri;\n}\n\nserver {\n listen 443 ssl http2;\n server_name yourdomain.com;\n\n ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;\n ssl_certificate_key /etc/letse