maj version prod OK, import kc bdd to test

This commit is contained in:
Grégory Lebreton 2025-08-29 16:06:50 +02:00
parent 05bd6588dc
commit 83ffe14fca
5 changed files with 253 additions and 14 deletions

View File

@ -1,6 +1,6 @@
# KEYCLOAK
Ce projet est pour upgrader Keycloak (déployé via Docker) de la version 16 vers la version 23 ou ultérieur
Ce projet est pour upgrader Keycloak (déployé via Docker) de la version 16 vers la version 26 ou ultérieur
## PRE-REQUIS
@ -25,9 +25,11 @@ docker compose up -d
Pour upgrader keycloak, il faut:
- exporter la base de données utilisateurs (LDAP)
- exporter la bese de données de keycloak
- exporter le realm
- démarrer la nouvelle version de keycloak (créer l'admin définitif et supprimer le temporaire)
- importer le realm de l'export json
- importer la base de données pg (here ?!)
- importer la base de données ldap
- Configurer le realm garagenum pour utiliser le ldap
- recréer les secrets des clients
@ -48,10 +50,20 @@ docker cp ancien-ldap:/tmp/backup.ldif .
:skull: Les secrets ne seront pas récupérés (*******) donc à persister avant ou idéalement recréer
### EXPORTER LA BASE DE DONNÉES KEYCLOAK
```bash
docker exec <keycloak_db_container> pg_dump -U <db_user> <dn_name> > kc_db_backup.sql
```
> On obtient un fichier que l'on va pouvoir importer dans la nouvelle base de donnée keycloak
### EXPORTER LE REALM
![]()
> Cocher groups et clients
### DEMARRER LA NOUVELLE VERSION
```bash
@ -60,10 +72,20 @@ docker compose up -d
### IMPORTER LE REALM
Utiliser le fichier json de l'export pour importer les configs du realm
- Clean `authorizationSettings` blocs in export-realm.json
Utiliser le fichier json de l'export une fois néttoyé pour importer les configs du realm
![]()
- Redémarrer keycloak en mode production (Dockerfile.prod dans le `compose.yml`)
### IMPORTER BASE DE DONNÉES KEYCLOAK
Placer le fichier de backup de la BDD de keycloak dans le dossier persisté `./init-scripts`
> Vérifier les logs au démarrage pour vérifier que l'import de la base de données à été bien faite.
### IMPORTER DATABASE LDAP (USERS)
- importer la base de données de `keycloak-openldap`:
@ -90,9 +112,9 @@ service slapd start
![]()
:warning: Activer featue script pour keycloak
## SECURISER LE LDAP
## FAIL2BAN JAIL FOR LDAP (TO DO)
### FAIL2BAN JAIL FOR LDAP (TO DO)
- /etc/fail2ban/jail.local
```conf

View File

@ -2,24 +2,24 @@ services:
keycloak:
build:
context: .
dockerfile: Dockerfile
dockerfile: Dockerfile.prod.
# FOR IMPORTING REALM
# dockerfile: Dockerfile.dev
# command: ["start-dev", "--features=scripts"]
container_name: ${KEYCLOAK_CONTAINER_NAME:-local-keycloak}
environment:
# Admin configuration
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN:-admin}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD:-admin123}
# Database configuration
KC_DB: ${KC_DB:-postgres}
KC_DB_URL: ${KC_DB_URL:-jdbc:postgresql://postgres:5432/gnsso}
KC_DB: ${KC_DB:-keycloak-postgres}
KC_DB_URL: ${KC_DB_URL:-jdbc:postgresql://keycloak-postgres:5432/keycloak}
KC_DB_USERNAME: ${KC_DB_USERNAME:-keycloak}
KC_DB_PASSWORD: ${KC_DB_PASSWORD:-password}
# Network configuration
KC_HOSTNAME_STRICT: ${KC_HOSTNAME_STRICT:-false}
KC_HOSTNAME_STRICT_HTTPS: ${KC_HOSTNAME_STRICT_HTTPS:-false}
KC_HTTP_ENABLED: ${KC_HTTP_ENABLED:-true}
# Features
environment:
# KC_FEATURES: scripts
KC_HEALTH_ENABLED: ${KC_HEALTH_ENABLED:-true}
KC_METRICS_ENABLED: ${KC_METRICS_ENABLED:-true}
# Logging
@ -28,9 +28,9 @@ services:
- .env
ports:
- "${KEYCLOAK_PORT:-8080}:8080"
- "9000:9000" # Health check port
- "9000:9000" # Health check
depends_on:
postgres:
keycloak-postgres:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "timeout 5s sh -c '</dev/tcp/localhost/9000' || exit 1"]

77
files/keycloak.conf Normal file
View File

@ -0,0 +1,77 @@
# Keycloak Configuration File
# This file contains runtime configuration for Keycloak
# =============================================================================
# DATABASE CONFIGURATION
# =============================================================================
db=postgres
db-url-host=keycloak-postgres
db-url-database=keycloak
db-username=keycloak
db-password=password
db-pool-initial-size=5
db-pool-min-size=5
db-pool-max-size=20
# =============================================================================
# HTTP/HTTPS CONFIGURATION
# =============================================================================
http-enabled=true
http-port=8080
hostname-strict=false
hostname-strict-https=false
# For production, uncomment and configure HTTPS:
# https-port=8443
# https-certificate-file=/path/to/certificate.pem
# https-certificate-key-file=/path/to/private-key.pem
# =============================================================================
# LOGGING CONFIGURATION
# =============================================================================
log-level=INFO
log-console-output=default
log-console-format=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
# =============================================================================
# FEATURES CONFIGURATION
# =============================================================================
health-enabled=true
metrics-enabled=true
# =============================================================================
# SECURITY CONFIGURATION
# =============================================================================
# Disable features not needed for token exchange
feature-disabled=impersonation
# =============================================================================
# PERFORMANCE CONFIGURATION
# =============================================================================
# Cache configuration
cache=ispn
cache-stack=tcp
# Transaction configuration
transaction-xa-enabled=false
# =============================================================================
# DEVELOPMENT SETTINGS
# =============================================================================
# These settings are for development only
# Remove or modify for production
# Allow admin console access from any host
# hostname-admin-url=http://localhost:8080
# =============================================================================
# PRODUCTION OVERRIDES
# =============================================================================
# Uncomment and modify these for production deployments
hostname=<nom-de-domaine>
#hostname-strict=true
#hostname-strict-https=true
#http-enabled=false
#proxy=edge
proxy-headers=xforwarded

70
tools/Dockerfile.dev Normal file
View File

@ -0,0 +1,70 @@
# Multi-stage Keycloak build with custom configuration
# This Dockerfile creates an optimized Keycloak image with token exchange support
# =============================================================================
# Build Stage
# =============================================================================
FROM quay.io/keycloak/keycloak:latest AS builder
# Set build-time environment variables
ENV KC_HEALTH_ENABLED=true \
KC_METRICS_ENABLED=true \
KC_DB=postgres \
KC_TRANSACTION_XA_ENABLED=false \
KC_CACHE=ispn \
KC_CACHE_STACK=tcp
# Build optimized Keycloak
RUN /opt/keycloak/bin/kc.sh build
# =============================================================================
# Runtime Stage
# =============================================================================
FROM quay.io/keycloak/keycloak:latest
# Copy optimized build from builder stage
COPY --from=builder /opt/keycloak/ /opt/keycloak/
# Create necessary directories
USER root
RUN mkdir -p /opt/keycloak/data/import \
&& mkdir -p /opt/keycloak/conf \
&& mkdir -p /opt/keycloak/themes \
&& chown -R 1000:1000 /opt/keycloak/data \
&& chown -R 1000:1000 /opt/keycloak/conf \
&& chown -R 1000:1000 /opt/keycloak/themes
# Copy configuration files
# COPY files/realm.json /opt/keycloak/data/import/
# COPY deploy/config/user-profile.json /opt/keycloak/conf/user-profile.json
COPY files/keycloak.conf /opt/keycloak/conf/keycloak.conf
# Copy custom themes (if any)
# COPY deploy/config/themes/ /opt/keycloak/themes/
# Set proper ownership
RUN chown -R 1000:1000 /opt/keycloak/data/import \
&& chown -R 1000:1000 /opt/keycloak/conf
# Switch back to keycloak user for security
USER 1000
# Set runtime environment variables (overriden by keycloak.conf or compose envs)
ENV KC_DB=postgres \
KC_HEALTH_ENABLED=true \
KC_METRICS_ENABLED=true \
KC_HTTP_ENABLED=true \
KC_HOSTNAME_STRICT=false \
KC_HOSTNAME_STRICT_HTTPS=false \
KC_LOG_LEVEL=INFO
# Expose ports
EXPOSE 8080 9000 8443
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:9000/health/ready || exit 1
# Default entrypoint with import
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
CMD ["start-dev", "--import-realm", "--features=scripts"]

70
tools/Dockerfile.prod Normal file
View File

@ -0,0 +1,70 @@
# Multi-stage Keycloak build with custom configuration
# This Dockerfile creates an optimized Keycloak image with token exchange support
# =============================================================================
# Build Stage
# =============================================================================
FROM quay.io/keycloak/keycloak:latest AS builder
# Set build-time environment variables
ENV KC_HEALTH_ENABLED=true \
KC_METRICS_ENABLED=true \
KC_DB=postgres \
KC_TRANSACTION_XA_ENABLED=false \
KC_CACHE=ispn \
KC_CACHE_STACK=tcp
# Build optimized Keycloak
RUN /opt/keycloak/bin/kc.sh build
# =============================================================================
# Runtime Stage
# =============================================================================
FROM quay.io/keycloak/keycloak:latest
# Copy optimized build from builder stage
COPY --from=builder /opt/keycloak/ /opt/keycloak/
# Create necessary directories
USER root
RUN mkdir -p /opt/keycloak/data/import \
&& mkdir -p /opt/keycloak/conf \
&& mkdir -p /opt/keycloak/themes \
&& chown -R 1000:1000 /opt/keycloak/data \
&& chown -R 1000:1000 /opt/keycloak/conf \
&& chown -R 1000:1000 /opt/keycloak/themes
# Copy configuration files
# COPY files/realm.json /opt/keycloak/data/import/
# COPY deploy/config/user-profile.json /opt/keycloak/conf/user-profile.json
COPY files/keycloak.conf /opt/keycloak/conf/keycloak.conf
# Copy custom themes (if any)
# COPY deploy/config/themes/ /opt/keycloak/themes/
# Set proper ownership
RUN chown -R 1000:1000 /opt/keycloak/data/import \
&& chown -R 1000:1000 /opt/keycloak/conf
# Switch back to keycloak user for security
USER 1000
# Set runtime environment variables (overriden by keycloak.conf or compose envs)
ENV KC_DB=postgres \
KC_HEALTH_ENABLED=true \
KC_METRICS_ENABLED=true \
KC_HTTP_ENABLED=true \
KC_HOSTNAME_STRICT=false \
KC_HOSTNAME_STRICT_HTTPS=false \
KC_LOG_LEVEL=INFO
# Expose ports
EXPOSE 8080 9000 8443
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD curl -f http://localhost:9000/health/ready || exit 1
# Default entrypoint with import
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
CMD ["start", "--optimized"]