Aller au contenu principal

Auto-Hébergement

AISCouncil est un fichier HTML unique et autonome. Vous pouvez l'héberger sur n'importe quel serveur de fichiers statiques, l'exécuter depuis une clé USB, ou même l'ouvrir directement depuis votre système de fichiers. Pas de backend, pas de base de données, pas de runtime — juste un fichier.

La Méthode la Plus Simple

Téléchargez index.html et ouvrez-le dans un navigateur :

# C'est tout. Ouvrez le fichier.
open index.html # macOS
xdg-open index.html # Linux
start index.html # Windows

L'application fonctionne immédiatement depuis le protocole file://. Toutes les fonctionnalités qui ne nécessitent pas HTTPS (tout sauf l'installation PWA et l'API presse-papiers) fonctionnent normalement.

astuce

Pour l'expérience complète incluant l'installation PWA et l'accès au presse-papiers, servez le fichier via HTTPS en utilisant n'importe quel serveur de fichiers statique.

Serveur de Fichiers Statique

Uploadez sur n'importe quel serveur web. Aucune configuration côté serveur nécessaire.

Python (test local rapide)

python3 -m http.server 8000
# Ouvrez http://localhost:8000

Caddy (HTTPS avec certificats automatiques)

caddy file-server --root /path/to/aiscouncil --listen :8080

Nginx

server {
listen 443 ssl;
server_name aiscouncil.example.com;

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

root /var/www/aiscouncil;
index index.html;

location / {
try_files $uri $uri/ /index.html;
}
}

Hébergement Cloud

L'application fonctionne sur n'importe quelle plateforme d'hébergement statique sans configuration :

PlateformeMéthode de Déploiement
Cloudflare PagesConnecter repo Git ou glisser-déposer
NetlifyConnecter repo Git ou glisser-déposer
VercelConnecter repo Git ou vercel deploy
GitHub PagesPousser vers la branche gh-pages
AWS S3 + CloudFrontUploader les fichiers sur S3, servir via CloudFront
Firebase Hostingfirebase deploy

Fichiers Recommandés à Déployer

Bien que seul index.html soit strictement requis, déployer ces fichiers supplémentaires active les fonctionnalités PWA :

votre-serveur/
index.html # L'application complète (requis)
sw.js # Service worker pour le support hors-ligne
manifest.webmanifest # Manifeste PWA (nom, icônes, thème)
icon.svg # Icône vectorielle
icon-192.png # Icône écran d'accueil Android
icon-512.png # Écran de démarrage / icône masquable
favicon.ico # Icône d'onglet navigateur

Ajouts optionnels :

  s/
index.html # Éditeur web (si vous voulez l'éditeur aussi)
registry/
models.json # Registre de modèles local (si vous voulez les données de modèles hors-ligne)
ads.json # Configuration des pubs (uniquement si vous utilisez le système de pub du niveau gratuit)

Déploiement Docker

Un déploiement Docker minimal utilisant Nginx :

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
COPY sw.js /usr/share/nginx/html/
COPY manifest.webmanifest /usr/share/nginx/html/
COPY icon.svg /usr/share/nginx/html/
COPY icon-192.png /usr/share/nginx/html/
COPY icon-512.png /usr/share/nginx/html/
COPY favicon.ico /usr/share/nginx/html/
EXPOSE 80

Construisez et exécutez :

docker build -t aiscouncil .
docker run -d -p 8080:80 aiscouncil
# Ouvrez http://localhost:8080

Pour HTTPS avec Docker, utilisez un reverse proxy comme Traefik ou Caddy devant le conteneur Nginx.

Ce Qui S'Exécute Localement

Tout. Le fichier HTML contient tout le CSS, JavaScript et code de module en ligne. Lorsqu'un utilisateur ouvre la page :

  • L'UI est rendue entièrement côté client
  • Les clés API sont stockées dans le navigateur de l'utilisateur (localStorage)
  • L'historique de chat et les configs de bot sont stockés dans le navigateur de l'utilisateur (IndexedDB)
  • Les appels API LLM vont directement du navigateur au fournisseur (Anthropic, OpenAI, xAI, etc.)
  • Aucune donnée ne passe par votre serveur

Votre serveur sert un fichier statique. C'est son seul travail.

Mode Invité

Lorsqu'hébergé sur un domaine personnalisé (pas aiscouncil.net), l'application fonctionne en mode invité :

  • Pas de connexion Google requise — la porte de connexion est ignorée
  • Toutes les fonctionnalités fonctionnent sans authentification
  • Les utilisateurs vont directement à l'interface de chat
  • Les paramètres, le stockage et toutes les fonctionnalités sont pleinement fonctionnels
info

