Pourquoi self-héberger Spring Boot sur un VPS ?
Les plateformes managées pour Java facturent à la RAM réservée et imposent leur version de JDK, ce qui complique l'optimisation de la JVM et la gestion des connexions PostgreSQL. Sur un VPS, vous maîtrisez la stack complète : OpenJDK 21 LTS avec ses Virtual Threads, Maven pour le build, Nginx en frontal et PostgreSQL 16 pour les données. Vous décidez des flags JVM, du nombre de threads, du tuning du pool de connexions et de la stratégie de déploiement. Pour une application Spring Boot en production, cette transparence est décisive : vous pouvez profiler un endpoint lent, ajuster -Xmx par service et déployer une nouvelle version sans surcoût caché.
Bénéfices concrets d'un Spring Boot auto-hébergé
- Contrôle total de PostgreSQL : index, VACUUM, pool de connexions et sauvegardes pg_dump planifiées.
- Virtual Threads (OpenJDK 21 Loom) pour Spring WebMVC : des centaines de requêtes concurrentes sans réécriture réactive.
- Coût fixe et prévisible, peu importe le trafic ou le volume de requêtes API traitées.
- Données et logs sous votre juridiction, utile pour la conformité et l'audit.
- Liberté de version JDK et de dépendances système sans contraintes de buildpack.
- Déploiements reproductibles : un fat JAR, un
java -jar, et l'application est en ligne.
Prérequis matériels et logiciels
Pour une application Spring Boot avec PostgreSQL, prévoyez au minimum 2 vCPU et 2 Go de RAM ; visez 4 Go si vous faites tourner plusieurs services ou un pool de connexions chargé. L'OS recommandé est Ubuntu 24.04 LTS — OpenJDK 21 est dans les dépôts officiels, aucun PPA requis. Un nom de domaine est optionnel : sans domaine, un tunnel SSH vers le port 8080 suffit pour le développement et les tests. Comptez 10 Go de disque pour la JVM, l'application, la base et les logs.
Déployer Spring Boot étape par étape
Installer OpenJDK 21 et PostgreSQL
Connectez-vous en SSH et exécutez
apt-get install -y openjdk-21-jdk maven nginx postgresql postgresql-contrib— aucune configuration de dépôt supplémentaire sur Ubuntu 24.04. ⚠️ Nommezopenjdk-21-jdkexplicitement : le paquetmavenne dépend que dedefault-jre-headless, c'est-à-direopenjdk-21-jre-headless, un environnement d'exécution sansjavac. C'est pourquoijava -versionaffiche bien 21.x et laisse croire que tout est en place, pendant que le premier build lancé sur le serveur échoue surNo compiler is provided in this environment. Vérifiez :javac -version,mvn -versionetpsql --version(16.x).Créer la base et l'utilisateur PostgreSQL
Connectez-vous à PostgreSQL en
sudo -u postgres psqlet exécutezCREATE USER myapp WITH PASSWORD 'MotDePasseFort'; CREATE DATABASE myappdb OWNER myapp;. Renseignezspring.datasource.url=jdbc:postgresql://localhost/myappdbdans votreapplication.properties.Construire et déposer le JAR
Exécutez
mvn clean package -DskipTestsen local, puis transférez le fat JAR vers/var/www/votre-app/app.jarviascp. Créez un fichierapplication.propertiesavec vos identifiants PostgreSQL,spring.datasource.url, etserver.port=8080.Créer un service systemd
Créez
/etc/systemd/system/votre-app.servicecontenantExecStart=/usr/bin/java -jar /var/www/votre-app/app.jar,Restart=always,User=www-data. Exécutezsystemctl daemon-reload && systemctl enable --now votre-app. Vérifiez avecsystemctl status votre-appetjournalctl -u votre-app -f.Configurer Nginx et activer le HTTPS
Créez un bloc serveur Nginx avec
proxy_pass http://127.0.0.1:8080;et les en-têtesX-Forwarded-Proto. Exécutezcertbot --nginx -d votre-domaine.compour un certificat Let's Encrypt gratuit. Spring Boot écoute uniquement sur le port interne ; Nginx gère le TLS.
Utilisez les Virtual Threads de Java 21 avec Spring MVC pour multiplier le débit sans passer à WebFlux : ajoutez spring.threads.virtual.enabled=true dans votre application.properties. Chaque requête HTTP s'exécute dans un thread virtuel léger — des milliers peuvent être actifs simultanément sans saturer le pool de threads système. ⚠️ Le gain reste conditionnel sur OpenJDK 21 : un thread virtuel qui se bloque à l'intérieur d'un bloc synchronized épingle son thread porteur au lieu de le libérer, et cette limite n'est levée que par JEP 491, dans le JDK 24. Avant d'attendre un gain sur des charges I/O-bound (appels SQL, REST) sur un VPS de 2 Go, vérifiez donc que votre pilote JDBC est passé à ReentrantLock — celui de PostgreSQL l'a fait à partir de la 42.6.0 — et mesurez l'épinglage avec l'événement jdk.VirtualThreadPinned via JFR au lieu de le supposer.
Déployer Spring Boot en un clic depuis le Marketplace ServOrbit
Le Marketplace ServOrbit propose un template Spring Boot Stack préconfiguré : OpenJDK 21 LTS, Maven, Nginx et PostgreSQL 16 sont installés automatiquement sur votre VPS dès la commande. Pas de session SSH pour l'installation de base — vous arrivez directement à l'étape de déposer votre JAR. La fiche marketplace contient les spécifications exactes, les cas d'usage et un guide de première configuration.