Skip to content

Commit a282a42

Browse files
committed
feat(lab-03): SuiteCRM Advanced Features -- Redis session cache, dedicated cron container, resource limits
1 parent 3b593ba commit a282a42

3 files changed

Lines changed: 299 additions & 58 deletions

File tree

.github/workflows/ci.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,33 @@ jobs:
124124
- name: Cleanup
125125
if: always()
126126
run: docker compose -f docker/docker-compose.lan.yml down -v
127+
128+
lab-03-smoke:
129+
name: Lab 03 -- SuiteCRM Advanced Features (Redis sessions + dedicated Cron)
130+
runs-on: ubuntu-latest
131+
needs: validate
132+
continue-on-error: true
133+
steps:
134+
- uses: actions/checkout@v4
135+
- name: Install tools
136+
run: sudo apt-get install -y curl default-mysql-client redis-tools
137+
- name: Validate advanced compose
138+
run: docker compose -f docker/docker-compose.advanced.yml config -q && echo "Advanced compose valid"
139+
- name: Start advanced stack
140+
run: docker compose -f docker/docker-compose.advanced.yml up -d
141+
- name: Wait for MariaDB
142+
run: timeout 120 bash -c 'until docker exec suitecrm-a03-db mysqladmin ping -uroot -pRootLab03! --silent; do sleep 5; done'
143+
- name: Wait for Redis
144+
run: timeout 30 bash -c 'until docker exec suitecrm-a03-redis redis-cli ping | grep -q PONG; do sleep 3; done'
145+
- name: Wait for Mailhog
146+
run: timeout 60 bash -c 'until curl -sf http://localhost:8621/api/v2/messages; do sleep 5; done'
147+
- name: Wait for SuiteCRM
148+
run: timeout 300 bash -c 'until curl -sf http://localhost:8321/index.php; do sleep 10; done'
149+
- name: Run Lab 12-03 test script
150+
run: bash tests/labs/test-lab-12-03.sh --no-cleanup
151+
- name: Collect logs on failure
152+
if: failure()
153+
run: docker compose -f docker/docker-compose.advanced.yml logs
154+
- name: Cleanup
155+
if: always()
156+
run: docker compose -f docker/docker-compose.advanced.yml down -v

docker/docker-compose.advanced.yml

