Kör enkel inloggning med Keycloak och Podman utan root

Keycloak på Debian 13, en inloggning för alla företagets appar via OpenID Connect eller SAML, i rootless Podman med PostgreSQL under en egen användare bakom Caddy, med tvåfaktorsinloggning för alla och administrationskonsolen borta från internet.

Testad på Keycloak 26.8.1 på Debian 13 (trixie) på en server hos Melonslab Uppdaterad 14 oktober 2026

Rekommenderad server för guiden

SSD RAID 1 · ECC DDR4 · 10 Gbit

VC-P Alloy · 2 vCPU · 8 GB Minne · 60 GB Lagring

Månadsvis, ingen bindningstid 7 dagars öppet köp

100 kr/mån

Beställ nu
På den här sidan

Det här sätter du upp

Keycloak är en identitetsleverantör: den lagrar företagets användarkonton, deras lösenord och deras andra faktor, och dina appar låter Keycloak kontrollera vem som loggar in. Varje person har ett konto för allt och loggar in en gång om dagen, och när någon slutar stänger du av ett konto i stället för ett i varje app. Apparna ansluter med OpenID Connect eller SAML 2.0, som de flesta affärsappar har stöd för.

Keycloak startades på Red Hat, som fortfarande säljer en version med support, och är nu ett projekt inom Cloud Native Computing Foundation, en del av Linux Foundation i USA. Den utvecklas öppet på GitHub och är öppen källkod under Apache 2.0-licensen. I våra tester gjorde den inga externa anslutningar: en avlyssning av serverns trafik medan Keycloak startade och en användare loggade in visade inga.

Här körs Keycloak som en pod under en egen användare som heter keycloak, med PostgreSQL för dess data, bakom Caddy från Podman-guiden. Bara inloggningssidorna ligger ute på internet. Administrationskonsolen når du genom en SSH-tunnel. Som exempel blir Keycloak inloggningen för wikin från Outline-guiden.

Varje steg nedan har körts på en nyinstallerad Melonslab VC-P Alloy (2 vCPU, 8 GB) med Debian 13:

  • Keycloak 26.7.5 startade i produktionsläge med PostgreSQL 18, och dess tillfälliga administratör byttes ut mot en permanent innan Caddy sattes upp. Från internet svarade administrationskonsolen och administratörernas realm med 404.
  • Administrationskonsolen fungerade genom en SSH-tunnel. En realm för företaget, en grupp och användare skapades där.
  • En ny användare fick byta sitt tillfälliga lösenord och sätta upp en autentiseringsapp vid första inloggningen. Därefter frågade varje inloggning efter en engångskod, och en felaktig kod nekades. Ett för kort lösenord nekades.
  • Efter fem misslyckade inloggningar spärrades kontot, och även rätt lösenord nekades tills spärren gick ut.
  • En återställning av lösenordet kom med e-post, frågade efter engångskoden före det nya lösenordet och behöll autentiseringsappen.
  • Användare loggade in i Outline 1.11.0 via Keycloak, med sin kod. En befintlig administratör i Outline kopplades till sitt Keycloak-konto via e-postadressen. En utloggning i Outline avslutade också sessionen i Keycloak, och en avstängd användare kunde inte logga in.
  • Inloggningssidorna och e-postmeddelandena var på svenska för en webbläsare inställd på svenska.
  • En uppdatering från Keycloak 26.7.5 till 26.8.1 behöll alla data. Keycloak återställdes från en databaskopia till en tom volym, realmen raderades och importerades igen från en export, och allt startade igen av sig självt efter en omstart av servern.

Keycloak använde omkring 470 MB minne i vila och upp till 700 MB i användning, och PostgreSQL omkring 15 MB. Keycloak är en Java-app och behöver det mesta av det redan från start, även för en handfull användare. Under en export av en realm, som startar en andra kopia av Keycloak en kort stund, använde den omkring 1 GB.

Innan du börjar

Du behöver:

  • en server uppsatt som i Podman-guiden, med Caddy igång och minst 2 GB minne;
  • en A-post och en AAAA-post för sso.example.com som pekar på din server;
  • ett e-postkonto som kan skicka via din e-postleverantörs SMTP-server, till exempel sso@example.com, för återställning av lösenord;
  • för att ansluta Outline, en wiki uppsatt som i Outline-guiden.

