103 lines
3.5 KiB
YAML
103 lines
3.5 KiB
YAML
version: "3.9"
|
|
|
|
networks:
|
|
keycloak-net:
|
|
driver: overlay
|
|
|
|
services:
|
|
# ────────── KEYCLOAK ────────────────────────────────────────────────
|
|
keycloak:
|
|
image: quay.io/keycloak/keycloak:26.2.1 # 23 Apr 2025 latest :contentReference[oaicite:0]{index=0}
|
|
command: >
|
|
start --optimized
|
|
--cache=ispn
|
|
--hostname-strict=false
|
|
environment:
|
|
KC_DB: postgres
|
|
KC_DB_URL_HOST: pg-0 # <- new primary name
|
|
KC_DB_URL_PORT: 5432
|
|
KC_DB_USERNAME: keycloak
|
|
KC_DB_PASSWORD: ${KC_DB_PASSWORD}
|
|
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
|
|
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
|
|
depends_on: [pg-0]
|
|
networks: [keycloak-net]
|
|
deploy:
|
|
replicas: 1
|
|
restart_policy: { condition: on-failure }
|
|
placement:
|
|
constraints:
|
|
- node.role == worker
|
|
|
|
# ────────── POSTGRESQL-REPMGR HA CLUSTER ────────────────────────────
|
|
pg-0: # primary
|
|
image: bitnami/postgresql-repmgr:17
|
|
environment:
|
|
POSTGRESQL_POSTGRES_PASSWORD: ${PG_SUPERUSER_PASSWORD}
|
|
POSTGRESQL_USERNAME: keycloak
|
|
POSTGRESQL_PASSWORD: ${KC_DB_PASSWORD}
|
|
POSTGRESQL_DATABASE: keycloak
|
|
REPMGR_USERNAME: repmgr
|
|
REPMGR_PASSWORD: ${REPMGR_PASSWORD}
|
|
REPMGR_NODE_ID: 1000
|
|
REPMGR_NODE_NAME: pg-0
|
|
REPMGR_NODE_NETWORK_NAME: pg-0
|
|
REPMGR_PRIMARY_HOST: pg-0
|
|
REPMGR_PARTNER_NODES: pg-0,pg-1,pg-2
|
|
volumes:
|
|
- /store/new-age/data/kc-pg-data-r0:/bitnami/postgresql
|
|
networks: [keycloak-net]
|
|
deploy:
|
|
restart_policy: { condition: on-failure }
|
|
placement:
|
|
constraints:
|
|
- node.labels.server_id == lnd1 # your pin
|
|
|
|
pg-1: # replica-1
|
|
image: bitnami/postgresql-repmgr:17
|
|
environment:
|
|
POSTGRESQL_POSTGRES_PASSWORD: ${PG_SUPERUSER_PASSWORD}
|
|
POSTGRESQL_USERNAME: keycloak
|
|
POSTGRESQL_PASSWORD: ${KC_DB_PASSWORD}
|
|
POSTGRESQL_DATABASE: keycloak
|
|
POSTGRESQL_REPLICATION_MODE: slave
|
|
REPMGR_USERNAME: repmgr
|
|
REPMGR_PASSWORD: ${REPMGR_PASSWORD}
|
|
REPMGR_NODE_ID: 1001
|
|
REPMGR_NODE_NAME: pg-1
|
|
REPMGR_NODE_NETWORK_NAME: pg-1
|
|
REPMGR_PRIMARY_HOST: pg-0
|
|
REPMGR_PARTNER_NODES: pg-0,pg-1,pg-2
|
|
volumes:
|
|
- /store/new-age/data/kc-pg-data-r1:/bitnami/postgresql
|
|
networks: [keycloak-net]
|
|
deploy:
|
|
restart_policy: { condition: on-failure }
|
|
placement:
|
|
constraints:
|
|
- node.labels.server_id == nyc3
|
|
|
|
pg-2: # replica-2
|
|
image: bitnami/postgresql-repmgr:17
|
|
environment:
|
|
POSTGRESQL_POSTGRES_PASSWORD: ${PG_SUPERUSER_PASSWORD}
|
|
POSTGRESQL_USERNAME: keycloak
|
|
POSTGRESQL_PASSWORD: ${KC_DB_PASSWORD}
|
|
POSTGRESQL_DATABASE: keycloak
|
|
POSTGRESQL_REPLICATION_MODE: slave
|
|
REPMGR_USERNAME: repmgr
|
|
REPMGR_PASSWORD: ${REPMGR_PASSWORD}
|
|
REPMGR_NODE_ID: 1002
|
|
REPMGR_NODE_NAME: pg-2
|
|
REPMGR_NODE_NETWORK_NAME: pg-2
|
|
REPMGR_PRIMARY_HOST: pg-0
|
|
REPMGR_PARTNER_NODES: pg-0,pg-1,pg-2
|
|
volumes:
|
|
- /store/new-age/data/kc-pg-data-r2:/bitnami/postgresql
|
|
networks: [keycloak-net]
|
|
deploy:
|
|
restart_policy: { condition: on-failure }
|
|
placement:
|
|
constraints:
|
|
- node.labels.server_id == amd1
|
|
|