Skip to content

Commit 4c77e6c

Browse files
committed
feat(lab-04): SuiteCRM SSO Integration (OpenLDAP + Keycloak SAML)
1 parent a282a42 commit 4c77e6c

3 files changed

Lines changed: 381 additions & 57 deletions

File tree

.github/workflows/ci.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,35 @@ jobs:
154154
- name: Cleanup
155155
if: always()
156156
run: docker compose -f docker/docker-compose.advanced.yml down -v
157+
158+
lab-04-smoke:
159+
name: Lab 04 -- SuiteCRM SSO Integration (OpenLDAP + Keycloak SAML)
160+
runs-on: ubuntu-latest
161+
needs: validate
162+
continue-on-error: true
163+
steps:
164+
- uses: actions/checkout@v4
165+
- name: Install tools
166+
run: sudo apt-get install -y curl default-mysql-client netcat-openbsd ldap-utils
167+
- name: Validate SSO compose
168+
run: docker compose -f docker/docker-compose.sso.yml config -q && echo "SSO compose valid"
169+
- name: Start SSO stack
170+
run: docker compose -f docker/docker-compose.sso.yml up -d
171+
- name: Wait for MariaDB
172+
run: timeout 120 bash -c 'until docker exec suitecrm-s04-db mysqladmin ping -uroot -pRootLab04! --silent; do sleep 5; done'
173+
- name: Wait for OpenLDAP
174+
run: timeout 120 bash -c 'until docker exec suitecrm-s04-ldap ldapsearch -x -H ldap://localhost -b dc=lab,dc=local -D cn=admin,dc=lab,dc=local -w LdapLab04! cn=admin >/dev/null 2>&1; do sleep 5; done'
175+
- name: Wait for Keycloak
176+
run: timeout 300 bash -c 'until curl -sf http://localhost:8441/realms/master; do sleep 10; done'
177+
- name: Wait for Mailhog
178+
run: timeout 60 bash -c 'until curl -sf http://localhost:8641/api/v2/messages; do sleep 5; done'
179+
- name: Wait for SuiteCRM web
180+
run: timeout 300 bash -c 'until curl -sf http://localhost:8341/; do sleep 10; done'
181+
- name: Run Lab 12-04 test script
182+
run: bash tests/labs/test-lab-12-04.sh --no-cleanup
183+
- name: Collect logs on failure
184+
if: failure()
185+
run: docker compose -f docker/docker-compose.sso.yml logs
186+
- name: Cleanup
187+
if: always()
188+
run: docker compose -f docker/docker-compose.sso.yml down -v

docker/docker-compose.sso.yml