Exemplen använder sso.example.com för Keycloak, wiki.example.com för Outline, 203.0.113.10 för serverns IPv4-adress, som ip -brief address show eth0 visar, och example som namn på företagets realm. Byt ut dem genomgående.

1. Skapa användaren

Som root:

useradd -m -s /bin/bash keycloak
loginctl enable-linger keycloak
machinectl shell keycloak@

Allt fram till steg 5 körs som keycloak.

2. Skapa hemligheterna

openssl rand -hex 24 | tr -d '\n' | podman secret create keycloak-db-password -
openssl rand -base64 18 | tr -d '\n' | podman secret create keycloak-temp-admin-password -

Den första är databasens lösenord. Den andra är lösenordet till ett tillfälligt administratörskonto som Keycloak skapar vid första starten, och som steg 4 byter ut. Båda lagras av Podman, inte i filerna nedan.

3. Definiera podden

mkdir -p ~/.config/containers/systemd
cd ~/.config/containers/systemd

Skapa keycloak.pod:

[Pod]
PodName=keycloak
# Only Caddy, on this server, can reach Keycloak: the port is not open to the internet.
PublishPort=127.0.0.1:8166:8080

[Install]
WantedBy=default.target

Skapa keycloak-db.container:

[Container]
ContainerName=keycloak-db
Image=docker.io/library/postgres:18-alpine
Pod=keycloak.pod
Volume=keycloak-db:/var/lib/postgresql
Environment=POSTGRES_USER=keycloak POSTGRES_DB=keycloak
Secret=keycloak-db-password,type=env,target=POSTGRES_PASSWORD
HealthCmd=pg_isready -U keycloak
HealthInterval=10s
Notify=healthy
AutoUpdate=registry

[Service]
Restart=always

Och keycloak-app.container:

[Unit]
Requires=keycloak-db.service
After=keycloak-db.service

[Container]
ContainerName=keycloak-app
Image=quay.io/keycloak/keycloak:26.8
Pod=keycloak.pod
Exec=start
Environment=KC_DB=postgres KC_DB_URL=jdbc:postgresql://127.0.0.1:5432/keycloak KC_DB_USERNAME=keycloak
Environment=KC_HOSTNAME=https://sso.example.com KC_HOSTNAME_ADMIN=http://localhost:8166
Environment=KC_HTTP_ENABLED=true KC_PROXY_HEADERS=xforwarded KC_PROXY_TRUSTED_ADDRESSES=203.0.113.10
Environment=KC_CACHE=local
Environment=KC_BOOTSTRAP_ADMIN_USERNAME=temp-admin
Secret=keycloak-db-password,type=env,target=KC_DB_PASSWORD
Secret=keycloak-temp-admin-password,type=env,target=KC_BOOTSTRAP_ADMIN_PASSWORD
PodmanArgs=--memory=1536m
AutoUpdate=registry

[Service]
Restart=always

Vad inställningarna gör:

  • Exec=start kör Keycloak i produktionsläge. Läget start-dev, som många exempel använder, sparar data i containern och lättar på säkerhetskontrollerna; det är till för att prova Keycloak, inte för riktiga användare.
  • KC_HOSTNAME är den publika adressen som Keycloak sätter i varje länk, token och e-postmeddelande. KC_HOSTNAME_ADMIN flyttar administrationskonsolen till http://localhost:8166, som du når genom en SSH-tunnel i steg 6.
  • KC_HTTP_ENABLED låter Keycloak prata vanlig HTTP med Caddy, som sköter HTTPS. KC_PROXY_HEADERS=xforwarded får den att läsa besökarens adress och protokoll från Caddys headers, och KC_PROXY_TRUSTED_ADDRESSES godtar dem bara från Caddy. Caddys anslutningar kommer in i podden från serverns egen IPv4-adress, som Podman-guiden förklarar, så det är den du anger. Utan den visar Keycloaks loggar 203.0.113.10 för alla.
  • KC_CACHE=local kör Keycloak som en ensam server, i stället för att leta efter andra att bilda ett kluster med.
  • PodmanArgs=--memory=1536m sätter ett tak för Keycloaks minne. Java anpassar sig efter minnet den får, och utan tak skulle den räkna med halva serverns minne från början.
  • Taggen 26.8 följer felrättningarna av Keycloak 26.8, som AutoUpdate=registry installerar av sig själv. Steg 14 tar upp hur du går vidare till nästa version.