Le mode invité s'active automatiquement lorsque l'application détecte qu'elle s'exécute sur localhost, un domaine .pages.dev, ou tout domaine autre que aiscouncil.net. Aucune configuration nécessaire.

Base API Personnalisée

Par défaut, l'application envoie les requêtes d'auth, facturation et suivi d'utilisation vers https://api.aiscouncil.net/v1. Pour les déploiements auto-hébergés, vous pouvez remplacer cela :

localStorage.setItem("ais-api-base", "https://your-api.example.com/v1");

C'est optionnel. Si vous n'utilisez pas les fonctionnalités de facturation/auth gérées, l'application fonctionne sans aucune base API — tous les appels LLM vont directement du navigateur au fournisseur.

Proxy Local (aiscouncil-serve)

Si vous voulez éviter d'exposer les clés API dans le navigateur (ex., dans un environnement de bureau partagé), vous pouvez exécuter le proxy local aiscouncil-serve :

ANTHROPIC_API_KEY=sk-ant-... \
OPENAI_API_KEY=sk-... \
XAI_API_KEY=xai-... \
./aiscouncil-serve --port 8741

Le proxy route les requêtes par préfixe de modèle vers le bon fournisseur :

Préfixe de ModèleFournisseurAuth
claude-*Anthropicen-tête x-api-key
gpt-*, o1*, o3*OpenAIBearer token
grok-*xAIBearer token
meta-llama/, deepseek/, qwen/, mistralai/, google/OpenRouterBearer token
Tout le resteOllama (localhost)Aucune

Le proxy supporte aussi l'en-tête X-Provider pour forcer un fournisseur spécifique quel que soit le préfixe de modèle.

Construire depuis les sources :

cd serve
../tools/zig/zig build -Doptimize=ReleaseSmall
# Binaire à : zig-out/bin/aiscouncil-serve (~2.3 Mo)

Déploiement Hors-Ligne

Pour les environnements cloisonnés (air-gapped) :

  1. Déployez les fichiers sur un serveur web interne
  2. À la première visite, le service worker met tout en cache
  3. Après la mise en cache, l'application fonctionne sans aucun accès réseau
  4. Les utilisateurs peuvent discuter avec Ollama ou tout LLM local s'exécutant sur le même réseau

Préchargez le registre de modèles en plaçant registry/models.json à côté de index.html. L'application vérifie une copie locale avant d'essayer de récupérer depuis GitHub.

Considérations CORS

Lors de l'utilisation de serveurs d'inférence locaux (Ollama, vLLM, etc.), le navigateur applique CORS (Cross-Origin Resource Sharing). Votre serveur d'inférence doit autoriser les requêtes depuis votre origine d'hébergement.

Ollama :

# Définir avant de démarrer Ollama
OLLAMA_ORIGINS=* ollama serve

vLLM :

vllm serve nom-modele --allowed-origins '*'

Général (tout serveur derrière Nginx) :

add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;
avertissement

Utiliser * pour Access-Control-Allow-Origin est acceptable pour le développement local mais devrait être restreint à votre origine spécifique dans les déploiements de production.

Construire Depuis les Sources

Pour modifier l'application et la reconstruire :

# Clonez le référentiel
git clone https://github.com/nicholasgasior/aiscouncil.net.git
cd aiscouncil.net

# Éditez les fichiers sources dans src/ (PAS index.html directement)
# L'application est divisée en ~35 fichiers sources qui sont concaténés

# Construisez le fichier de sortie unique
./build.sh

# Vérifiez que la construction correspond
./build.sh --check

Le processus de construction concatène tous les fichiers src/ dans l'ordre en un seul index.html. Pas de bundler, pas de transpileur, pas de npm — juste de la concaténation shell.

Éditeur Web

Pour héberger aussi l'éditeur web, incluez le répertoire s/ :

votre-serveur/
index.html # Plateforme de bots
s/
index.html # Éditeur web (aiscouncil.net/s/)

L'éditeur utilise le même codec de compression mais avec le préfixe de version A au lieu de B. C'est un fichier HTML autonome séparé avec son propre ensemble de fonctionnalités (édition WYSIWYG, support multi-format, algorithmes de compression).

Portabilité des Données

Les utilisateurs peuvent exporter toutes leurs données via Settings > Privacy > Export All Data. L'export est un fichier JSON contenant tous les profils de bots, historiques de chat et paramètres. Les clés API sont exclues des exports. L'export peut être importé dans n'importe quelle autre instance d'AISCouncil.

Cela signifie que les utilisateurs ne sont jamais verrouillés dans un déploiement spécifique. Ils peuvent se déplacer entre instances auto-hébergées, le site officiel, ou tout autre hébergeur à tout moment.