Aller au contenu principal

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

Proudly made byAI SmartTalkAI SmartTalk