Starta den:

systemctl --user daemon-reload
systemctl --user start keycloak-pod
systemctl --user enable --now podman-auto-update.timer

Vid första starten laddas omkring 800 MB avbilder ner, och Keycloak behöver en minut eller två för att sätta upp sin databas. Den är klar när det här skriver ut 200:

curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8166/realms/master

4. Byt ut den tillfälliga administratören

Keycloak har sina egna administratörer i en realm som heter master, och kontot som skapades vid starten är tänkt att bytas ut. Keycloaks administrationsverktyg för kommandoraden, kcadm, körs inuti containern. Ge det ett kort namn:

alias kcadm='podman exec -it keycloak-app /opt/keycloak/bin/kcadm.sh'

Visa det tillfälliga lösenordet och logga in med det när kcadm frågar:

podman secret inspect --showsecret --format '{{.SecretData}}' keycloak-temp-admin-password
kcadm config credentials --server http://localhost:8080 --realm master --user temp-admin

Skapa ditt eget administratörskonto, här kallat admin, med ett lösenord som du sparar i din lösenordshanterare:

kcadm create users -r master -s username=admin -s enabled=true
kcadm set-password -r master --username admin
kcadm add-roles -r master --uusername admin --rolename admin

Ställ sedan in realmen master för SSH-tunneln och slå på dess skydd mot lösenordsgissning:

kcadm update realms/master -s attributes.frontendUrl=http://localhost:8166 -s sslRequired=none -s bruteForceProtected=true

frontendUrl gör att även administratörens inloggning använder tunnelns adress. sslRequired=none tillåter den utan HTTPS: tunneln krypteras av SSH, och steg 5 håller realmen master borta från internet. Logga in igen som din nya administratör, ta reda på det tillfälliga kontots id och radera det:

kcadm config credentials --server http://localhost:8080 --realm master --user admin
kcadm get users -r master -q username=temp-admin --fields id
kcadm delete users/ID -r master

Använd det id som det andra kommandot skriver ut i stället för ID. Ta till sist bort det tillfälliga lösenordet från containern och från Podman:

sed -i '/BOOTSTRAP_ADMIN\|temp-admin-password/d' ~/.config/containers/systemd/keycloak-app.container
podman secret rm keycloak-temp-admin-password
systemctl --user daemon-reload
systemctl --user restart keycloak-app

Keycloak skapar det tillfälliga kontot bara vid allra första starten, så det kommer inte tillbaka.

5. Sätt Caddy framför

Gå tillbaka till root med exit, byt till Caddys användare med machinectl shell caddy@ och lägg till det här blocket sist i ~/Caddyfile:

