פורסם

Keycloak

שרת לניהול זהויות והרשאות: ‏single sign-on ב-OpenID Connect, ‏OAuth 2.0 ו-SAML לאפליקציות שלכם, עם realms, ‏user federation ‏(LDAP, ‏Kerberos), התחברות דרך רשתות חברתיות וספקים ארגוניים, אימות דו-שלבי וממשק ניהול. הפריסה העצמית כוללת שרת Java ‏(Quarkus) אחד ו-PostgreSQL, שמחזיק את כל המצב שלו.

משאבים לפי רמת עומס

מה האפליקציה עצמה צריכה בכל רמה, לצד מה שאנחנו ממליצים לשרת שמריץ רק אותה.

רמהמה זה אומרדרישות האפליקציהמומלץ
קלהערכהעד 1,000 משתמשים בכמה realms וכ-10 אפליקציות לקוח; שיאים של 2 התחברויות בסיסמה ו-24 רענוני token בשנייה.2 vCPU · 3 GiB RAM · 7.5 GiB דיסק2.52 vCPU · 5.1 GiB RAM · 18.055 GiB דיסק
בינוניהערכהעד 10,000 משתמשים; שיאים של 6 התחברויות בסיסמה, 48 רענוני token ו-12 client credential grants בשנייה.3.25 vCPU · 3 GiB RAM · 7.5 GiB דיסק4.02 vCPU · 5.1 GiB RAM · 18.055 GiB דיסק
כבדהערכהעד 50,000 משתמשים; שיאים של 12 התחברויות בסיסמה, 96 רענוני token ו-24 client credential grants בשנייה.6.5 vCPU · 6 GiB RAM · 52.5 GiB דיסק7.92 vCPU · 8.7 GiB RAM · 69.805 GiB דיסק

מומלץ = דרישות האפליקציה + baseline של המערכת + מרווח ביטחון (headroom), לפי מדיניות ה-sizing ‏2026.10.0. האפשרויות נשארות בברירת המחדל. ״הערכה״ פירושה שהמקורות לא נותנים מספר למקרה הזה, ולכן הוא מחושב מהם בשיטה שמפורטת תחת רכיבים. איך המספרים נבנים

לחישוב ב-Stack Sizer

קבצים מוכנים להפעלה

רמת תמיכה נתמך

תבנית Compose מהמקורות הרשמיים; עוד לא נבדקה בהרצה.

צור docker-compose

רכיבים

מה כל רכיב צריך בכל רמת עומס, לפני baseline ו-headroom.