Lines changed: 172 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,185 @@
1-
# Lab 04 — SSO Integration: suitecrm with Keycloak OIDC authentication
2-
---
1+
# =============================================================================
2+
# IT-Stack: SuiteCRM — Lab 04: SSO Integration
3+
# Module 12 · Phase 3 · Lab 04
4+
# =============================================================================
5+
# Services: MariaDB · OpenLDAP · Keycloak · Mailhog · SuiteCRM
6+
# Ports: SuiteCRM:8341 Keycloak:8441 LDAP:3891 Mailhog:8641
7+
# Credentials:
8+
# DB root: RootLab04!
9+
# SuiteCRM DB: suitecrm / SuiteLab04!
10+
# SuiteCRM UI: admin / Admin04!
11+
# Keycloak: admin / Admin04!
12+
# LDAP admin: cn=admin,dc=lab,dc=local / LdapLab04!
13+
# What's new vs Lab 03:
14+
# + OpenLDAP directory for LDAP authentication
15+
# + Keycloak 24 dev-mode as SAML IdP (it-stack realm)
16+
# + SuiteCRM LDAP auth env vars (SUITECRM_LDAP_*)
17+
# + Keycloak SAML metadata endpoint tested in Lab 04
18+
# =============================================================================
19+
20+
name: it-stack-suitecrm-lab04
21+
322
services:
4-
suitecrm:
5-
image: bitnami/suitecrm:latest
6-
container_name: it-stack-suitecrm
23+
24+
# ── MariaDB ──────────────────────────────────────────────────────────────
25+
suitecrm-s04-db:
26+
image: mariadb:10.11
27+
container_name: suitecrm-s04-db
28+
restart: unless-stopped
29+
environment:
30+
MYSQL_ROOT_PASSWORD: RootLab04!
31+
MYSQL_DATABASE: suitecrm
32+
MYSQL_USER: suitecrm
33+
MYSQL_PASSWORD: SuiteLab04!
34+
volumes:
35+
- suitecrm-s04-db-data:/var/lib/mysql
36+
healthcheck:
37+
test: ["CMD", "mysqladmin", "ping", "-uroot", "-pRootLab04!", "--silent"]
38+
interval: 10s
39+
timeout: 5s
40+
retries: 15
41+
networks:
42+
- suitecrm-s04-net
43+
deploy:
44+
resources:
45+
limits:
46+
memory: 512M
47+
cpus: "0.5"
48+
49+
# ── OpenLDAP ─────────────────────────────────────────────────────────────
50+
suitecrm-s04-ldap:
51+
image: osixia/openldap:1.5.0
52+
container_name: suitecrm-s04-ldap
753
restart: unless-stopped
8-
ports:
9-
- "80:$firstPort"
1054
environment:
11-
- IT_STACK_ENV=lab-04-sso
12-
- KEYCLOAK_URL=
13-
- KEYCLOAK_REALM=
14-
- KEYCLOAK_CLIENT_ID=suitecrm
15-
- KEYCLOAK_CLIENT_SECRET=
55+
LDAP_ORGANISATION: "IT-Stack Lab"
56+
LDAP_DOMAIN: lab.local
57+
LDAP_ADMIN_PASSWORD: LdapLab04!
58+
LDAP_CONFIG_PASSWORD: ConfigLab04!
59+
LDAP_BASE_DN: dc=lab,dc=local
60+
LDAP_READONLY_USER: "true"
61+
LDAP_READONLY_USER_USERNAME: readonly
62+
LDAP_READONLY_USER_PASSWORD: ReadOnly04!
63+
ports:
64+
- "3891:389"
65+
volumes:
66+
- suitecrm-s04-ldap-data:/var/lib/ldap
67+
- suitecrm-s04-ldap-config:/etc/ldap/slapd.d
68+
healthcheck:
69+
test: ["CMD-SHELL", "ldapsearch -x -H ldap://localhost -b dc=lab,dc=local -D cn=admin,dc=lab,dc=local -w LdapLab04! cn=admin > /dev/null 2>&1 || exit 1"]
70+
interval: 10s
71+
timeout: 5s
72+
retries: 15
1673
networks:
17-
- it-stack-net
74+
- suitecrm-s04-net
75+
deploy:
76+
resources:
77+
limits:
78+
memory: 256M
79+
cpus: "0.25"
1880

19-
# Local Keycloak for SSO lab (replace with lab-id1 in real env)
20-
keycloak:
21-
image: quay.io/keycloak/keycloak:24
22-
container_name: it-stack-suitecrm-keycloak
81+
# ── Keycloak ─────────────────────────────────────────────────────────────
82+
suitecrm-s04-kc:
83+
image: quay.io/keycloak/keycloak:24.0.3
84+
container_name: suitecrm-s04-kc
85+
restart: unless-stopped
2386
command: start-dev
2487
environment:
2588
KEYCLOAK_ADMIN: admin
26-
KEYCLOAK_ADMIN_PASSWORD: admin
89+
KEYCLOAK_ADMIN_PASSWORD: Admin04!
90+
KC_HEALTH_ENABLED: "true"
91+
KC_DB: dev-file
92+
KC_HOSTNAME_STRICT: "false"
93+
KC_HOSTNAME_STRICT_HTTPS: "false"
94+
KC_HTTP_ENABLED: "true"
2795
ports:
28-
- "8080:8080"
96+
- "8441:8080"
97+
healthcheck:
98+
test: ["CMD-SHELL", "curl -sf http://localhost:8080/realms/master || exit 1"]
99+
interval: 15s
100+
timeout: 10s
101+
retries: 20
102+
start_period: 30s
29103
networks:
30-
- it-stack-net
104+
- suitecrm-s04-net
105+
deploy:
106+
resources:
107+
limits:
108+
memory: 1G
109+
cpus: "1.0"
31110

