unité systemd et amelioration generale de la doc

This commit is contained in:
Tom David--Broglio 2024-01-05 12:43:44 +01:00
parent c277bca0d6
commit 7b77815a8a

View file

@ -16,12 +16,12 @@ Installer Keycloak sur son hote avec OpenJDK (openjdk-17 pour Keycloak 23)
# apt install openjdk-17-jre
```
Lister les releases
Lister les releases pour en choisir une
```{.bash}
$ git ls-remote --tags https://github.com/keycloak/keycloak
...
99774b3f7a776476e7f04e472e13e3915971a6fb refs/tags/21.1.2
99774b3f7a776476e7f04e472e13e3915971a6fb refs/tags/23.x.x
```
Récupérer et extraire le zip de la release souhaitée
@ -51,11 +51,44 @@ Se connecter à http://localhost:8080/ et créer un username et password admin
Se connecter à http://localhost:8080/admin avec les identifiant admin
Pour Lancer en production, il va falloir plus de configuration... voir [configuration](#configuration)
Pour Lancer en production, il va falloir configurer d'autres elements, voirs [configuration](#configuration)
### Unitée Systemd
On peut wrapper keycloak dans une unitée systemd, adaptez `ExecStart`
```{.ini}
# vim /etc/systemd/system/keycloak.service
[Unit]
Description=Keycloak server
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
ExecStart=/root/keycloak-23.0.3/bin/kc.sh start
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
```
## Configuration pour de la production
Configuration d'une instance/server en prodution...
Configuration d'une instance/server de prodution...
On peut spécifier de la configuration via des envs, arguments, fichier de configuration et KeyStore java. Celle-ci sera prise en comte dans cette ordre precedence (des env pourrons surcharger la conf en dur par exemple)
@ -65,7 +98,9 @@ Ici pour simplifier, on configurera via l'instance via son fichier de configurat
>*Remarque* : la configuration par envs et arguments est persisté par Quarkus
La documentation complète de la configuration d'une instance en production : <https://www.keycloak.org/server/configuration>
* La documentation complète de la configuration d'une instance en production : <https://www.keycloak.org/server/configuration>
* Liste exhaustive des options de configuration : <https://www.keycloak.org/server/all-config>
### Base de données
@ -73,13 +108,15 @@ Keycloak en production a besoin d'un accès à une base de donnée
lien : [documentation keycloak configuration bdd](https://www.keycloak.org/server/db)
Il faut créer une base de donnée (par défaut le schéma `keycloak`) et utilisateur associé pour Keycloak
Il faut créer une base de donnée `keycloak` et utilisateur associé pour Keycloak
> Si on utilise un autre nom de base, il faut alors specifier `db-schema` dans la configuration
* [HowtoPostgreSQL](/HowtoPostgreSQL.md#créer-un-utilisateur-et-une-base-de-données)
* [HowtoMySQL](/HowtoMySQL.md#créer-une-base-de-données-et-un-utilisateur-associé)
#### Configuration via fichier configuration `keycloak.conf`
* Configuration via fichier configuration `keycloak.conf`
```{.ini}
# The database vendor.
@ -94,20 +131,30 @@ db-url-host=127.0.0.1
On peut spécifier en plus si besoin `db-url-port` pour le port ou même `db-url` pour spécifier entièrement l'URL [jdbc](/Glossaire.md#odbcjdbc)
#### Configuration via arguments au démarrage
* Configuration via arguments au démarrage
```{.bash}
bin/kc.sh start --db mariadb --db-url-host mymariadb --db-username evocloak --db-password change_me
```
#### TLS
### Hostname
<https://www.keycloak.org/server/enabletls>
<https://www.keycloak.org/server/hostname>
Pour s'assurer de la securité sur une instance de production, on ne doit jamais exposer celle-ci en HTTP. Nous allons configurer celle-ci en HTTPS/TLS
En production, un utilisateur doit se connecter en utilisant le hostname à préciser dans la configuration :
Pour allons avoir besoin d'un certificat et de sa clef privé... voir [HowtoSSL](/HowtoSSL.md#générer-un-certificat-auto-signé)
```{.ini}
# Hostname for the Keycloak server.
hostname=test.example.org
```
### SSL/TLS
<https://www.keycloak.org/server/enabletls>
On ne doit jamais exposer une instance de production en HTTP. Nous allons configurer celle-ci en HTTPS/TLS
Pour cela, nous avons besoin d'un certificat et de sa clef privé pour le hostname choisi... voir [HowtoSSL](/HowtoSSL.md#générer-un-certificat-auto-signé) ou [HowtoLetsEncrypt](/HowtoLetsEncrypt.md#génération-du-certificat) par exemple...
```{.ini}
# The file path to a server certificate or certificate chain in PEM format.
@ -117,8 +164,27 @@ https-certificate-file=/root/keycloak_certificat.crt
https-certificate-key-file=/root/keycloak_private.key
```
### Exemple de configuration
Exemple de configuration avec
WIP
## Configuration avancée
### Log et monitoring
* Par défaut les logs ne sont pas persisté dans un fichier, on peut l'activer et indiquer un fichier (par défaut dans data/log/keycloak.log dans le dossier de keycloak)
```
log=console,file
log-level=debug
log-file=/var/log/keycloak.log
```
### Haute disponibilité
WIP
keycloak est conçu pour fonctionner en haute disponibilité avec [infinispan](https://infinispan.org/) (In-Memory Distributed Data Store)
TODO https://www.keycloak.org/server/configuration-production -> https://www.keycloak.org/server/caching