Introduction
Le développement d'une application Java n'est que la moitié du travail. La seconde partie, tout aussi importante, est un déploiement compétent sur un serveur de production. De nombreux développeurs rencontrent des difficultés lors du transfert d'une application d'une machine locale vers un VPS : configuration de l'environnement, compilation, exécution en arrière-plan, sécurisation. Dans cet article, nous allons détailler le processus complet de déploiement d'une application Java sur un VPS (Virtual Private Server) — de l'achat du serveur à la configuration HTTPS. Toutes les étapes seront accompagnées d'exemples de code et de configurations.
Nous utiliserons Ubuntu 22.04 LTS comme système d'exploitation du VPS, et comme exemple d'application Java — une simple application Spring Boot REST, empaquetée dans un fichier JAR. Si vous utilisez un autre framework (Jakarta EE, Micronaut, Quarkus), les principes généraux resteront les mêmes.
1. Préparation du VPS et installation de Java
1.1. Connexion au serveur
Après l'achat du VPS, vous recevrez une adresse IP, un nom d'utilisateur (généralement root) et un mot de passe ou une clé SSH. Connectez-vous au serveur via le terminal :
ssh root@votre-ip-serveurSi vous utilisez une clé SSH, spécifiez le chemin d'accès :
ssh -i /path/to/private_key root@votre-ip-serveur1.2. Mise à jour du système et installation de Java
Commençons par mettre à jour le gestionnaire de paquets et installer le Java Development Kit (JDK). Pour la plupart des applications Java modernes, OpenJDK 17 ou 21 suffit :
apt update && apt upgrade -yapt install openjdk-17-jdk -yVérifiez l'installation :
java -versionVous devriez voir quelque chose comme :
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. Configuration des variables d'environnement (optionnel)
Si votre application nécessite des variables spécifiques (par exemple, JAVA_HOME), ajoutez-les dans le fichier ~/.bashrc ou /etc/environment :
echo "export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64" >> ~/.bashrcsource ~/.bashrc2. Compilation et téléchargement de l'application sur le serveur
2.1. Compilation du JAR/WAR sur la machine locale
Supposons que vous ayez un projet Maven. Effectuez la compilation :
mvn clean package -DskipTestsEn conséquence, un fichier myapp-0.0.1-SNAPSHOT.jar (ou .war pour les applications web) apparaîtra dans le dossier target/.
2.2. Téléchargement du fichier JAR sur le VPS
Utilisez scp pour copier le fichier sur le serveur :
scp target/myapp-0.0.1-SNAPSHOT.jar root@votre-ip-serveur:/opt/myapp/Créez un répertoire pour l'application sur le serveur s'il n'existe pas :
mkdir -p /opt/myapp2.3. Vérification de la structure sur le serveur
Après le téléchargement, vérifiez que le fichier est bien présent :
ls -la /opt/myapp/Vous devriez voir myapp-0.0.1-SNAPSHOT.jar.
3. Configuration du lancement de l'application (systemd + Nginx)
3.1. Lancement manuel du fichier JAR (test)
Avant de configurer le lancement permanent, assurez-vous que l'application démarre correctement :
java -jar /opt/myapp/myapp-0.0.1-SNAPSHOT.jar --server.port=8080Si l'application démarre sans erreur, passons à la création du service systemd.
3.2. Création du service systemd
Systemd permet d'exécuter l'application Java comme un démon (en arrière-plan) et de la redémarrer automatiquement en cas de panne ou de redémarrage du serveur.
Créez le fichier de service :
nano /etc/systemd/system/myapp.serviceInsérez la configuration suivante :
[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