Troubleshoot
##
🐛 Problèmes rencontrés et solutions
###
1. Erreur "invalid_redirect_uri" avec port 30180
**Symptôme**Symptôme : Keycloak génère des URLs avec `http://sso.sanjy.fr: au lieu de 30180`30180`https://sso.sanjy.fr`fr
**Cause**Cause : Keycloak ne prend pas en compte les headers du reverse proxy
**Solution**Solution :-
- Ajouter
`KC_PROXY_HEADERS:dans la config Keycloakxforwarded`xforwarded- - Ajouter
`KC_HOSTNAME_URL: https://sso.sanjy.pour forcer l'URL frontendfr`fr- - S'assurer que Nginx envoie les headers
`X-Forwarded-Proto:ethttps`https`X-Forwarded-Port:443`443
###
2. Redirect URI en `localhost:3000`3000
**Symptôme**Symptôme : L'URL de redirection OAuth contient `http://localhost: au lieu de 3000`3000`https://grafana.sanjy.fr`fr
**Cause**Cause : Grafana ne connaît pas son URL publique
**Solutions**Solutions :-
- Ajouter
`GF_SERVER_ROOT_URL=https://grafana.sanjy.dans la config Grafanafr`fr- - Ajouter
`GF_SERVER_DOMAIN=grafana.sanjy.fr`-fr - Retirer
`proxy_redirect off;dans la config Nginx (empêche les réécritures)`- - Redémarrer complètement Grafana avec
`podman-composepuisdown`down`up`up
###
3. Erreur "Page not found" sur le realm
**Symptôme**Symptôme : Erreur 404 lors de l'accès aux endpoints Keycloak
**Cause**Cause : Le nom du realm dans la config ne correspond pas au nom réel dans Keycloak
**Solution**Solution :-
- Vérifier le nom exact du realm dans l'interface Keycloak (en haut à gauche)
- - S'assurer que ce nom est utilisé partout dans les configs Grafana
- - Tester avec :
`curl https://sso.sanjy.fr/realms/VOTRE_REALM/.well-known/openid-configuration`configuration
###
4. Erreur "connection refused" sur TOKEN_URL
**Symptôme**Symptôme : Grafana ne peut pas échanger le code OAuth contre un token
**Cause**Cause : Grafana essaie d'accéder à `https://sso.sanjy. depuis le conteneur mais ne peut pas atteindre l'IP publiquefr`fr
**Solution**Solution :-
- Créer un réseau Podman partagé entre Keycloak et Grafana
- - Utiliser
`http://keycloak:pour8080`8080`TOKEN_URL`TOKEN_URLet`API_URL`API_URL(communication inter-conteneurs)- - Garder
`https://sso.sanjy.uniquement pourfr`fr`AUTH_URL`AUTH_URL(utilisé par le navigateur)
**Vérification de la communication :**```bash
# Tester depuis le conteneur Grafana
podman exec grafana curl http://keycloak:8080/realms/sanjy.fr/.well-known/openid-configuration
```
###
5. Données Keycloak non persistées
**Symptôme**Symptôme : Le realm et les utilisateurs disparaissent après `podman-compose down/up`up
**Cause**Cause : Volume non persistant ou supprimé avec `podman-compose down -v`v
**Solution**Solution :-
- Utiliser un volume nommé dans
`podman-compose.:yaml`yaml```yaml
volumes:
- data:/opt/keycloak/data
volumes:
data:
```
-
**
- Ne jamais
utiliser**utiliser`podman-compose down -(lev`v`-supprime les volumes)v`v- - Vérifier que le volume existe :
`podman volumels`ls
###
6. Permissions refusées sur bind mount
**Symptôme**Symptôme : Erreur Java "Error while creating file" dans les logs Keycloak
**Cause**Cause : User namespace mapping de Podman en rootless (UID sur l'hôte ≠ UID dans le conteneur)
**Solution abandonnée**abandonnée : Bind mount avec `./data:/opt/keycloak/data:Z`Z
**Solution retenue**retenue : Utiliser un volume nommé Podman qui gère automatiquement les permissions :```yaml
volumes:
- data:/opt/keycloak/data
```
###
7. Préfixe réseau `keycloak_sso`keycloak_sso au lieu de `sso`sso
**Symptôme**Symptôme : Le réseau créé s'appelle `keycloak_sso`keycloak_sso au lieu de `sso`sso
**Cause**Cause : `podman- préfixe automatiquement avec le nom du répertoire du projetcompose`compose
**Solution**Solution : Forcer le nom exact dans la définition du réseau :```yaml
networks:
sso:
name: sso
driver: bridge
```
---
##
✅ Vérifications finales
###
Vérifier Keycloak
```bash
# Endpoint OIDC du realm
curl https://sso.sanjy.fr/realms/sanjy.fr/.well-known/openid-configuration
# Doit retourner du JSON avec issuer, authorization_endpoint, etc.
```
###
Vérifier le réseau Podman
```bash
# Lister les réseaux
podman network ls | grep sso
# Inspecter le réseau
podman network inspect keycloak_sso
```
###
Vérifier la communication inter-conteneurs
```bash
# Depuis Grafana vers Keycloak
podman exec grafana curl http://keycloak:8080/realms/sanjy.fr/.well-known/openid-configuration
# Doit retourner du JSON (pas d'erreur de connexion)
```
###
Vérifier le volume Keycloak
```bash
# Lister les volumes
podman volume ls
# Inspecter le volume
podman volume inspect keycloak_data # ou le nom de votre volume
```
###
Vérifier les logs
```bash
# Logs Keycloak
podman logs keycloak
# Logs Grafana (chercher "oauth", "keycloak")
podman logs grafana | grep -i oauth
```
---