111+
# ── Mailhog ──────────────────────────────────────────────────────────────
112+
suitecrm-s04-mail:
113+
image: mailhog/mailhog:latest
114+
container_name: suitecrm-s04-mail
115+
restart: unless-stopped
116+
ports:
117+
- "8641:8025"
118+
networks:
119+
- suitecrm-s04-net
120+
deploy:
121+
resources:
122+
limits:
123+
memory: 128M
124+
cpus: "0.1"
125+
126+
# ── SuiteCRM ─────────────────────────────────────────────────────────────
127+
suitecrm-s04-app:
128+
image: bitnami/suitecrm:8
129+
container_name: suitecrm-s04-app
130+
restart: unless-stopped
131+
depends_on:
132+
suitecrm-s04-db:
133+
condition: service_healthy
134+
suitecrm-s04-ldap:
135+
condition: service_healthy
136+
ports:
137+
- "8341:8080"
138+
environment:
139+
SUITECRM_DATABASE_HOST: suitecrm-s04-db
140+
SUITECRM_DATABASE_PORT_NUMBER: "3306"
141+
SUITECRM_DATABASE_NAME: suitecrm
142+
SUITECRM_DATABASE_USER: suitecrm
143+
SUITECRM_DATABASE_PASSWORD: SuiteLab04!
144+
MARIADB_ROOT_PASSWORD: RootLab04!
145+
SUITECRM_USERNAME: admin
146+
SUITECRM_PASSWORD: Admin04!
147+
SUITECRM_EMAIL: admin@lab.local
148+
SUITECRM_HOST: localhost
149+
SUITECRM_ENABLE_HTTPS: "no"
150+
# LDAP configuration (applied via SuiteCRM Admin UI or config)
151+
SUITECRM_LDAP_SERVER: suitecrm-s04-ldap
152+
SUITECRM_LDAP_PORT: "389"
153+
SUITECRM_LDAP_BASE_DN: dc=lab,dc=local
154+
SUITECRM_LDAP_ADMIN_DN: cn=admin,dc=lab,dc=local
155+
SUITECRM_LDAP_ADMIN_PASSWORD: LdapLab04!
156+
# Keycloak SAML IdP reference
157+
KEYCLOAK_URL: http://suitecrm-s04-kc:8080
158+
KEYCLOAK_REALM: it-stack
159+
KEYCLOAK_CLIENT_ID: suitecrm
160+
# Mail relay
161+
SUITECRM_SMTP_HOST: suitecrm-s04-mail
162+
SUITECRM_SMTP_PORT: "1025"
163+
SUITECRM_SMTP_PROTOCOL: none
164+
volumes:
165+
- suitecrm-s04-data:/bitnami/suitecrm
166+
networks:
167+
- suitecrm-s04-net
168+
deploy:
169+
resources:
170+
limits:
171+
memory: 1G
172+
cpus: "1.0"
173+
174+
# ── Networks ─────────────────────────────────────────────────────────────────
32175
networks:
33-
it-stack-net:
176+
suitecrm-s04-net:
177+
name: suitecrm-s04-net
34178
driver: bridge
179+
180+
# ── Volumes ──────────────────────────────────────────────────────────────────
181+
volumes:
182+
suitecrm-s04-db-data:
183+
suitecrm-s04-ldap-data:
184+
suitecrm-s04-ldap-config:
185+
suitecrm-s04-data:

0 commit comments

Comments
 (0)