sso.example.com {
    # Only the login pages are public. The admin console and the master realm stay behind SSH.
    @public {
        path /realms/* /resources/*
        not path /realms/master/*
    }
    handle @public {
        reverse_proxy 127.0.0.1:8166
    }
    handle {
        respond 404
    }
}

Starta om Caddy med systemctl --user restart caddy. Det här är uppsättningen som Keycloaks dokumentation rekommenderar bakom en proxy: bara /realms/ och /resources/ skickas vidare, så administrationskonsolen på /admin/ ligger inte ute på internet, och inte /realms/master/ heller, så ingen kan prova lösenord mot ditt administratörskonto. Kontrollera från valfri dator:

curl -s -o /dev/null -w '%{http_code}\n' https://sso.example.com/admin/
curl -s -o /dev/null -w '%{http_code}\n' https://sso.example.com/realms/master/

Båda skriver ut 404.

6. Öppna administrationskonsolen

Öppna en tunnel till servern från din egen dator och låt den vara öppen medan du arbetar:

ssh -L 8166:127.0.0.1:8166 root@203.0.113.10

Öppna http://localhost:8166 i webbläsaren och logga in som admin. Tunneln för anslutningen till Keycloaks port på servern, krypterad av SSH. När du stänger den är administrationskonsolen borta igen.

Konsolen öppnas i realmen master. Manage realms högst upp till vänster listar dina realms och växlar mellan dem.

7. Skapa företagets realm

En realm är en egen uppsättning användare, inställningar och anslutna appar. Håll personalen utanför master, som bara är till för Keycloaks egna administratörer, och skapa en realm för företaget. Logga in i kcadm igen på servern, som keycloak, eftersom omstarten i steg 4 loggade ut det:

alias kcadm='podman exec -it keycloak-app /opt/keycloak/bin/kcadm.sh'
kcadm config credentials --server http://localhost:8080 --realm master --user admin

Skapa sedan realmen med alla inställningar på en gång:

kcadm create realms -s realm=example -s 'displayName=Example AB' -s enabled=true \
  -s 'passwordPolicy=length(12) and notUsername and notEmail and passwordHistory(3)' \
  -s bruteForceProtected=true -s failureFactor=5 \
  -s internationalizationEnabled=true -s 'supportedLocales=["sv","en"]' -s defaultLocale=sv \
  -s resetPasswordAllowed=true

example är realmens namn, som syns i varje adress, till exempel https://sso.example.com/realms/example/account, och Example AB är namnet som visas på inloggningssidan. Inställningarna hittar du i administrationskonsolen när du har växlat till realmen:

  • Password policy, under Authentication > Policies: minst 12 tecken, inte användarnamnet eller e-postadressen, och inte något av de tre senaste lösenorden. Längd skyddar bäst; regler om siffror och specialtecken får mest folk att skriva upp sina lösenord.
  • Brute force detection, under Realm settings > Security defenses: efter 5 misslyckade inloggningar spärras kontot i en minut, och längre för varje ny omgång misslyckanden, upp till 15 minuter. Felaktiga engångskoder räknas också. Spärren gäller kontot, så den som gissar mot ett konto kan också hålla ägaren utelåst en stund.
  • Localization i Realm settings: svenska och engelska, med svenska som standard. Steg 12 har detaljerna.
  • Forgot password under Realm settings > Login, som kräver e-post från steg 10. User registration är avstängt från början, så ingen kan skapa ett konto själv.

8. Kräv tvåfaktorsinloggning

Från början frågar Keycloak bara efter en engångskod från användare som själva har valt att sätta upp en autentiseringsapp. För att kräva det av alla ändrar du en kopia av inloggningsflödet i administrationskonsolen. Växla till realmen example under Manage realms och öppna Authentication:

  1. Öppna flödet browser, välj Action > Duplicate, döp kopian till browser-2fa och välj Duplicate.
  2. Gå tillbaka till Authentication och öppna browser-2fa. Konsolen ligger ibland kvar på originalflödet efter kopieringen, och ändringar där hamnar i originalet.
  3. I kolumnen Requirement sätter du browser-2fa Browser - Conditional 2FA till Required, de två villkoren under den, Condition - user configured och Condition - credential, till Disabled, och OTP Form till Required.
  4. Välj Action > Bind flow, behåll Browser flow och välj Save.

Nu måste alla ange en engångskod efter lösenordet. En användare som inte har någon autentiseringsapp än får först sätta upp en, med en QR-kod att skanna och en lista över appar som fungerar, till exempel FreeOTP, Google Authenticator och Microsoft Authenticator.

Flödet för återställning av lösenord behöver samma ändring. Som standard tar en återställningslänk via e-post också bort användarens autentiseringsapp, så den som kan läsa brevlådan kommer in utan den andra faktorn:

  1. Öppna flödet reset credentials, välj Action > Duplicate och döp kopian till reset-2fa.
  2. Gå tillbaka till Authentication och öppna reset-2fa.
  3. Sätt reset-2fa Reset - Conditional OTP till Disabled.
  4. Välj Add execution, sök efter OTP Form, markera OTP Form och välj Add. Sätt dess Requirement till Required.
  5. Välj Action > Bind flow, välj Reset credentials flow och Save.

En återställning frågar nu efter engångskoden före det nya lösenordet och behåller autentiseringsappen. När någon tappar bort sin telefon raderar du raden Otp under Users > användaren > Credentials, så sätter personen upp en ny app vid nästa inloggning.

Ditt eget administratörskonto i master behåller standarden: det frågar efter en kod när du har satt upp en app på http://localhost:8166/realms/master/account, genom tunneln.

9. Lägg till användare och grupper

Grupper ordnar personalen, till exempel per avdelning, och låter dig ge många användare samma roller på en gång. För att skapa en öppnar du Groups, väljer Create group, anger ett namn under Name, till exempel Personal, och väljer Create.

För att lägga till en person öppnar du Users och väljer Add user:

  • Fyll i Username, Email, First name och Last name, och slå på Email verified, eftersom du vet att adressen stämmer.
  • Välj Join Groups, kryssa i gruppen och välj Join. Välj sedan Create.
  • På användarens flik Credentials väljer du Set password, anger ett startlösenord, låter Temporary vara på och väljer Save. Ge personen lösenordet på plats eller per telefon.

Vid första inloggningen sätter användaren upp en autentiseringsapp och väljer ett eget nytt lösenord. När e-posten fungerar (steg 10) kan du i stället använda Credential Reset på samma flik, med åtgärden Update Password, som skickar en länk till personen med e-post för att sätta lösenordet själv. Vi testade det e-postmeddelandet med Keycloaks kommandoradsverktyg, inte från konsolen.

När någon slutar stänger du av Enabled högst upp på personens användarsida. Då kan hen inte längre logga in någonstans. Fliken Sessions på samma sida visar var personen är inloggad och från vilken adress, och Logout all sessions avslutar de sessionerna i Keycloak. Apparna har egna sessioner, så den som redan är inloggad i en app kan fortsätta där tills den sessionen tar slut.

Varje användare kan se och ändra sina egna uppgifter och autentiseringsappar på https://sso.example.com/realms/example/account.

Misslyckade inloggningar hamnar i Keycloaks logg med besökarens riktiga adress. Som keycloak:

journalctl --user -u keycloak-app | grep LOGIN_ERROR

En spärrad användare får samma "Ogiltigt användarnamn eller lösenord." som vid fel lösenord, så meddelandet avslöjar inte för en angripare att kontot finns. För att låsa upp någon direkt stänger du av Temporarily locked på användarsidan.

10. E-post

Keycloak skickar e-post för glömda lösenord, länkar för att sätta ett lösenord och kontroll av e-postadresser. Utan e-post säger Glömt lösenord? på inloggningssidan fortfarande "Du bör inom kort motta ett e-postmeddelande med ytterligare instruktioner.", men inget skickas: Keycloaks logg har Failed to send password reset email. Då sätter du alla lösenord själv som i steg 9.

Keycloak kan läsa SMTP-lösenordet från en fil, som den kallar ett valv, i stället för att spara det i sin databas. Som keycloak sparar du lösenordet till ditt e-postkonto som en hemlighet, i stället för the-smtp-password:

printf %s 'the-smtp-password' | podman secret create keycloak-smtp-password -

Lägg till de här raderna i keycloak-app.container, efter raden Secret=keycloak-db-password:

Environment=KC_VAULT=file KC_VAULT_DIR=/run/secrets
Secret=keycloak-smtp-password,type=mount,target=example_smtp-password

Filnamnet är realmens namn, ett understreck och nyckeln, vilket är hur Keycloak hittar den. Starta om:

systemctl --user daemon-reload
systemctl --user restart keycloak-app

Öppna sedan Realm settings > Email i administrationskonsolen, i realmen example:

  • From: sso@example.com, och From display name: Example AB.
  • Host: leverantörens SMTP-server, till exempel smtp.example.com, och Port: 587. Kryssa i Enable StartTLS. För port 465, som använder TLS från början, kryssar du i Enable SSL i stället.
  • Slå på Authentication, med ditt e-postkonto under Username och ${vault.smtp-password} under Password, exakt så. Välj sedan Save.

För att testa väljer du Glömt lösenord? på inloggningssidan och anger en användares adress. Ett e-postmeddelande med en länk kommer fram, med ämnet "Återställ lösenord" för en användare som ser Keycloak på svenska. Test connection på samma sida kräver en e-postadress på ditt eget administratörskonto; vi använde den inte. Vi testade e-postmeddelandena med en testserver för e-post på samma maskin, inte via en riktig leverantör.

11. Anslut Outline

Keycloak behöver känna till varje app som använder den. Öppna Clients i administrationskonsolen, i realmen example, och välj Create client:

  1. Behåll OpenID Connect under Client type, ange outline som Client ID och Outline som Name, och välj Next.
  2. Slå på Client authentication, låt Standard flow vara ikryssad och välj Next.
  3. Ange https://wiki.example.com som Root URL, https://wiki.example.com/auth/oidc.callback under Valid redirect URIs och https://wiki.example.com under Valid post logout redirect URIs, utan snedstreck på slutet. Välj Save.
  4. Öppna fliken Credentials och kopiera Client Secret.

Byt till Outlines användare på servern, som root, med machinectl shell outline@, och spara hemligheten, i stället för the-client-secret:

printf %s 'the-client-secret' | podman secret create outline-oidc-secret -

Outline hämtar Keycloaks inställningar från dess publika adress, som inuti Outlines pod tillhör podden själv. Lägg till den här raden i outline.pod, under [Pod], så att adressen går till servern i stället, som Podman-guiden förklarar:

AddHost=sso.example.com:host-gateway

Och de här raderna i outline-app.container, efter de andra Secret=-raderna:

Environment=OIDC_ISSUER_URL=https://sso.example.com/realms/example OIDC_CLIENT_ID=outline OIDC_DISPLAY_NAME=Keycloak
Environment=OIDC_LOGOUT_URI=https://sso.example.com/realms/example/protocol/openid-connect/logout
Secret=outline-oidc-secret,type=env,target=OIDC_CLIENT_SECRET

Starta om hela podden:

systemctl --user daemon-reload
systemctl --user restart outline-pod

Outlines inloggningssida har nu Fortsätt med Keycloak, som skickar personen till Keycloaks inloggning och tillbaka, inloggad. Den som loggar in för första gången går med i Outlines arbetsyta som redaktör. Om Outline redan har ett konto med samma e-postadress, som administratören från Outline-guiden, får personen det kontot. Log out i Outline avslutar också sessionen i Keycloak, tack vare OIDC_LOGOUT_URI.

Gör till sist Keycloak till den enda vägen in. Logga in i Outline som administratör, öppna Preferences > Authentication och stäng av Email och Passkeys. Annars kan en person som du har stängt av i Keycloak fortfarande logga in i Outline med en e-postlänk eller en passkey, utan din andra faktor. Med Keycloak som enda val skickar Outline besökarna direkt till Keycloaks inloggningssida.

Andra appar ansluts på samma sätt: en klient i Keycloak med appens adress för omdirigering, och realmens adress, https://sso.example.com/realms/example, med klientens id och hemlighet i appen. Vi har bara testat Outline. Mattermost är ett undantag: enligt dess dokumentation finns OpenID Connect och inloggning via GitLab bara i de betalda paketen, så Team Edition, den kostnadsfria som vår guide använder, kan inte använda Keycloak.

12. Använd Keycloak på svenska

Keycloak är översatt till svenska: inloggningssidorna, kontosidan och e-postmeddelandena. Med realmens inställningar från steg 7 får den som har webbläsaren inställd på svenska svenska, och alla andra engelska, eftersom engelska också finns med i listan. En meny på inloggningssidan växlar mellan dem. För att visa svenska för alla tar du bort engelska under Realm settings > Localization. Vi använde administrationskonsolen på engelska.

13. Säkerhetskopiera

Som keycloak:

umask 077
mkdir -p ~/backup
podman exec keycloak-db pg_dump -U keycloak -d keycloak > ~/backup/keycloak-db.sql
podman exec keycloak-app /opt/keycloak/bin/kc.sh export --realm example --file /tmp/example-realm.json
podman exec keycloak-app cat /tmp/example-realm.json > ~/backup/example-realm.json
podman exec keycloak-app rm /tmp/example-realm.json

Databasdumpen är den fullständiga säkerhetskopian: båda realms, användare, lösenord, autentiseringsappar, klienter och nycklarna som Keycloak signerar sina token med. Exporten är bara realmen example, som en JSON-fil, med användarna och deras inloggningsuppgifter, och den kan du importera i en annan Keycloak-server. Båda körs medan Keycloak fortsätter att fungera. Exporten läses ut med cat i stället för podman cp, så att umask 077 gäller även för den: med podman cp skulle alla användare på servern kunna läsa den. Kopiera ~/backup till en annan maskin, till exempel med restic, och förvara den säkert: den som har den kan skapa token som dina appar litar på.

För att återställa databasen till en tom pod, som keycloak, med säkerhetskopian i ~/backup:

systemctl --user stop keycloak-pod
podman volume rm keycloak-db
systemctl --user start keycloak-db
systemctl --user stop keycloak-app
podman exec -i keycloak-db psql -q -U keycloak -d keycloak < ~/backup/keycloak-db.sql
systemctl --user start keycloak-app

När databasen startar, startar hela podden och Keycloak med den, så stoppa Keycloak innan du läser in säkerhetskopian. Annars sätter Keycloak upp en tom databas först, och säkerhetskopian passar inte längre in i den. På en ny server skapar du användaren, databasens hemlighet och filerna från steg 1 till 3, utan de två raderna för den tillfälliga administratören och utan att starta podden, och återställer sedan: ditt administratörskonto kommer tillbaka med databasen. Vi återställde på samma server.

För att i stället importera exporten av realmen, i en Keycloak som saknar realmen example, loggar du in i kcadm som i steg 7 och kör:

podman exec -i keycloak-app /opt/keycloak/bin/kcadm.sh create realms -f - < ~/backup/example-realm.json

SMTP-lösenordet finns inte i någon av säkerhetskopiorna, bara hänvisningen till valvet. Skapa keycloak-smtp-password igen som i steg 10.

14. Uppdatera

podman auto-update letar en gång om dagen efter nya avbilder av Keycloak och PostgreSQL och startar om podden när någon har ändrats. För att uppdatera direkt:

podman auto-update

Keycloak ger ut en ny version, till exempel 26.9, med några månaders mellanrum. Läs versionsinformationen och uppgraderingsguiden på keycloak.org, gör en säkerhetskopia, byt sedan taggen i keycloak-app.container, till exempel 26.8 mot 26.9, och starta om:

systemctl --user daemon-reload
systemctl --user restart keycloak-app

Keycloak uppdaterar sin databas när den startar. Varje start tar en minut eller så, eftersom Keycloak först förbereder sig för inställningarna den får, och inloggningssidorna går inte att nå förrän den är klar.

Felsökning

Administrationskonsolen visar bara en snurrande cirkel. Realmen master saknar frontendUrl, så konsolen försöker nå https://sso.example.com/realms/master, som Caddy stoppar. Kör kommandot kcadm update realms/master från steg 4.

Administratörens inloggning säger "HTTPS required". sslRequired=none saknas på realmen master. Kör samma kommando.

En användare är säker på att lösenordet stämmer men får "Ogiltigt användarnamn eller lösenord.". Kontot är spärrat efter för många misslyckade försök. Vänta upp till 15 minuter, eller stäng av Temporarily locked på användarsidan.

Outline startar inte, eller saknar Fortsätt med Keycloak. Som outline kör du journalctl --user -u outline-app | grep -i oidc. Om hämtningen av inställningarna misslyckas saknas raden AddHost i outline.pod, eller så startades inte podden om efter att den lades till.

Keycloak visar "Ogiltig omdirigeringsadress" efter inloggning i en app. Appens adress under Valid redirect URIs i klienten stämmer inte exakt. Vid utloggning kontrollerar du Valid post logout redirect URIs: Outline skickar https://wiki.example.com utan snedstreck.

Inget e-postmeddelande kommer fram. Som keycloak kör du journalctl --user -u keycloak-app | grep -i mail för e-postserverns svar. Om svaret gäller inloggningen kontrollerar du användarnamnet och lösenordshemligheten, och att Password är ${vault.smtp-password}.

Kör det på din egen server

SSD RAID 1 · ECC DDR4 · 10 Gbit

VC-P Alloy

100 kr/mån

vCPU
2
Minne
8 GB
Lagring
60 GB
Trafik
10 TB
Performance
SSD · RAID 1
  • Full root-åtkomst
  • Nativt /64 IPv6
  • RAID-skyddad lagring
  • Malmö, Sverige
  • Månadsvis, ingen bindningstid
  • 7 dagars öppet köp
Alla guider