Déploiement d'une application Java sur VPS : guide étape par étape de A à Z
\n\nDévelopper une application Java n'est que la moitié du travail. La seconde moitié, tout aussi importante, est son déploiement sur un serveur de production. Dans ce guide, nous allons parcourir le cycle complet de déploiement d'une application Java (Spring Boot) sur un serveur virtuel privé (VPS) avec le système d'exploitation Ubuntu 22.04. Vous apprendrez à configurer le serveur, à construire le projet, à le lancer en tant que service système et à assurer un accès sécurisé via un serveur web.
\n\n1. Préparation du VPS et installation des logiciels nécessaires
\n\nLa première étape consiste à vous connecter à votre VPS via SSH et à installer l'environnement d'exécution Java (JRE) et Git.
\n\nConnexion au serveur
\nssh root@votre-ip-serveur\n\nMise à jour des paquets et installation de Java (OpenJDK 17)
\nPour Spring Boot 3.x, Java 17 est recommandé. Installons OpenJDK.
\napt update && apt upgrade -y\napt install openjdk-17-jdk git -y\njava -version\nVous devriez voir les informations sur la version de Java 17.
\n\nInstallation de Nginx (pour le reverse proxy)
\napt install nginx -y\nsystemctl start nginx\nsystemctl enable nginx\n\n2. Construction de l'application Java (Maven/Gradle)
\n\nSur votre machine locale (ou directement sur le serveur si vous clonez le dépôt), vous devez construire le fichier JAR. Examinons les deux options.
\n\nOption A : Construction locale et copie sur le serveur
\nSupposons que vous ayez un projet Spring Boot avec Maven.
\n# Sur la machine locale\nmvn clean package -DskipTests\n# Le fichier apparaîtra dans target/my-app-0.0.1-SNAPSHOT.jar\nEnsuite, copiez-le sur le serveur via SCP :
\nscp target/my-app-0.0.1-SNAPSHOT.jar root@votre-ip:/opt/myapp/\n\nOption B : Construction directement sur le serveur
\nClonez le dépôt et construisez le projet :
\ncd /opt\ngit clone https://github.com/votre-nom-utilisateur/votre-depot.git myapp\ncd myapp\n./mvnw clean package -DskipTests\n# Ou, si Maven est installé globalement :\nmvn clean package -DskipTests\n\n3. Configuration de la configuration de production et création du service systemd
\n\nPour que l'application démarre automatiquement au démarrage du système et redémarre en cas de panne, créons un fichier unité systemd.
\n\nCréation du script de lancement
\nCréez un répertoire pour l'application (si ce n'est pas déjà fait) :
\nmkdir -p /opt/myapp\n# Déplacez le fichier JAR dans ce répertoire s'il n'y est pas déjà\n\nCréation du service systemd
\nCréez le fichier /etc/systemd/system/myapp.service :
nano /etc/systemd/system/myapp.service\nInsérez le contenu suivant (remplacez les chemins et paramètres selon votre projet) :
\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\nExplication des paramètres :
\n- \n
-Xms256m -Xmx512m— taille initiale et maximale du tas Java. \n --server.port=8080— port sur lequel l'application fonctionnera. \n Restart=always— redémarrage automatique en cas de panne. \n
Lancement et vérification du service
\nsystemctl daemon-reload\nsystemctl start myapp\nsystemctl status myapp\nsystemctl enable myapp # Démarrage automatique au démarrage\nVérifiez que l'application répond localement :
\ncurl http://localhost:8080/actuator/health\nVous devriez obtenir une réponse JSON avec le statut UP.
4. Configuration du Reverse Proxy via Nginx
\n\nL'accès direct à l'application via le port 8080 n'est pas sécurisé. Configurons Nginx comme serveur proxy, qui acceptera les requêtes sur le