vCPU / GiB RAM / GiB דיסק
רכיבקלבינוניכבדמקורות
Keycloak server (app)1 / 2 / 12.25 / 2 / 14.5 / 2 / 1[2][13][14][15][31]
PostgreSQL (database)1 / 1 / 6.51 / 1 / 6.52 / 4 / 51.5[7][8][14][15][35][36][37][38][39][40][41]
איך ההערכות מחושבות
  • Keycloak server · קל: CPU לפי מדריך ה-sizing: ‏2 התחברויות בשנייה ÷ 15 ועוד 24 רענונים בשנייה ÷ 120 ‏= 0.333 vCPU, ועוד 150% מרווח ‏= 0.833, מעוגל ל-1 vCPU. ‏RAM: ‏2 GB שמדריך הקונטיינרים ממליץ לסביבת production קטנה (שימוש בסיס של 1250 MB עם caches ו-10,000 sessions); ה-heap מקובע על 1434 MiB. Disk: ‏image של 265,677,312 B דחוס × 3 ‏= 0.742 GiB, מעוגל ל-1 GiB; אין נתונים בדיסק.
  • Keycloak server · בינוני: CPU לפי מדריך ה-sizing: ‏6 ÷ 15 + 48 ÷ 120 + 12 ÷ 120 ‏= 0.9 vCPU (רענונים ביחס 1:8 להתחברויות, כמו בדוגמה של המדריך), ועוד 150% מרווח ‏= 2.25 vCPU. ‏RAM נשאר 2 GiB: הזיכרון תלוי בנתונים שב-cache ‏(10,000 רשומות לכל cache כברירת מחדל), לא בקצב הבקשות. Disk: ‏0.742 GiB ל-image, מעוגל ל-1 GiB.
  • Keycloak server · כבד: CPU לפי מדריך ה-sizing: ‏12 ÷ 15 + 96 ÷ 120 + 24 ÷ 120 ‏= 1.8 vCPU, ועוד 150% מרווח ‏= 4.5 vCPU; רוב הזמן הולך על hashing של סיסמאות. ‏RAM נשאר 2 GiB: בדוגמה של המדריך עצמו, 45 התחברויות בשנייה לכל ה-cluster עם 1250 MB לכל node. Disk: ‏0.742 GiB ל-image, מעוגל ל-1 GiB.
  • PostgreSQL · קל: כ-26 בקשות התחברות, התנתקות ורענון בשנייה × ‏0.35–0.7 vCPU לכל 100 (המדידות של Keycloak למסד הנתונים) ‏= 0.09–0.18 vCPU מעל עומס מנוחה של 0.3 vCPU, בתוך ה-vCPU האחד של ה-sidecar; כ-364 IOPS של כתיבה. ה-pool מוגבל ל-20 חיבורים. שיטת ה-light: ‏shared_buffers ‏25% מה-RAM, ‏0.5 GiB ל-image ‏+ 5 GiB נתונים + 1 GiB ל-WAL.
  • PostgreSQL · בינוני: כ-55 בקשות התחברות, התנתקות ורענון בשנייה × ‏0.35–0.7 vCPU לכל 100 ‏= 0.19–0.39 vCPU מעל עומס מנוחה של 0.3 vCPU, עדיין בתוך vCPU אחד; כ-770 IOPS של כתיבה. ‏10,000 משתמשים × הנחה של 20 KB שורות ‏= 0.2 GB, בתוך 5 GB; ה-pool מוגבל ל-20. שיטת ה-light: ‏shared_buffers ‏25% מה-RAM, ‏0.5 GiB ל-image ‏+ 5 GiB נתונים + 1 GiB ל-WAL.
  • PostgreSQL · כבד: כ-110 בקשות התחברות, התנתקות ורענון בשנייה × ‏0.35–0.7 vCPU לכל 100 ‏= 0.38–0.77 vCPU מעל עומס מנוחה של 0.3 vCPU: עד 1.07 vCPU, מעבר ל-vCPU האחד של ה-sidecar, ולכן ה-preset ‏medium של פרופיל PostgreSQL ‏(2 vCPU, ‏4 GiB). כ-1,540 IOPS של כתיבה. ‏50,000 משתמשים × הנחה של 20 KB ‏= 1 GB שורות.

פורטים

פורטים ציבוריים נועדו לגישה מחוץ ל-stack, בדרך כלל דרך reverse proxy; פורטים פנימיים נשארים ברשת של ה-stack עצמו.

רכיבפורטחשיפהשימושמקורות
Keycloak server8080/tcpציבורי, דרך proxyLogin pages, OIDC/SAML endpoints, Admin Console and Admin API (HTTP; TLS at the proxy)[5][11]
Keycloak server9000/tcpפנימי בלבדManagement interface: /health and /metrics; never expose it[3][4]
Keycloak server7800/tcpפנימי בלבדJGroups unicast transport of the ispn caches (jdbc-ping stack)[10]
Keycloak server57800/tcpפנימי בלבדJGroups failure detection (FD_SOCK2, bind port + 50000)[10]
PostgreSQL5432/tcpפנימי בלבדPostgreSQL connections from Keycloak (also its jdbc-ping node registry)[7][40]

כל הפורטים בקטלוג, עם התנגשויות בין אפליקציות

משתמש והרשאות (UID/GID)

המשתמש שהתהליך של כל קונטיינר רץ תחתיו, והנתיבים שהוא כותב אליהם. ‏bind mount לאחד הנתיבים האלה חייב להיות ניתן לכתיבה על ידי ה-UID:GID הזה.

רכיבUID:GIDמשתמשמתחיל כ-rootכותב אלמקורות
Keycloak serverנגזר1000:0keycloakלא/opt/keycloak/data/opt/keycloak/lib[11][16][17]
PostgreSQL999:999postgresכן, מכין את התיקיות שלו ואז עובר למשתמש הזה/var/lib/postgresql/var/run/postgresql[33][34][40]
  • Keycloak server: ‏USER 1000 ‏(keycloak, קבוצה 0) מההתחלה, ו-‎/opt/keycloak בבעלות 1000:0 עם הרשאת כתיבה לקבוצה. ‏data/ מחזיק קבצי runtime; ‏start בלי ‎--optimized כותב את ה-build שלו ל-lib/. אף אחד מהם לא צריך volume: ‏realms, משתמשים ו-sessions נשמרים ב-PostgreSQL.

צמיחת אחסון

בכמה הנתונים של כל רכיב גדלים בחודש בכל רמת עומס, מעבר לדיסק שבפרופיל. ערך שמסומן ״הנחה״ הוא הנחה מוצהרת של ANAROQ ולא מספר מהמקורות; ההערות מפרטות על מה היא נשענת.

