Skip to content

Commit df23036

Browse files
waseemnaseevenwaseemnaseeven
andauthored
fix/keycloak_v2 (#215)
Co-authored-by: waseemnaseeven <[email protected]>
1 parent 1eb2298 commit df23036

File tree

7 files changed

+2955
-16
lines changed

7 files changed

+2955
-16
lines changed

.gitignore

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,21 @@ packages/database/data/pg_wal/
5656

5757
# LangGraph API
5858
.langgraph_api
59+
60+
keycloak/.env.keycloak
61+
keycloak/realm.json
62+
63+
# Data
64+
kc_postgres_data/
65+
postgres_data/
66+
redis_data/
67+
68+
# Docker
69+
**/.docker
70+
71+
# Certs
72+
**/certs/*.crt
73+
**/certs/*.key
74+
75+
.env.snak-bff
76+
.env.snak-frontend

Makefile

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
ENV_FILE=keycloak/.env.keycloak
2+
REALM_TEMPLATE=keycloak/realm-template.json
3+
REALM_OUTPUT=keycloak/realm.json
4+
5+
all: certs realms up
6+
7+
certs:
8+
@cd keycloak/traefik/certs && \
9+
./certs.sh
10+
@printf "%b\n" "→ Ensuring hosts entries"
11+
@grep -q "mysnakagent.com" /etc/hosts || \
12+
echo "127.0.0.1 mysnakagent.com auth.mysnakagent.com" | sudo tee -a /etc/hosts >/dev/null
13+
@printf "%b\n" "✔ Hosts updated"
14+
@printf "%b\n" "→ /etc/hosts content:"
15+
@cat /etc/hosts
16+
17+
up:
18+
@printf "%b\n" "$(_BLUE)→ Starting snak + keycloak stack$(_NO)"
19+
@docker compose up -d
20+
@printf "%b\n" "$(_GREEN)✔ Snak + Keycloak running$(_NO)"
21+
22+
realms:
23+
@printf "%b\n" "$(_STARLIGHT_BLUE)→ Generating realm.json from template$(_NO)"
24+
@export $$(grep -v '^#' $(ENV_FILE) | xargs) && \
25+
envsubst < $(REALM_TEMPLATE) > $(REALM_OUTPUT)
26+
@printf "%b\n" "$(_GREEN)✔ Realm file generated: $(REALM_OUTPUT)$(_NO)"
27+
28+
down:
29+
@printf "%b\n" "$(_STARLIGHT_BLUE)→ Stopping all stacks$(_NO)"
30+
@docker compose down
31+
@printf "%b\n" "$(_GREEN)✔ All stacks stopped$(_NO)"
32+
33+
clean:
34+
@printf "%b\n" "$(_STARLIGHT_BLUE)→ Cleaning all (stacks + realm.json)$(_NO)"
35+
@docker compose down -v
36+
@docker volume prune -af
37+
@docker system prune -af
38+
rm -f $(REALM_OUTPUT)
39+
rm -f keycloak/traefik/certs/mysnakagent.crt
40+
rm -f keycloak/traefik/certs/mysnakagent.key
41+
@printf "%b\n" "$(_GREEN)✔ Clean done$(_NO)"
42+
43+
.PHONY: all certs up realms down clean
44+
45+
# -------------- Syntaxing -------------- #
46+
_NO = \033[0m
47+
_BOLD = \033[1m
48+
_BLUE = \033[34m
49+
_CYAN = \033[36m
50+
_RED = \033[31m
51+
_PURPLE = \033[35m
52+
_PINK_ORANGE = \033[38;5;215m
53+
_GREY = \033[38;5;234m
54+
_STARLIGHT_BLUE = \033[38;5;158m
55+
_STARLIGHT_GREEN = \033[38;5;157m
56+
_DEEP_BLUE = \033[38;5;69m
57+
_YELLOW = \033[38;5;226m
58+
_ORANGE = \033[38;5;209m\e[1m
59+
# ------------------------------------- #

docker-compose.yml

Lines changed: 117 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
1+
volumes:
2+
redis_data:
3+
driver: local
4+
kc_postgres_data: {}
5+
6+
networks:
7+
snaknet:
8+
driver: bridge
9+
110
services:
11+
212
postgres:
313
image: pgvector/pgvector:pg17
414
container_name: 'postgresql'
5-
networks:
6-
- network
15+
networks: [snaknet]
716
ports:
817
- '5432:5432'
918
env_file:
1019
- .env
1120
volumes:
1221
- ./packages/database/initdb:/docker-entrypoint-initdb.d
1322
healthcheck:
14-
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
23+
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER}']
1524
interval: 10s
1625
timeout: 5s
1726
retries: 5
@@ -26,8 +35,7 @@ services:
2635
redis:
2736
image: redis:7-alpine
2837
container_name: 'snak_redis'
29-
networks:
30-
- network
38+
networks: [snaknet]
3139
ports:
3240
- '127.0.0.1:6379:6379'
3341
volumes:
@@ -42,13 +50,12 @@ services:
4250
retries: 5
4351
restart: unless-stopped
4452

45-
server:
53+
snak-api:
4654
build:
4755
context: .
4856
dockerfile: packages/server/Dockerfile
49-
container_name: 'snak_server'
50-
networks:
51-
- network
57+
container_name: 'snak-api'
58+
networks: [snaknet]
5259
ports:
5360
- '3002:3002'
5461
env_file:
@@ -60,10 +67,105 @@ services:
6067
condition: service_healthy
6168
restart: on-failure
6269

63-
volumes:
64-
redis_data:
65-
driver: local
70+
traefik:
71+
image: traefik:v3.1
72+
container_name: traefik
73+
restart: always
74+
command:
75+
- --entrypoints.websecure.address=:443
76+
- --providers.file.directory=/etc/traefik/dynamic
77+
- --api.dashboard=true
78+
- --log.level="DEBUG"
79+
ports:
80+
- "443:443"
81+
- "8081:8080" # dashboard
82+
volumes:
83+
- ./keycloak/traefik/dynamic.yml:/etc/traefik/dynamic/dynamic.yml:ro
84+
- ./keycloak/traefik/certs:/certs:ro
85+
networks: [snaknet]
86+
87+
kc_postgres:
88+
image: postgres:15
89+
container_name: kc_postgres
90+
restart: always
91+
env_file:
92+
- keycloak/.env.keycloak
93+
healthcheck:
94+
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
95+
interval: 5s
96+
timeout: 3s
97+
retries: 30
98+
volumes:
99+
- kc_postgres_data:/var/lib/postgresql/data
100+
networks: [snaknet]
101+
102+
keycloak:
103+
image: quay.io/keycloak/keycloak:26.0.2
104+
container_name: keycloak
105+
command: ["start", "--import-realm"]
106+
restart: always
107+
depends_on:
108+
kc_postgres:
109+
condition: service_healthy
110+
volumes:
111+
- ./keycloak/realm.json:/opt/keycloak/data/import/realm.json:ro
112+
env_file:
113+
- keycloak/.env.keycloak
114+
networks: [snaknet]
115+
ports:
116+
- "8080:8080"
117+
- "9000:9000"
118+
119+
oauth2-proxy:
120+
image: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
121+
container_name: oauth2_proxy
122+
restart: always
123+
depends_on:
124+
- keycloak
125+
env_file:
126+
- keycloak/.env.keycloak
127+
networks: [snaknet]
128+
ports:
129+
- "4180:4180"
130+
- "44180:44180"
131+
132+
# snak-frontend:
133+
# build:
134+
# context: ../snak-app/frontend
135+
# dockerfile: Dockerfile
136+
# container_name: 'snak-frontend'
137+
# env_file:
138+
# - ../snak-app/frontend/.env
139+
# networks: [snaknet]
140+
# ports:
141+
# - '3000:3000'
142+
143+
# snak-bff:
144+
# build:
145+
# context: ../snak-app/backend
146+
# dockerfile: Dockerfile
147+
# container_name: 'snak-bff'
148+
# env_file:
149+
# - ../snak-app/backend/.env
150+
# networks: [snaknet]
151+
# ports:
152+
# - '3001:3001'
153+
154+
snak-frontend:
155+
image: ghcr.io/kasarlabs/snak-app/snak-frontend:latest
156+
container_name: 'snak-frontend'
157+
env_file:
158+
- .env.snak-frontend
159+
networks: [snaknet]
160+
ports:
161+
- '3000:3000'
162+
163+
snak-bff:
164+
image: ghcr.io/kasarlabs/snak-app/snak-bff:latest
165+
container_name: 'snak-bff'
166+
env_file:
167+
- .env.snak-bff
168+
networks: [snaknet]
169+
ports:
170+
- '3001:3001'
66171

67-
networks:
68-
network:
69-
driver: bridge

0 commit comments

Comments
 (0)