# Mise à jour Docker Compose - Résumé des changements

## Date: 3 Février 2026

### Analyse effectuée avec @sequential-thinking

## Problèmes identifiés

### 1. Port incohérent
- **Avant**: Dockerfile exposait 3000, mais index-sse.js utilisait 3001
- **Après**: Exposition du port 3001 cohérente

### 2. Chemin de base de données hardcodé
- **Avant**: index.js avait `file:D:/dev_new_pc/Keep/keep-notes/prisma/dev.db` (chemin Windows absolu)
- **Après**: Utilisation de la variable `DATABASE_URL` pointant vers `/app/db/dev.db`

### 3. Pas de mode de transport configurable
- **Avant**: MCP serveur toujours en mode stdio
- **Après**: Support des modes `stdio` (Claude Desktop) et `sse` (HTTP/N8N)

### 4. Healthcheck inadéquat
- **Avant**: Healthcheck générique Node.js
- **Après**: Healthcheck spécifique au mode (HTTP pour SSE, Node pour stdio)

### 5. Volumes mal configurés
- **Avant**: Chemins incohérents entre keep-notes et mcp-server
- **Après**: Volume partagé `db-data` monté correctement sur les deux services

## Fichiers mis à jour

### 1. docker-compose.yml
**Changements principaux:**
- ✅ Port 3001 exposé pour mcp-server
- ✅ Variables d'environnement `MCP_MODE` et `MCP_PORT` ajoutées
- ✅ `DATABASE_URL` configuré pour mcp-server
- ✅ Volume `db-data` cohérent entre services
- ✅ Healthcheck conditionnel selon le mode
- ✅ Dépendance `condition: service_healthy` pour keep-notes
- ✅ Profile `ollama` pour le service optionnel
- ✅ Limites de ressources configurées
- ✅ `NEXT_TELEMETRY_DISABLED=1` ajouté

### 2. .env.docker.example
**Nouvelles variables:**
```env
# MCP Server Configuration
MCP_MODE="stdio"  # ou "sse"
MCP_PORT="3001"

# AI Provider Configuration complète
AI_PROVIDER_TAGS=
AI_PROVIDER_EMBEDDING=
AI_MODEL_TAGS=
AI_MODEL_EMBEDDING=
```

### 3. mcp-server/Dockerfile
**Améliorations:**
- ✅ Installation de curl et wget pour les healthchecks
- ✅ Exposition du port 3001 (au lieu de 3000)
- ✅ Script de démarrage dynamique (`start.sh`) avec support MCP_MODE
- ✅ Healthcheck conditionnel (HTTP pour SSE, Node pour stdio)

### 4. DOCKER-SETUP.md
**Nouvelle documentation:**
- ✅ Table des matières ajoutée
- ✅ Section "Configuration du MCP Server" complète
- ✅ Documentation des deux modes (stdio vs SSE)
- ✅ Endpoints SSE documentés
- ✅ Guide d'utilisation avec N8N
- ✅ Guide d'utilisation avec Claude Desktop
- ✅ Commandes Docker utiles

## Configuration recommandée

### Pour Claude Desktop (local)
```env
# .env.docker
MCP_MODE="stdio"
NEXTAUTH_URL="http://localhost:3000"
```

### Pour N8N (remote)
```env
# .env.docker
MCP_MODE="sse"
MCP_PORT="3001"
NEXTAUTH_URL="http://192.168.1.190:3000"
AI_PROVIDER_TAGS=openai
AI_PROVIDER_EMBEDDING=openai
OPENAI_API_KEY="sk-..."
```

### Avec Ollama local
```bash
# Démarrer avec le profil ollama
docker compose --profile ollama up -d
```

## Commandes de déploiement

```bash
# 1. Copier et configurer l'environnement
cp .env.docker.example .env.docker
nano .env.docker  # Éditer avec vos valeurs

# 2. Rebuild complet (recommandé après mise à jour)
docker compose down
docker compose build --no-cache
docker compose up -d

# 3. Vérifier l'état
docker compose ps
docker compose logs -f

# 4. Avec Ollama (optionnel)
docker compose --profile ollama up -d
```

## Points de vigilance

1. **Base de données**: Le volume `db-data` est partagé entre keep-notes et mcp-server. Assurez-vous que les deux services utilisent le même fichier SQLite.

2. **MCP Mode**: Le mode par défaut est `stdio`. Passez à `sse` uniquement si vous utilisez N8N ou un client HTTP distant.

3. **Port 3001**: En mode SSE, le port 3001 doit être accessible. Configurez votre firewall si nécessaire.

4. **Ollama**: Le service Ollama utilise le profil `ollama` et n'est pas démarré par défaut. Utilisez `--profile ollama` pour l'activer.

## Tests recommandés

```bash
# Test healthcheck keep-notes
curl http://localhost:3000

# Test healthcheck MCP (mode SSE)
curl http://localhost:3001

# Test endpoint SSE
curl http://localhost:3001/sse

# Voir les logs
docker compose logs -f mcp-server
```

## Architecture mise à jour

```
┌─────────────────────────────────────────────────────┐
│                  Docker Network                      │
│              (memento-network)                       │
├─────────────────────────────────────────────────────┤
│                                                      │
│  ┌──────────────┐      ┌──────────────┐            │
│  │  keep-notes  │◄────►│  mcp-server  │            │
│  │   Port 3000  │      │   Port 3001  │            │
│  │   (Web App)  │      │  (MCP/SSE)   │            │
│  └──────────────┘      └──────────────┘            │
│         │                      │                     │
│         └──────────┬───────────┘                     │
│                    │                                 │
│              ┌─────┴─────┐                           │
│              │  db-data  │ (SQLite partagé)         │
│              └───────────┘                           │
│                                                      │
│  ┌──────────────┐ (optionnel avec --profile ollama)  │
│  │    ollama    │                                    │
│  │   Port 11434 │                                    │
│  └──────────────┘                                    │
│                                                      │
└─────────────────────────────────────────────────────┘
```

## Prochaines étapes suggérées

1. **Corriger le hardcoded path** dans `mcp-server/index.js` ligne 21 pour utiliser `DATABASE_URL`
2. **Tester les deux modes** (stdio et SSE)
3. **Configurer N8N** avec l'endpoint SSE si besoin
4. **Documenter les modèles Ollama** recommandés dans le README