GiB לחודש
רכיבקלבינוניכבדמקורות
PostgreSQLהנחה0.0010.010.05[19][27]
על מה מספרי הצמיחה נשענים
  • PostgreSQL: משתמשים חדשים בחודש (הנחה: 50, ‏500 ו-2,500) × הנחה של 20 KB שורות לכל אחד. ‏sessions נשמרים במסד אבל פגים, ולכן הגודל שלהם יציב; שמירת אירועי משתמשים ומנהלים כבויה כברירת מחדל, ואחרי שמפעילים אותה היא גדלה עד שה-expiration מוחק אותם.

שדרוג וחזרה לאחור

איך עוברים לגרסה חדשה בבטחה, ואיך חוזרים אחורה אם משהו נכשל.

קודם גיבוי

קחו pg_dump של מסד keycloak ושמרו את ה-.env: ה-schema אחרי ה-migration כבר לא עובד עם השרת הישן. [22]

שלבי השדרוג

  1. קראו במדריך השדרוג את הערות השדרוג של כל גרסה בין הגרסה שלכם לחדשה: ה-breaking changes מופיעים לפי גרסה. [21]
  2. שנו את ה-tag המוצמד של keycloak, ואז הריצו docker compose pull ו-docker compose up -d. ‏Compose עוצר קודם את הקונטיינר הישן, כפי ששדרוג minor ו-major דורש; ה-schema עובר migration בהפעלה הראשונה (timeout של 30 דקות). עקבו אחרי docker compose logs -f keycloak עד שהוא healthy. [22][23]
  3. בטבלאות עם יותר מ-300,000 שורות ה-migration מדלג על אינדקסים חדשים, ו-PostgreSQL בונה אותם ברקע אחרי ההפעלה; צפו לעומס נוסף על מסד הנתונים לזמן מה. [23]

חזרה לאחור

‏Keycloak לא יכול לבטל שינויים במסד הנתונים: עצרו אותו, שחזרו את ה-dump מלפני השדרוג והצמידו את ה-image חזרה ל-tag הקודם. [21][22]

שינויים שוברים ידועים

  • בגרסה 26.8.1: כש-Enable StartTLS פעיל, ‏SMTP דורש עכשיו שדרוג STARTTLS מוצלח במקום לחזור לטקסט גלוי; שליחת מייל נכשלת מול שרתים בלי STARTTLS. [24]
  • בגרסה 26.8.0: כישלונות התחברות של זיהוי brute force נשמרים במסד הנתונים כברירת מחדל, עם יותר חיבורים ו-CPU במסד; ‏clients מושבתים כבר לא מופיעים ב-audience של ה-tokens. [25]
  • בגרסה 26.7.0: תפקיד המנהל view-system הוסר, ה-timeout של הכיבוי גדל משנייה אחת ל-10 שניות, וכתיבות זמניות (sessions, אירועים) משתמשות ב-async commit של PostgreSQL. [26]
  • בגרסה 26.0.0: ‏KEYCLOAK_ADMIN ו-KEYCLOAK_ADMIN_PASSWORD הוחלפו ב-KC_BOOTSTRAP_ADMIN_USERNAME ו-KC_BOOTSTRAP_ADMIN_PASSWORD; ‏hostname v1 והאפשרות proxy הוסרו, וכל ה-sessions של המשתמשים נשמרים במסד הנתונים. [27]

מגבלות

  • ‏node אחד של Keycloak. ה-CPU תלוי ב-hashing של סיסמאות: ‏vCPU אחד לכל 15 התחברויות בסיסמה בשנייה, ועוד 150% מרווח. ה-heap מקובע על 1434 MiB בשביל ה-preset של 2 GiB; שנו את JAVA_OPTS_KC_HEAP אם אתם נותנים ל-Keycloak יותר זיכרון. [2][13][14]
  • ה-sessions נשמרים ב-PostgreSQL: כל 100 בקשות התחברות, התנתקות ורענון בשנייה צריכות כ-1,400 IOPS של כתיבה, ולכן דיסק איטי מגביל את התפוקה לפני ה-CPU. [7][15]
  • ה-image הרגיל מריץ build בכל הפעלה, ולכן ההפעלה איטית יותר. ‏providers וערכות עיצוב מותאמים, או אפשרויות build כמו features, דורשים image ‏optimized משלכם, שהתבנית לא בונה. [2][16]

