# Docker Configuration Guide

## Table des matières
1. [Configuration des Providers IA](#configuration-des-providers-ia)
2. [Configuration du MCP Server](#configuration-du-mcp-server)
3. [Commandes Docker utiles](#commandes-docker-utiles)

---

## Configuration des Providers IA

Le fichier `.env.docker` n'est PAS versionné par Git (.gitignore). Vous devez le créer manuellement sur votre serveur.

### Étape 1: Créer le fichier `.env.docker`

Sur votre serveur Proxmox:

```bash
cd /path/to/Keep
cp .env.docker.example .env.docker
nano .env.docker
```

### Étape 2: Configurer selon votre setup

#### Option A: Ollama dans Docker (service Docker)

```bash
NEXTAUTH_URL="http://192.168.1.190:3000"
AI_PROVIDER=ollama
OLLAMA_BASE_URL="http://ollama:11434"
OLLAMA_MODEL="granite4:latest"
```

**Important:** Utilisez `ollama:11434` (nom du service Docker) PAS `localhost:11434`

#### Option B: OpenAI (Cloud)

```bash
NEXTAUTH_URL="http://192.168.1.190:3000"
AI_PROVIDER=openai
OPENAI_API_KEY="sk-votre-cle-ici"
```

Puis dans l'interface admin:
1. Configurez Tags Provider → OpenAI
2. Configurez Embeddings Provider → OpenAI
3. Entrez votre clé API

#### Option C: Ollama sur l'hôte (hors Docker)

```bash
NEXTAUTH_URL="http://192.168.1.190:3000"
AI_PROVIDER=ollama
OLLAMA_BASE_URL="http://192.168.1.190:11434"
OLLAMA_MODEL="granite4:latest"
```

Utilisez l'IP de votre serveur PAS `localhost`

### Étape 3: Rebuild et redémarrer

```bash
docker compose down
docker compose build --no-cache keep-notes
docker compose up -d
```

### Étape 4: Vérifier dans l'interface Admin

1. Allez sur http://192.168.1.190:3000/admin/settings
2. Section "AI Settings"
3. Vous pouvez maintenant changer le provider pour Tags et Embeddings indépendamment

### Problèmes fréquents

**Erreur: `ECONNREFUSED 127.0.0.1:11434`**
- Problème: Le code essaie d'utiliser `localhost` au lieu du service Docker
- Solution: Assurez-vous que `.env.docker` existe avec `OLLAMA_BASE_URL="http://ollama:11434"`

**Le provider ne change pas dans l'admin**
- Sauvegardez les modifications dans l'admin
- Rafraîchissez la page (F5)
- Vérifiez "Current value" affichée sous le dropdown

**Seul la génération de titres fonctionne**
- Vérifiez que le bon provider est sélectionné pour Tags ET Embeddings
- Ce sont 2 providers séparés dans l'interface admin

---

## Configuration du MCP Server

Le MCP Server supporte deux modes de transport:

### Mode stdio (défaut) - Pour Claude Desktop, Cline, etc.

Communication via stdin/stdout, idéal pour les clients locaux.

```bash
# .env.docker
MCP_MODE="stdio"
```

### Mode SSE (HTTP) - Pour N8N distant, API HTTP

Communication via HTTP Server-Sent Events, accessible sur le réseau.

```bash
# .env.docker
MCP_MODE="sse"
MCP_PORT="3001"
```

Le serveur MCP sera accessible sur `http://localhost:3001` (ou `http://mcp-server:3001` depuis les autres services Docker).

### Endpoints SSE disponibles

- `GET /` - Health check
- `GET /sse` - Connexion SSE
- `POST /message` - Envoi de messages
- `GET /sessions` - Liste des sessions actives

### Utilisation avec N8N

1. Configurez le MCP en mode SSE: `MCP_MODE="sse"`
2. Redémarrez les services: `docker compose restart mcp-server`
3. Dans N8N, configurez le MCP avec l'URL: `http://memento-mcp:3001/sse`

### Utilisation avec Claude Desktop (stdio)

1. Gardez le mode stdio par défaut: `MCP_MODE="stdio"`
2. Configurez Claude Desktop avec:
   ```json
   {
     "mcpServers": {
       "memento": {
         "command": "docker",
         "args": ["exec", "-i", "memento-mcp", "node", "index.js"]
       }
     }
   }
   ```

---

## Commandes Docker utiles

### Démarrage complet
```bash
docker compose up -d
```

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

### Rebuild complet
```bash
docker compose down
docker compose build --no-cache
docker compose up -d
```

### Voir les logs
```bash
# Tous les services
docker compose logs -f

# Service spécifique
docker compose logs -f keep-notes
docker compose logs -f mcp-server
```

### Vérifier l'état des services
```bash
docker compose ps
docker compose top
```

### Accéder à un conteneur
```bash
docker compose exec keep-notes sh
docker compose exec mcp-server sh
```
