Ensemble microservices complet (Gateway, RAG, Documents, Users) + frontend Angular pour interroger un LLM local (Ollama), exécuter du RAG avec Qdrant, gérer des documents et des utilisateurs. Ciblé MacBook Pro M1 (ARM64), full offline.
- Java 25 / Spring Boot 4.0.0, Spring Security JWT, Spring Cloud Gateway
- RAG: Ollama (llama3/mistral/qwen), Qdrant vector DB
- Data: PostgreSQL (documents), JPA + MapStruct
- Frontend: Angular 18, Material-ready, JWT interceptor
- Tests: Testcontainers (PostgreSQL) prêts dans le POM
- Orchestration: Docker Compose (profils
dev/prod/gpu), secrets Docker, volumes, réseaux privés
frontend/Angular 18 (Chat, Documents, Profil) + Dockerfile (Nginx)backend/pom.xmlparent multi-modulesbackend/gateway/BFF Spring Cloud Gateway (JWT propagation, CORS)backend/rag-service/pipeline RAG (placeholder streaming, hooks Ollama/Qdrant)backend/document-service/gestion docs PostgreSQL + MapStructbackend/user-service/auth in-memory + issuance JWTbackend/*/entrypoint.shcharge le secret JWT depuis Docker secretbackend/secrets/jwt_secret.exampleexemple de secret
- Docker Desktop (BuildKit activé) + ~12GB RAM pour modèles
- Ollama installé (local) si usage hors Docker, sinon conteneur
ollama/ollamaARM64 - JDK 25 + Maven 3.9 si build hors Docker
- Node 20 si build frontend hors Docker
# 1) secret JWT
cp docker/secrets/jwt_secret.example docker/secrets/jwt_secret
# 2) build & run (profil dev)
DOCKER_BUILDKIT=1 docker compose --profile dev up --build
# Frontend : http://localhost:4200
# Gateway : http://localhost:8080
# Qdrant : http://localhost:6333 (UI)
# Ollama : http://localhost:11434dev: tout sauf GPUprod: idem sans ports DB exposés (adapter compose selon besoin)gpu: activeollama/rag-servicepour usage GPU si dispo
admin/admin123(roles ADMIN,USER)user/user123(role USER)
- Auth:
POST /api/auth/login->{ token, username } - Docs:
GET /api/documents,POST /api/documents {name,description} - RAG:
POST /api/rag/answer {query}(renvoieRagResponse), streaming SSE/api/rag/query
mvn -pl gateway,rag-service,document-service,user-service -DskipTests package
cd frontend && npm install && npm run build- Config Ollama:
rag-service/src/main/resources/application.yml(OLLAMA_BASE_URL,OLLAMA_MODEL) - Config Qdrant:
QDRANT_URL, collectionknowledge-base - Implémentation actuelle du RAG est un placeholder ; brancher votre pipeline (Spring AI ou client Qdrant) dans
rag-service/src/main/java/com/ai/knowledge/rag/service/RagService.java.
- Hexa: séparer API/service/domain (ex:
document-service) - OpenAPI UIs exposées via springdoc (
/swagger-ui.html) - Logs JSON à ajouter via Logback JSON si besoin
- Tests d’intégration: ajouter des
@Testcontainerspour PostgreSQL/Qdrant
docker compose down -vflowchart LR
user((Utilisateur))
subgraph Infra
postgres[(PostgreSQL)]
qdrant[(Qdrant)]
ollama[(Ollama)]
end
gateway -->|REST/JWT| user-service
gateway -->|REST| document-service
gateway -->|REST| rag-service
user --> frontend
frontend-->|Proxy /api| gateway
document-service --> postgres
rag-service --> qdrant
rag-service --> ollama
classDef svc fill:#0f172a,stroke:#1f2937,stroke-width:1px,color:#f8fafc;
class frontend,gateway,rag-service,document-service,user-service svc;
frontend{{Frontend Nginx/Angular proxy /api}}
gateway{{Gateway}}
rag-service{{RAG Service}}
document-service{{Document Service}}
user-service{{User Service}}
- Remplacer le secret JWT et durée (
user-service->JwtService) - Ajouter persistance utilisateurs + rôles en DB
- Ajout upload binaire + pipeline chunking/embedding dans
document-service - Ajouter vérification GPU à
docker-compose.yml(devices pour ollama)
BuildKit est le moteur de build moderne de Docker. Il parallélise les étapes, met en cache plus finement (y compris sur plusieurs architectures), supporte les secrets et mounts temporaires pendant le build, et produit des images plus rapidement et de façon reproductible par rapport à l’ancien backend docker build. On l’active via DOCKER_BUILDKIT=1 ou dans la config Docker.