Lines changed: 131 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,145 @@
1-
# Lab 03 — Advanced Features: suitecrm with TLS, resource limits, logging
2-
---
1+
# Lab 03 — Advanced Features
2+
# Module 12: SuiteCRM CRM
3+
# External MariaDB + Redis cache + dedicated Cron + Mailhog + resource limits
4+
# Web UI: http://localhost:8321
5+
# Mailhog: http://localhost:8621
6+
7+
name: it-stack-suitecrm-lab03
8+
39
services:
4-
suitecrm:
5-
image: bitnami/suitecrm:latest
6-
container_name: it-stack-suitecrm
10+
# ── External Database ─────────────────────────────────────────────────────────
11+
suitecrm-a03-db:
12+
image: mariadb:10.11
13+
container_name: suitecrm-a03-db
14+
restart: unless-stopped
15+
environment:
16+
MYSQL_ROOT_PASSWORD: RootLab03!
17+
MYSQL_DATABASE: suitecrm
18+
MYSQL_USER: suitecrm
19+
MYSQL_PASSWORD: SuiteLab03!
20+
volumes:
21+
- suitecrm-a03-db-data:/var/lib/mysql
22+
healthcheck:
23+
test: ["CMD", "mysqladmin", "ping", "-uroot", "-pRootLab03!", "--silent"]
24+
interval: 10s
25+
timeout: 5s
26+
retries: 10
27+
start_period: 30s
28+
deploy:
29+
resources:
30+
limits:
31+
cpus: "0.5"
32+
memory: 512M
33+
networks:
34+
- suitecrm-a03-net
35+
36+
# ── Redis (session cache) ─────────────────────────────────────────────────────
37+
suitecrm-a03-redis:
38+
image: redis:7-alpine
39+
container_name: suitecrm-a03-redis
40+
restart: unless-stopped
41+
command: redis-server --save 60 1 --loglevel warning --maxmemory 256mb --maxmemory-policy allkeys-lru
42+
volumes:
43+
- suitecrm-a03-redis-data:/data
44+
healthcheck:
45+
test: ["CMD", "redis-cli", "ping"]
46+
interval: 10s
47+
timeout: 3s
48+
retries: 5
49+
start_period: 10s
50+
deploy:
51+
resources:
52+
limits:
53+
cpus: "0.25"
54+
memory: 256M
55+
networks:
56+
- suitecrm-a03-net
57+
58+
# ── SMTP Relay ────────────────────────────────────────────────────────────────
59+
suitecrm-a03-mail:
60+
image: mailhog/mailhog:latest
61+
container_name: suitecrm-a03-mail
762
restart: unless-stopped
863
ports:
9-
- "80:$firstPort"
64+
- "8621:8025"
65+
networks:
66+
- suitecrm-a03-net
67+
68+
# ── SuiteCRM Application ──────────────────────────────────────────────────────
69+
suitecrm-a03-app:
70+
image: bitnami/suitecrm:8
71+
container_name: suitecrm-a03-app
72+
restart: unless-stopped
73+
depends_on:
74+
suitecrm-a03-db:
75+
condition: service_healthy
76+
suitecrm-a03-redis:
77+
condition: service_healthy
78+
suitecrm-a03-mail:
79+
condition: service_started
80+
ports:
81+
- "8321:8080"
82+
environment:
83+
SUITECRM_DATABASE_HOST: suitecrm-a03-db
84+
SUITECRM_DATABASE_PORT_NUMBER: "3306"
85+
SUITECRM_DATABASE_NAME: suitecrm
86+
SUITECRM_DATABASE_USER: suitecrm
87+
SUITECRM_DATABASE_PASSWORD: SuiteLab03!
88+
SUITECRM_USERNAME: admin
89+
SUITECRM_PASSWORD: Admin03!
90+
SUITECRM_EMAIL: admin@lab.local
91+
SUITECRM_SMTP_HOST: suitecrm-a03-mail
92+
SUITECRM_SMTP_PORT: "1025"
93+
SUITECRM_SMTP_PROTOCOL: ""
94+
# Redis session cache
95+
SUITECRM_SESSION_SAVE_HANDLER: redis
96+
SUITECRM_SESSION_SAVE_PATH: "tcp://suitecrm-a03-redis:6379"
97+
volumes:
98+
- suitecrm-a03-data:/bitnami/suitecrm
99+
healthcheck:
100+
test: ["CMD-SHELL", "curl -sf http://localhost:8080/index.php | grep -qi 'suitecrm\\|login'"]
101+
interval: 30s
102+
timeout: 15s
103+
retries: 10
104+
start_period: 120s
105+
deploy:
106+
resources:
107+
limits:
108+
cpus: "1.0"
109+
memory: 1G
110+
networks:
111+
- suitecrm-a03-net
112+
113+
# ── SuiteCRM Cron (scheduled jobs) ───────────────────────────────────────────
114+
suitecrm-a03-cron:
115+
image: bitnami/suitecrm:8
116+
container_name: suitecrm-a03-cron
117+
restart: unless-stopped
118+
depends_on:
119+
suitecrm-a03-app:
120+
condition: service_healthy
121+
entrypoint: ["/bin/bash", "-c", "while true; do php /opt/bitnami/suitecrm/cron.php > /dev/null 2>&1; sleep 60; done"]
10122
environment:
11-
- IT_STACK_ENV=lab-03-advanced
12-
- TLS_ENABLED=true
123+
SUITECRM_DATABASE_HOST: suitecrm-a03-db
124+
SUITECRM_DATABASE_PORT_NUMBER: "3306"
125+
SUITECRM_DATABASE_NAME: suitecrm
126+
SUITECRM_DATABASE_USER: suitecrm
127+
SUITECRM_DATABASE_PASSWORD: SuiteLab03!
13128
volumes:
14-
- suitecrm_data:/var/lib/suitecrm
15-
- ./certs:/etc/ssl/certs:ro
129+
- suitecrm-a03-data:/bitnami/suitecrm
16130
deploy:
17131
resources:
18132
limits:
19-
cpus: "2.0"
20-
memory: G
21-
logging:
22-
driver: json-file
23-
options:
24-
max-size: "100m"
25-
max-file: "5"
133+
cpus: "0.25"
134+
memory: 256M
26135
networks:
27-
- it-stack-net
136+
- suitecrm-a03-net
28137

29138
networks:
30-
it-stack-net:
139+
suitecrm-a03-net:
31140
driver: bridge
32141

33142
volumes:
34-
suitecrm_data:
143+
suitecrm-a03-db-data:
144+
suitecrm-a03-redis-data:
145+
suitecrm-a03-data:

0 commit comments

Comments
 (0)