אבטחה

  • המנהל מה-.env הוא זמני ונועד רק לכניסה הראשונה: התחברו, צרו מנהל קבוע עם אימות דו-שלבי ואז מחקו את החשבון הזמני. משתני ה-bootstrap נבדקים רק כל עוד ה-realm ‏master לא קיים. [16][18]
  • ה-proxy מעביר הכול. מדריך ה-reverse proxy ממליץ לחשוף רק את ‎/realms/, ‏‎/resources/ ו-‎/.well-known/, ולהשאיר את ‎/admin/ ו-‎/realms/master/ פנימיים: חסמו אותם ב-proxy, או השתמשו ב-realm ‏master רק מרשת פרטית. [5][6]
  • מאחורי proxy, ‏Keycloak סומך על כותרות X-Forwarded-* ‏(KC_PROXY_HEADERS=xforwarded). ה-proxy שלכם חייב לקבוע ולדרוס אותן, ואסור שפורט 8080 יהיה נגיש בלי לעבור דרכו; ‏health ו-metrics נשארים בפורט 9000 שלא מתפרסם. [4][5]
  • זיהוי brute force כבוי כברירת מחדל. הפעילו אותו בכל realm ‏(Realm settings, ‏Security defenses) לפני שחושפים את עמודי ההתחברות. [19]

גיבוי

  • כל המצב נמצא ב-PostgreSQL: ‏realms, משתמשים, פרטי הזדהות, ‏clients, מפתחות חתימה ו-sessions. גבו pg_dump של מסד keycloak יחד עם ה-.env; לקונטיינר של Keycloak אין volume. [7][22]
  • ייצוא realm מממשק הניהול הוא לא גיבוי: הוא משמיט סודות ומשתמשים. רק ייצוא בזמן ההפעלה (kc.sh export) מתאים לגיבוי או למעבר לשרת אחר. [19][20]

גרסה אחרונה

הגרסה האחרונה של הפרויקט
Keycloak 26.8.1 [29][30]
הפרופיל נבדק מול

Keycloak 26.8.1

הפרופיל נבדק מול הגרסה האחרונה.

נבדק ב-
14 באוק׳ 2026
מצב
נבדק ב-90 הימים האחרונים
איפה הגרסאות מתפרסמות
GitHub Releases

הגרסאות האחרונות של כל האפליקציות

גרסה

סטטוס הפרופיל
פורסם
נבדק מול גרסה
Keycloak 26.8.1
גרסת הפרופיל
1.0.0
המספרים אומתו
14 באוק׳ 2026
גרסת הקטלוג
2026.10.10
מדיניות sizing
2026.10.0
קובץ Compose
לא אומת
האתר הרשמי
www.keycloak.org

