@@ -41,21 +41,56 @@ services:
4141 image: ${ keycloak_image}
4242 container_name: ${ keycloak_container_name}
4343 restart: unless-stopped
44- command: ["start"]
44+ entrypoint:
45+ - "sh"
46+ - "-ec"
47+ - |
48+ set -a
49+ . /vault/secrets/keycloak.env
50+ . /vault/secrets/keycloak-admin.env
51+ # Split the combined PEM into separate cert+chain and key files.
52+ # A single pkiCert template call is used to ensure cert and key match.
53+ : > /tmp/keycloak.crt
54+ : > /tmp/keycloak.key
55+ in_cert="0"
56+ in_key="0"
57+ while IFS= read -r line; do
58+ case "$$line" in
59+ "-----BEGIN CERTIFICATE-----") in_cert="1" ;;
60+ "-----END CERTIFICATE-----")
61+ printf '%s\n' "$$line" >> /tmp/keycloak.crt
62+ in_cert="0"
63+ continue
64+ ;;
65+ "-----BEGIN EC PRIVATE KEY-----"|"-----BEGIN PRIVATE KEY-----") in_key="1" ;;
66+ "-----END EC PRIVATE KEY-----"|"-----END PRIVATE KEY-----")
67+ printf '%s\n' "$$line" >> /tmp/keycloak.key
68+ in_key="0"
69+ continue
70+ ;;
71+ esac
72+
73+ if [ "$$in_cert" = "1" ]; then
74+ printf '%s\n' "$$line" >> /tmp/keycloak.crt
75+ fi
76+ if [ "$$in_key" = "1" ]; then
77+ printf '%s\n' "$$line" >> /tmp/keycloak.key
78+ fi
79+ done < /vault/certs/keycloak.pem
80+
81+ test -s /tmp/keycloak.crt
82+ test -s /tmp/keycloak.key
83+ exec /opt/keycloak/bin/kc.sh start
4584 depends_on:
4685 vault-agent:
4786 condition: service_healthy
4887
49- env_file:
50- - ${ secrets_dir} /keycloak.env
51- - ${ secrets_dir} /keycloak-admin.env
52-
5388 environment:
5489 KC_DB: postgres
5590 KC_DB_URL: "jdbc:postgresql://${ postgres_host} :5432/keycloak?ssl=true&sslmode=require"
5691 KC_DB_USERNAME: keycloak
57- KC_HTTPS_CERTIFICATE_FILE: /vault/certs/ keycloak.pem
58- KC_HTTPS_CERTIFICATE_KEY_FILE: /vault/certs/ keycloak.pem
92+ KC_HTTPS_CERTIFICATE_FILE: /tmp/ keycloak.crt
93+ KC_HTTPS_CERTIFICATE_KEY_FILE: /tmp/ keycloak.key
5994 KC_HOSTNAME_STRICT: "false"
6095 KC_HEALTH_ENABLED: "true"
6196
@@ -66,13 +101,6 @@ services:
66101 - ${ certs_dir} :/vault/certs:ro,z
67102 - ${ secrets_dir} :/vault/secrets:ro,z
68103
69- healthcheck:
70- test: ["CMD-SHELL", "curl -sf http://localhost:9000/health/ready"]
71- interval: 10s
72- timeout: 5s
73- retries: 12
74- start_period: 60s
75-
76104 networks:
77105 - keycloak-net
78106
0 commit comments