Troubleshoot
## đ ProblĂšmes rencontrĂ©s et solutions
### 1. Erreur "invalid_redirect_uri" avec port 30180
**SymptÎme** : Keycloak génÚre des URLs avec `http://sso.sanjy.fr:30180` au lieu de `https://sso.sanjy.fr`
**Cause** : Keycloak ne prend pas en compte les headers du reverse proxy
**Solution** :
- Ajouter `KC_PROXY_HEADERS: xforwarded` dans la config Keycloak
- Ajouter `KC_HOSTNAME_URL: https://sso.sanjy.fr` pour forcer l'URL frontend
- S'assurer que Nginx envoie les headers `X-Forwarded-Proto: https` et `X-Forwarded-Port: 443`
### 2. Redirect URI en `localhost:3000`
**SymptĂŽme** : L'URL de redirection OAuth contient `http://localhost:3000` au lieu de `https://grafana.sanjy.fr`
**Cause** : Grafana ne connaĂźt pas son URL publique
**Solutions** :
- Ajouter `GF_SERVER_ROOT_URL=https://grafana.sanjy.fr` dans la config Grafana
- Ajouter `GF_SERVER_DOMAIN=grafana.sanjy.fr`
- **Retirer** `proxy_redirect off;` dans la config Nginx (empĂȘche les réécritures)
- Redémarrer complÚtement Grafana avec `podman-compose down` puis `up`
### 3. Erreur "Page not found" sur le realm
**SymptĂŽme** : Erreur 404 lors de l'accĂšs aux endpoints Keycloak
**Cause** : Le nom du realm dans la config ne correspond pas au nom réel dans Keycloak
**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`
### 4. Erreur "connection refused" sur TOKEN_URL
**SymptÎme** : Grafana ne peut pas échanger le code OAuth contre un token
**Cause** : Grafana essaie d'accéder à `https://sso.sanjy.fr` depuis le conteneur mais ne peut pas atteindre l'IP publique
**Solution** :
- Créer un réseau Podman partagé entre Keycloak et Grafana
- Utiliser `http://keycloak:8080` pour `TOKEN_URL` et `API_URL` (communication inter-conteneurs)
- Garder `https://sso.sanjy.fr` uniquement pour `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** : Le realm et les utilisateurs disparaissent aprĂšs `podman-compose down/up`
**Cause** : Volume non persistant ou supprimé avec `podman-compose down -v`
**Solution** :
- Utiliser un volume nommé dans `podman-compose.yaml` :
```yaml
volumes:
 - data:/opt/keycloak/data
volumes:
 data:
```
- **Ne jamais utiliser** `podman-compose down -v` (le `-v` supprime les volumes)
- Vérifier que le volume existe : `podman volume ls`
### 6. Permissions refusées sur bind mount
**SymptĂŽme** : Erreur Java "Error while creating file" dans les logs Keycloak
**Cause** : User namespace mapping de Podman en rootless (UID sur l'hĂŽte â UID dans le conteneur)
**Solution abandonnée** : Bind mount avec `./data:/opt/keycloak/data:Z`
**Solution 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` au lieu de `sso`
**SymptÎme** : Le réseau créé s'appelle `keycloak_sso` au lieu de `sso`
**Cause** : `podman-compose` préfixe automatiquement avec le nom du répertoire du projet
**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
```
---