Configurazione per la produzione
In produzione, esegui l'immagine pubblicata ghcr.io/schulydev/schulykeycloak:latest (oppure un tag :<semver> fissato - vedi Release). L'immagine è un build Keycloak ottimizzato (kc.sh build viene eseguito al momento del build dell'immagine), quindi l'entrypoint a runtime parte con start --optimized --import-realm per un avvio rapido. È precostruita per Postgres (KC_DB=postgres), con health check e metriche attivi.
Stai distribuendo l'intero stack (Postgres + reverse proxy + TLS) da zero? Segui invece Self-hosting dello stack completo - lì trovi un docker-compose completo e una guida per il primo admin.
Esecuzione
docker run -p 8080:8080 \
-e KC_DB_URL=jdbc:postgresql://db:5432/keycloak \
-e KC_DB_USERNAME=keycloak \
-e KC_DB_PASSWORD=... \
-e KC_HOSTNAME=https://auth.schuly.dev \
-e KC_PROXY_HEADERS=xforwarded \
-e KC_HTTP_ENABLED=true \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=... \
ghcr.io/schulydev/schulykeycloak:latestLe variabili essenziali sono la connessione al database (KC_DB_*), l'hostname pubblico (KC_HOSTNAME), le impostazioni proxy quando sei dietro un proxy che termina il TLS (KC_PROXY_HEADERS, KC_HTTP_ENABLED) e un admin di bootstrap per il primo avvio (KC_BOOTSTRAP_ADMIN_*). L'elenco completo - ogni variabile, ogni porta e ogni valore predefinito integrato - si trova nel riferimento di configurazione.
Sicurezza: l'admin di bootstrap è temporaneo - crea un admin vero e rimuovi le variabili
KC_BOOTSTRAP_ADMIN_*dopo il primo avvio. Non committare mai segreti e non metterli inrealms/schuly-realm.json, termina il TLS sul proxy, e non esporre mai pubblicamente la porta di management9000.
