Přeskočit obsah

Instalace Keycloaku

Keycloak je nainstalován v dockeru - stejně jako v popisu "Základní instalace - docker"

Vytvoření adresářů a souboru docker-compose.yml

mkdir /opt/keycloak
cd /opt/keycloak
vim /opt/keycloak/docker-compose.yml # (1)!
vim /opt/keycloak/.env # (2)!
  1. Viz docker-compose.yml
  2. Viz .env

Vytvoření certifikátu

V konfiguraci volumes se soubor docker-compose.yml odkazuje na soubory ./crt/keycloak.pem a ./crt/keycloak.key. To může být certifikát pro https server (klidně self signed). Nejjednodušší způsob, jak takový certifikát vytvořit (ideálně pouze pro testovací účely) je příkazem

openssl req -newkey rsa:4096 -nodes -keyout key.pem -x509 -days 3650 -out certificate.pem # (1)!

  1. Po vybídnutí zadáte požadované údaje - např:
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:CZ
    State or Province Name (full name) [Some-State]:Czechia
    Locality Name (eg, city) []:Prague
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Green Center s.r.o.
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:auth.green.cz
    Email Address []:
    

V případě, že je použitý certifikát self-signed nebo podepsán nedůveryhodnou CA, je třeba na to myslet a na reverse-proxy vypnout kontrolu certifikátu.

Themes

Pokud je žádoucí, aby keycloak používal custom themes, je třeba je vložit do adresáře ./themes.

Spuštění keycloaku

Jakmile jsou veškeré soubory připraveny, je možné keycloak spustit příkazem níže

docker-compose up -d

Zmíněné soubory

/opt/keycloak/docker-compose.yml
version: '3.1'

volumes:
  postgres_data:
      driver: local

services:
  postgres:
      image: postgres:14.12-alpine3.18
      container_name: postgres_keycloak
      restart: always
      hostname: keycloak21.scrumware.eu
      volumes:
        - './postgres_data:/var/lib/postgresql/data'
      environment:
        POSTGRES_DB: keycloak
        POSTGRES_USER: keycloak
        POSTGRES_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
        TZ: "Europe/Prague"

  keycloak:
      image: quay.io/keycloak/keycloak:23.0.4
      container_name: keycloak
      restart: always
      volumes:
        - './crt/keycloak.pem:/keycloak.pem'
        - './crt/keycloak.key:/keycloak.key'
        # (1)!
        - './themes:/opt/keycloak/themes'
      environment:
        KC_LOG_LEVEL: INFO
        KC_HOSTNAME_ADMIN_URL: ${KEYCLOAK_FRONTEND_URL}/auth
        KC_HOSTNAME_STRICT_BACKCHANNEL: "true"
        KC_HOSTNAME_URL: ${KEYCLOAK_FRONTEND_URL}/auth
        KC_DB: postgres
        KC_DB_URL: 'jdbc:postgresql://postgres:5432/keycloak'
        KC_DB_USERNAME: keycloak
        KC_FEATURES: docker
        DB_DATABASE: keycloak
        DB_SCHEMA: public
        KC_HTTPS_PORT: ${KEYCLOAK_HTTPS_PORT}
        KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
        KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN_USER}
        KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
        KC_PROXY: "passthrough"
        KC_HTTPS_CERTIFICATE_FILE: /keycloak.pem
        KC_HTTPS_CERTIFICATE_KEY_FILE: /keycloak.key
        TZ: "Europe/Prague"
      ports:
        - 127.0.0.1:${KEYCLOAK_HTTPS_PORT}:${KEYCLOAK_HTTPS_PORT}
      command: " --spi-login-protocol-openid-connect-legacy-logout-redirect-uri=true  --spi-login-protocol-openid-connect-suppress-logout-confirmation-screen=true start -Dkeycloak.hostname.provider=fixed -Dkeycloak.hostname.fixed.hostname=${KEYCLOAK_HOSTNAME} -Dkeycloak.hostname.fixed.httpsPort=443 -Dkeycloak.hostname.fixed.frontendUrl=${KEYCLOAK_FRONTEND_URL}/auth -Dkeycloak.hostname.fixed.forceBackendUrlToFrontendUrl=true "
      depends_on:
        - postgres
  1. Pokud není třeba využívat custom themes, tento řádek zakomentujte
/opt/keycloak/.env
KEYCLOAK_ADMIN_USER=admin
KEYCLOAK_ADMIN_PASSWORD=super_secret_password # (1)!
KEYCLOAK_DB_PASSWORD=super_secret_password2 # (2)!
KEYCLOAK_HOSTNAME=kc.parkcloud.cz # (3)!
KEYCLOAK_FRONTEND_URL=https://kc.parkcloud.cz # (4)!
KEYCLOAK_HTTPS_PORT=8084 # (5)!
  1. Vyměníme za silné heslo
  2. Vyměníme za silné heslo
  3. Vyměníme za název domény, kde má být keycloak dostupný
  4. Vyměníme za url, kde má být keycloak dostupný
  5. Port musí odpovídat konfiguraci reverse proxy