מקורות

  1. Docker Docs: Control startup order in Compose (pg_isready healthcheck, service_healthy) (תיעוד רשמי · נקרא 11 באוק׳ 2026)
  2. Keycloak Docs: Running Keycloak in a container (plain start re-runs the build at every start; KC_BOOTSTRAP_ADMIN_*; heap 70% of the memory limit, 2 GB recommended for small production) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  3. Keycloak Docs: Health checks (/health/ready on management port 9000 with health-enabled; no curl in the image; bash /dev/tcp HEALTHCHECK example) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  4. Keycloak Docs: Management interface (/health and /metrics on port 9000, kept off the main HTTP port) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  5. Keycloak Docs: Configuring the hostname v2 (hostname as a full URL, http-enabled for edge TLS on 8080, proxy-headers xforwarded) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  6. Keycloak Docs: Configuring a reverse proxy (expose /realms/, /resources/, /.well-known/; keep /admin/ and /realms/master/ internal; proxy must overwrite X-Forwarded-*) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  7. Keycloak Docs: Configuring the database (PostgreSQL 18.x to 14.x supported, tested with 18; db-url, db-username, db-password; connection pool) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  8. Keycloak Docs: All configuration (bootstrap-admin-username temp-admin, db-pool-max-size 100, http-enabled false, cache ispn, health-enabled false, management port 9000) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  9. Keycloak Docs: Configuring Keycloak for production (with health enabled, ports open during bootstrap and /health/ready stays DOWN until it ends) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  10. Keycloak Docs: Configuring distributed caches (start uses ispn with the jdbc-ping stack; ports 7800 and 57800; local cache only for development) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  11. keycloak repository: quarkus/container/Dockerfile at 26.8.1 (ubi9-micro, /opt/keycloak owned 1000:0, USER 1000, EXPOSE 8080 8443 9000, ENTRYPOINT kc.sh, no HEALTHCHECK) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  12. keycloak repository: quarkus/container/ubi-null.sh at 26.8.1 (the image keeps bash and coreutils-single for a shell; no curl) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  13. keycloak repository: kc.sh at 26.8.1 (in a container, JAVA_OPTS_KC_HEAP defaults to MaxRAMPercentage=70 and InitialRAMPercentage=50; a set value replaces it) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  14. Keycloak Docs: Concepts for sizing CPU and memory (1250 MB base; 1 vCPU per 15 password logins/s, per 120 refreshes/s, per 120 client credential grants/s; 150% CPU headroom) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  15. keycloak repository: perf_recommendations.adoc at 26.8.1 (database: 1400 write IOPS and 0.35 to 0.7 vCPU per 100 login/logout/refresh per second; idle 0.3 vCPU) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  16. Keycloak Docs: Configuring Keycloak (start runs a build under the covers; --optimized skips it; bootstrap admin variables are ignored once an admin exists) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  17. Keycloak Docs: Directory structure (/opt/keycloak in containers; data/ holds runtime information such as transaction logs; lib/ used internally) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  18. Keycloak Docs: Bootstrapping and recovering an admin account (bootstrap admin is temporary, created only with the master realm; remove it manually) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  19. Keycloak Server Administration Guide (brute force detection off by default; Save events off until enabled; Admin Console exports are not backups) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  20. Keycloak Docs: Importing and exporting realms (kc.sh export with users; Admin Console partial export leaves out users and masks secrets) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  21. Keycloak Upgrading Guide (back up the database first; schema migrates at first start; database changes cannot be rolled back) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  22. keycloak repository: upgrading/topics/prep_migration.adoc at 26.8.1 (shut down for minor and major upgrades; back up the database; no rollback of schema changes) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  23. keycloak repository: upgrading/topics/migrate_db.adoc at 26.8.1 (automatic migration, 30 min timeout, indexes on tables over 300,000 rows built in the background) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  24. Keycloak 26.8.1 upgrade notes (SMTP StartTLS is required when enabled, CVE-2026-107121) (Release notes · נקרא 14 באוק׳ 2026)
  25. Keycloak 26.8.0 upgrade notes (login failures stored in the database by default; disabled clients left out of token audiences) (Release notes · נקרא 14 באוק׳ 2026)
  26. Keycloak 26.7.0 upgrade notes (view-system admin role removed; shutdown timeout 10 s; async commit on PostgreSQL) (Release notes · נקרא 14 באוק׳ 2026)
  27. Keycloak 26.0.0 upgrade notes (KEYCLOAK_ADMIN replaced by KC_BOOTSTRAP_ADMIN_*; hostname v1 and proxy option removed; sessions persisted) (Release notes · נקרא 14 באוק׳ 2026)
  28. Keycloak Release Notes (26.8.0 is the newest minor release) (Release notes · נקרא 14 באוק׳ 2026)
  29. Keycloak: Downloads (26.8.1 server distribution and container image) (תיעוד רשמי · נקרא 14 באוק׳ 2026)
  30. Quay tags of quay.io/keycloak/keycloak (newest release 26.8.1, pushed 2026-10-13; 26.8 and latest point to the same index) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  31. Quay manifest of quay.io/keycloak/keycloak:26.8.1 (linux/amd64): 4 layers, 265,677,312 B compressed; config User 1000, no Healthcheck (מדידה · נקרא 14 באוק׳ 2026)
  32. keycloak repository: LICENSE.txt at 26.8.1 (Apache License 2.0) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  33. docker-library/postgres: 18/trixie Dockerfile (postgres uid/gid 999, VOLUME /var/lib/postgresql) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  34. docker-library/postgres: 18/trixie docker-entrypoint.sh (chown PGDATA, then gosu postgres) (מאגר רשמי · נקרא 14 באוק׳ 2026)
  35. PostgreSQL 18 documentation: 19.4 Resource Consumption (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  36. PostgreSQL 18 documentation: 19.3 Connections and Authentication (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  37. PostgreSQL 18 documentation: 19.10 Vacuuming (autovacuum settings) (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  38. PostgreSQL 18 documentation: 19.5 Write Ahead Log (max_wal_size) (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  39. PostgreSQL 18 documentation: 51.2 How Connections Are Established (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  40. Docker Official Image postgres: documentation (docker-library/docs) (תיעוד רשמי · נקרא 10 באוק׳ 2026)
  41. Docker Hub: library/postgres tag 18.6 (compressed image sizes) (מאגר רשמי · נקרא 10 באוק׳ 2026)

כל אפליקציות ה-self-hosted