Déploiement d'une application Kotlin sur VPS : niveau avancé

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Déploiement d'une application Kotlin sur VPS : guide étape par étape pour avancés

\n\n

Dé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\n

1. Préparation du build de production de l'application Kotlin

\n\n

La 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).

\n\n

Ajoutez dans build.gradle.kts :

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

Construisez le JAR avec la commande :

\n\n
./gradlew shadowJar
\n\n

Vous 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.

\n\n

Exemple de configuration logback.xml pour la production :

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

2. Création d'un service systemd pour le démarrage automatique

\n\n

Pour 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 :

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

Après avoir créé le fichier, exécutez :

\n\n
sudo systemctl daemon-reload\nsudo systemctl enable kotlin-app\nsudo systemctl start kotlin-app
\n\n

Vérifiez le statut :

\n\n
sudo systemctl status kotlin-app
\n\n

Les logs peuvent être consultés via journalctl -u kotlin-app -f.

\n\n

3. Configuration de Nginx comme proxy inverse avec SSL

\n\n

Nginx assurera l'équilibrage de charge, la mise en cache et le HTTPS. Installez Nginx et Certbot :

\n\n
sudo apt update\nsudo apt install nginx certbot python3-certbot-nginx
\n\n

Créez la configuration /etc/nginx/sites-available/kotlin-app :

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

Blogs

Book Recommendations