Options de déploiement
Ce guide couvre différentes stratégies de déploiement pour AnonDocs, des configurations simples sur un seul serveur aux déploiements de production évolutifs.
Méthodes de déploiement
Docker Compose (Recommandé pour les déploiements petits à moyens)
Idéal pour : Déploiements sur serveur unique, gestion facile, configuration rapide
Configuration de base
# Cloner le dépôt
git clone https://github.com/AI-SmartTalk/AnonDocs.git
cd AnonDocs
# Configurer l'environnement
cp .env.example .env
nano .env
# Démarrer les services
docker-compose up -d
Docker Compose en production
Utilisez docker-compose.prod.yml pour la production :
docker-compose -f docker-compose.prod.yml up -d
Cela inclut :
- Politiques de redémarrage appropriées
- Vérifications de l'état
- Limites de ressources
- Configuration de journalisation
Docker Compose avec Ollama
version: '3.8'
services:
ollama:
image: ollama/ollama:latest
volumes:
- ollama_data:/root/.ollama
ports:
- "11434:11434"
anondocs:
build: .
ports:
- "3000:3000"
environment:
- DEFAULT_LLM_PROVIDER=ollama
- OLLAMA_BASE_URL=http://ollama:11434
- OLLAMA_MODEL=mistral-nemo
depends_on:
- ollama
restart: unless-stopped
volumes:
ollama_data:
Déploiement Kubernetes
Idéal pour : Déploiements à grande échelle, haute disponibilité, infrastructure cloud-native
Prérequis
- Cluster Kubernetes (1.20+)
- kubectl configuré
- Classe de stockage pour volumes persistants
Déployer Ollama
apiVersion: apps/v1
kind: Deployment
metadata:
name: ollama
spec:
replicas: 1
selector:
matchLabels:
app: ollama
template:
metadata:
labels:
app: ollama
spec:
containers:
- name: ollama
image: ollama/ollama:latest
ports:
- containerPort: 11434
volumeMounts:
- name: ollama-data
mountPath: /root/.ollama
volumes:
- name: ollama-data
persistentVolumeClaim:
claimName: ollama-pvc
---
apiVersion: v1
kind: Service
metadata:
name: ollama
spec:
selector:
app: ollama
ports:
- port: 11434
targetPort: 11434
Déployer AnonDocs
apiVersion: apps/v1
kind: Deployment
metadata:
name: anondocs
spec:
replicas: 3
selector:
matchLabels:
app: anondocs
template:
metadata:
labels:
app: anondocs
spec:
containers:
- name: anondocs
image: your-registry/anondocs:latest
ports:
- containerPort: 3000
env:
- name: PORT
value: "3000"
- name: DEFAULT_LLM_PROVIDER
value: "ollama"
- name: OLLAMA_BASE_URL
value: "http://ollama:11434"
- name: OLLAMA_MODEL
value: "mistral-nemo"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2000m"
---
apiVersion: v1
kind: Service
metadata:
name: anondocs
spec:
type: LoadBalancer
selector:
app: anondocs
ports:
- port: 80
targetPort: 3000
Appliquer les manifestes Kubernetes
Des exemples de manifestes sont disponibles dans le répertoire k8s/ :
kubectl apply -f k8s/
Déploiements sur plateformes cloud
AWS ECS / Fargate
{
"family": "anondocs",
"containerDefinitions": [{
"name": "anondocs",
"image": "your-account.dkr.ecr.region.amazonaws.com/anondocs:latest",
"portMappings": [{
"containerPort": 3000,
"protocol": "tcp"
}],
"environment": [
{"name": "PORT", "value": "3000"},
{"name": "DEFAULT_LLM_PROVIDER", "value": "ollama"},
{"name": "OLLAMA_BASE_URL", "value": "http://ollama:11434"}
],
"memory": 2048,
"cpu": 1024
}]
}
Google Cloud Run
# Construire et déployer
gcloud builds submit --tag gcr.io/PROJECT_ID/anondocs
gcloud run deploy anondocs \
--image gcr.io/PROJECT_ID/anondocs \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars DEFAULT_LLM_PROVIDER=ollama
Azure Container Instances
az container create \
--resource-group myResourceGroup \
--name anondocs \
--image your-registry.azurecr.io/anondocs:latest \
--dns-name-label anondocs \
--ports 3000 \
--environment-variables \
PORT=3000 \
DEFAULT_LLM_PROVIDER=ollama
Configuration du proxy inverse
Configuration Nginx
server {
listen 80;
server_name anondocs.example.com;
# Limitation de débit
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location / {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
# Délai d'expiration pour les requêtes longues
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
}
Configuration Caddy
anondocs.example.com {
reverse_proxy localhost:3000 {
transport http {
read_timeout 300s
}
}
# Limitation de débit
rate_limit {
zone api_limit {
key {remote_host}
events 10
window 1m
}
}
}
Service Systemd (Linux)
Pour un déploiement direct Node.js sur Linux :
[Unit]
Description=AnonDocs API Server
After=network.target
[Service]
Type=simple
User=anondocs
WorkingDirectory=/opt/anondocs
Environment=NODE_ENV=production
EnvironmentFile=/opt/anondocs/.env
ExecStart=/usr/bin/node /opt/anondocs/dist/index.js
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Installer et activer :
sudo cp anondocs.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable anondocs
sudo systemctl start anondocs
Stratégies de mise à l'échelle
Mise à l'échelle horizontale
Déployez plusieurs instances AnonDocs derrière un équilibreur de charge :
Équilibreur de charge
├── Instance AnonDocs 1
├── Instance AnonDocs 2
└── Instance AnonDocs 3
└── Service LLM partagé (Ollama/vLLM)
Mise à l'échelle verticale
Augmentez les ressources pour les déploiements sur instance unique :
- CPU: Plus de cœurs pour le traitement parallèle
- RAM: Plus de mémoire pour des blocs plus grands et le traitement parallèle
- GPU: Accélérez l'inférence LLM avec prise en charge CUDA
Mise à l'échelle du fournisseur LLM
Service LLM partagé
Exécutez une seule instance LLM et connectez plusieurs instances AnonDocs :
# Plusieurs instances AnonDocs
services:
anondocs-1:
environment:
- OLLAMA_BASE_URL=http://ollama:11434
anondocs-2:
environment:
- OLLAMA_BASE_URL=http://ollama:11434
ollama:
# Service LLM partagé
Vérifications de l'état et surveillance
Point de terminaison de vérification de l'état
curl http://localhost:3000/health
Sonde de vivacité Kubernetes
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 30
periodSeconds: 10
Intégration de surveillance
- Prometheus: Exposer un point de terminaison de métriques
- Grafana: Visualiser les métriques et les performances
- Journalisation: Journalisation centralisée avec pile ELK ou similaire
Prochaines étapes
- 🔒 Considérations de production - Sécurité, sauvegardes et bonnes pratiques