
🚀 Déploiement de Keycloak en Production sur un VPS Ubuntu
Un guide étape par étape pour installer, configurer et sécuriser Keycloak sur un serveur Ubuntu, prêt pour la production.
1. 📋 Pré-requis
- Un VPS Ubuntu 22.04+ avec accès
root
ou un utilisateur sudoer - Un nom de domaine configuré pointant vers l’IP de votre VPS (ex :
auth.mondomaine.com
) - Java 17 installé (Keycloak 24+ l’exige)
- Certificat SSL (via Let’s Encrypt ou autre)
- Ports ouverts : 80 (HTTP) et 443 (HTTPS)
2. 📦 Installation de Java
Keycloak nécessite Java 17 (ou compatible) pour fonctionner.
sudo apt update && sudo apt upgrade -y
sudo apt install openjdk-17-jdk -y
java -version
3. 📥 Téléchargement de Keycloak
On récupère la dernière version depuis le site officiel :
cd /opt
sudo wget https://github.com/keycloak/keycloak/releases/download/26.0.7/keycloak-26.0.7.tar.gz
sudo tar -xvzf keycloak-26.0.7.tar.gz
sudo mv keycloak-26.0.7 keycloak
sudo rm keycloak-26.0.7.tar.gz
4. 👤 Création d’un utilisateur dédié
On ne lance jamais Keycloak en root.
sudo useradd -r -d /opt/keycloak -s /sbin/nologin keycloak
sudo chown -R keycloak:keycloak /opt/keycloak
5. ⚙️ Configuration de Keycloak
Éditez le fichier keycloak.conf
:
sudo nano /opt/keycloak/conf/keycloak.conf
Exemple de configuration pour production avec Nginx en reverse proxy :
# Mode prod
hostname=https://auth.mondomaine.com
hostname-strict=true
hostname-strict-https=true
# Reverse proxy
proxy=edge
# Adresse d'écoute interne
http-enabled=true
http-port=8080
6. 🛠 Construction en mode production
Keycloak doit être “buildé” avant lancement en prod :
cd /opt/keycloak
sudo -u keycloak ./bin/kc.sh build
7. 🗄 Création d’un service systemd
Pour gérer Keycloak facilement :
sudo nano /etc/systemd/system/keycloak.service
[Unit]
Description=Keycloak Server
After=network.target
[Service]
User=keycloak
Group=keycloak
WorkingDirectory=/opt/keycloak
ExecStart=/opt/keycloak/bin/kc.sh start --optimized
Restart=always
RestartSec=10
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
[Install]
WantedBy=multi-user.target
Recharge systemd et active le service :
sudo systemctl daemon-reload
sudo systemctl enable keycloak
sudo systemctl start keycloak
Vérification :
sudo systemctl status keycloak
8. 🌐 Mise en place du Reverse Proxy Nginx
Installez Nginx :
sudo apt install nginx -y
Création du fichier de conf :
sudo nano /etc/nginx/sites-available/keycloak.conf
server {
listen 80;
server_name auth.mondomaine.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Activation :
sudo ln -s /etc/nginx/sites-available/keycloak.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
9. 🔒 Activation HTTPS avec Certbot
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d auth.mondomaine.com
sudo systemctl reload nginx
10. 👨💻 Création d’un compte administrateur
Keycloak en prod n’autorise pas la création via l’UI si aucun admin n’existe. On utilise la commande suivante :
sudo -u keycloak /opt/keycloak/bin/kc.sh create-admin --user admin --password MonMotDePasseFort
11. ✅ Vérification
- Accédez à :
https://auth.mondomaine.com
- Connectez-vous avec l’admin créé
- Changez le mot de passe temporaire si nécessaire
- Supprimez l’admin temporaire si présent
12. 🛡 Sécurisation et optimisation
- Restreindre Keycloak à l’accès via le reverse proxy (
firewalld
ouufw
) - Activer HTTPS only
- Sauvegarder régulièrement la base de données (PostgreSQL recommandé en prod)
- Surveiller les logs :
sudo journalctl -u keycloak -f
📌 Conclusion
Avec cette configuration, Keycloak tourne en mode production, protégé par Nginx + SSL, lancé via systemd, et isolé sous un utilisateur non-root.
Ce déploiement est scalable et prêt pour gérer vos authentifications en toute sécurité.
Une question, un souci sur Keycloak ?
N'hésitez pas à me contacter : je réponds à toutes vos questions et vous accompagne dans vos projets IAM et sécurité.
Me contacter