Aller au contenu principal

Déploiement rapide

Cette page vous permet d'utiliser Docker Compose pour tirer en 5 minutes une pile complète d'Aivory : PostgreSQL, Redis, Qdrant, code intégré bac à sable, et un SPA front-end de serveur simultané. /api Derrière le app Containers (les deux provenant de la même source, sans nom de domaine ni configuration CORS).

L’ensemble du stack est décrit par un fichier compose qui comprend les services suivants :

serviceMiroirRôle
postgrespostgres:16-alpineStockage relationnel : utilisateur, conversation, base de connaissances, usage, etc.
redisredis:7-alpineCache, compteur de flux limité, pub/sub de sortie de flux inter-processeurs
qdrantqdrant/qdrant:v1.12.4Recherche de RAG
sandboxghcr.io/hjxwz123/aivory-sandbox-sidecarExécution du code intégré bac à sable, accessible uniquement en interne
appghcr.io/hjxwz123/aivory-appUn seul conteneur pour le serveur SPA et /api
Vous ne voulez pas parcourir l’ensemble du parc ?

Le backend d'Aivory est automatiquement sélectionné en fonction des variables de l'environnement : SQLite intégré sans PostgreSQL, cache interne sans Redis et retour RAG intégré sans Qdrant. Modèle SQLite Cette page décrit les déploiements de production complets recommandés.

Exigences préalables

ProjetsRequête
Docker EngineIl est installé et fonctionne normalement (docker info Pas d’erreur)
Docker Composev2(docker compose Le livre, pas l’ancienne version. docker-compose)
Spécifications de la machine2 CPU de base + 4 GB de mémoire
PorteL’hébergeur 80 ports libres (modifiable, voir ci-dessous)
Le disqueLes bases de données, les vecteurs et les fichiers de téléchargement sont permanents sur la machine, réservés en fonction de l'utilisation
Le bac à sable nécessite un socket Docker

Code intégré bac à sable par pendu /var/run/docker.sock Les conteneurs isolés sont dérivés de chaque session sur l'hôte, de sorte que l'hôte doit pouvoir exécuter directement Docker (pas pour les plates-formes de conteneurs hébergés sans processus de conservation de Docker). app de visite.

Étape 1 : Obtenir le code

git clone https://github.com/hjxwz123/Aivory.git
cd Aivory/deploy

Tous les documents relatifs au déploiement sont deploy/ Dans le catalogue : docker-compose.prod.yml.env.example

Étape 2 : Créer et éditer .env

cp .env.example .env

.env 中** Il faut modifier ** Il n'y a que trois paramètres, et tous les autres peuvent être conservés par défaut. Les trois paramètres conservés peuvent entraîner une défaillance de démarrage ou des problèmes de sécurité graves:

# 生成三个强随机值
openssl rand -hex 24 # 用作 POSTGRES_PASSWORD
openssl rand -hex 24 # 用作 REDIS_PASSWORD
openssl rand -hex 32 # 用作 JWT_SECRET
VariableRequêteExpliquer
POSTGRES_PASSWORDobligatoirePassword PostgreSQL. compose refuse directement le démarrage lorsqu'il n'est pas configuré
REDIS_PASSWORDobligatoireParole Redis. compose refuse directement le démarrage lorsqu'il n'est pas configuré
JWT_SECRETLa longueur doit être d'au moins 32 caractèresÉmettre des clés pour les jetons de connexion. Dans un environnement de production, Aivory détecte des clés de positionnement ou trop courtes ** Refus de démarrer **
JWT_SECRET Une fois qu’une fuite a été communiquée, tous les comptes ont été transférés

Veuillez utiliser openssl rand -hex 32 Générer, ne pas utiliser de chaînes de caractères prévisibles. Attention en même temps: remplacer JWT_SECRET Toutes les sessions enregistrées seront annulées.

La clé API du fournisseur modèle (Anthropic / OpenAI / Gemini, etc.)** n'est pas disponible .env Dans la configuration**, ils sont présents dans le tableau canal de la base de données, ajoutés dans la console d'administration après le déploiement, voir Première mise en service

Étape 3 : Démarrer

La première méthode consiste à extraire un miroir pré-construit (recommandé à partir du Registre des conteneurs de GitHub):

docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up -d

Méthode 2, localement construit à partir du code source (lorsque le code a été modifié, ou lorsque l'image réfléchie officielle ne couvre pas votre architecture CPU):

docker compose -f docker-compose.prod.yml up -d --build
Le même fichier compose est pris en charge de deux manières

app Le service est indiqué en même temps. image:build:: Lorsque les miroirs de pré-construction sont présents localement, Compose privilégie les miroirs, sinon il retourne à la construction locale. Les schémas de base de données sont créés par une migration automatique lors du démarrage de l'application et ne nécessitent aucune exécution manuelle de SQL.

Étape 4 : Vérification

docker compose -f docker-compose.prod.yml ps

Cinq services sont attendus : postgresredisÊtre en healthy, qdrantappÊtre en running, sandbox La première fois que vous démarrez, vous devez d'abord tirer l'image du temps d'exécution de bac à sable, l'inspection de santé a réservé une fenêtre de démarrage de 120 secondes, vous pouvez attendre un peu healthy

Demander la première page. appÉcouter à l’intérieur du conteneur 8787 Le port, composé par défaut, est cartographié sur l'hôte. 80 Le Port :

curl -sI http://localhost

retourner HTTP/1.1 200 Le contenu de la page SPA est déployé avec succès si vous modifiez la cartographie des ports (par exemple, 8080:8787 Remplacer les ports dans la commande.

Qu’en est-il des 80 ports ?

Les ports ne sont pas modifiés par les variables environnementales. docker-compose.prod.ymlapp du service ports Le paragraphe, le "80:8787" Changer la gauche, par exemple "8080:8787"à droite, 8787 Surveillez les ports dans le récipient, ne changez pas.

Étape 5 : Ouvrir le site et accéder à la configuration initiale

Visite du navigateur http://<你的服务器 IP 或域名> Le nouveau déploiement n'a pas d'utilisateur et la page passe automatiquement à configuration initiale : le premier compte que vous créez devient immédiatement administrateur. Première mise en service

Un ordre de dragon

Les blocs de commande suivants sont terminés à partir de zéro : cloner, générer des clés, écrire .env Tirez le miroir, démarrez. Convient à appliquer directement sur une nouvelle machine :

git clone https://github.com/hjxwz123/Aivory.git \
&& cd Aivory/deploy \
&& cp .env.example .env \
&& sed -i "s|^POSTGRES_PASSWORD=.*|POSTGRES_PASSWORD=$(openssl rand -hex 24)|" .env \
&& sed -i "s|^REDIS_PASSWORD=.*|REDIS_PASSWORD=$(openssl rand -hex 24)|" .env \
&& sed -i "s|^JWT_SECRET=.*|JWT_SECRET=$(openssl rand -hex 32)|" .env \
&& docker compose -f docker-compose.prod.yml pull \
&& docker compose -f docker-compose.prod.yml up -d \
&& docker compose -f docker-compose.prod.yml ps
Sauvegarder le .env

Les commandes ci-dessus sont écrites directement sur la clé aléatoire. deploy/.env Ce fichier est identique à la chaîne de clés que vous déployez, veuillez inclure une sauvegarde et ne pas soumettre à un entrepôt public.

.env.example Variables spécifiques

Appuyez ci-dessous .env.example Chaque variable ne doit pas être modifiée.

Source du miroir

VariableValeur par défautIl ne faut pas changer
IMAGE_OWNERhjxwz123Généralement inchangé.Vous ne modifiez votre compte que lorsque vous forcez votre entrepôt et publiez un miroir avec votre espace de dénomination GHCR
IMAGE_TAGlatestGénéralement inchangé. si vous voulez verrouiller la version, remplacez l'étiquette miroir correspondante, évitez latest Navigation

Réseaux et transnationaux

VariableValeur par défautIl ne faut pas changer
ALLOWED_ORIGINSNon configuré (état de la note)** Rester inexistant ** Le déploiement d’un seul conteneur en SPA /api Il n'y a pas d'interdomaine, il n'est nécessaire que lorsque vous décomposez le front-end vers un origine différent de l'API. voir nom de domaine et HTTPS Proxy inverse

Attention : pas WEB_PORTPUBLIC_ORIGIN Les ports hôte sont modifiés dans le fichier compose ; le nom de domaine n'a pas besoin d'être configuré, le conteneur est accessible par l'hôte, l'hôte peut être utilisé et plusieurs noms de domaine peuvent être indiqués simultanément.

PostgreSQL

VariableValeur par défautIl ne faut pas changer
POSTGRES_USERaivoryPas besoin de changer
POSTGRES_DBaivoryPas besoin de changer
POSTGRES_PASSWORDValeur de positionnement** Il faut changer **, openssl rand -hex 24

Redis

VariableValeur par défautIl ne faut pas changer
REDIS_PASSWORDValeur de positionnement** Il faut changer **, openssl rand -hex 24

Qdrant

VariableValeur par défautIl ne faut pas changer
QDRANT_URLhttp://qdrant:6333Aucune modification n'est nécessaire. La couverture n'est valable que lorsque le cluster Qdrant externe est
QDRANT_API_KEYIl n’y a pas de changement pendant le temps libre. qdrant Services et app Partagez la même clé interne intégrée et ouvrez la boîte; Qdrant ne publie pas de port d'hôte, il n'y a que le réseau interne. openssl rand -hex 24 Couverture

certifié

VariableValeur par défautIl ne faut pas changer
JWT_SECRETValeur de positionnement** Il faut changer **, openssl rand -hex 32 au moins 32 caractères, sinon l'environnement de production refusera de démarrer

Catalogue et sauvegarde des données

VariableValeur par défautIl ne faut pas changer
DATA_DIR./dataEn fonction de la planification du disque. chemin de l'hôte, le lien est accroché au conteneur /app/data l’utilisateur pour stocker les fichiers et les produits, ** Il faut inclure la sauvegarde **
BACKUP_DIR/app/data/backupsAucune modification n'est nécessaire.Path in-container, console d'administration généré de manière asynchrone pour la migration complète du stockage ZIP, correspondant à l'hôte DATA_DIR/backups
MAX_BACKUP_BYTES21474836480(20 GiB)Généralement inchangé console d'administration ** Introduction ** La taille maximale de la sauvegarde, la quantité totale de paquets contenant des données vectorielles peut être grande, le dépassement du délai peut être augmenté.

Les données de base de données, Redis et Qdrant sont respectivement nommées dans le volume pgdataredisdataqdrantdata Voir stratégie de sauvegarde. Sauvegarde et migration

Modèle de démonstration

VariableValeur par défautIl ne faut pas changer
ENABLE_MOCK_PROVIDERfalsePossibilité de choisir. true Un canal de démonstration intégré est injecté, et aucune clé API réelle n'est nécessaire pour lancer la conversation à l'extrémité, ce qui permet de vérifier le déploiement avant d'ajouter un canal réel à la console d'administration. false

Recherche en ligne (facultatif)

VariableValeur par défautIl ne faut pas changer
SEARCH_PROVIDEROptionnel. Type de recherche à l'arrière: serper / brave Besoins SEARCH_API_KEY; searxng Besoins SEARCH_BASE_URL Pas besoin de clé
SEARCH_API_KEYSEARCH_PROVIDER déterminé
SEARCH_BASE_URLsearxng Les besoins en arrière-plan

Ces trois fonctionnalités peuvent également être déployées et configurées en console d'administration en ligne. .env Il n'y a que le début de la période, on peut tout laisser vide.

modèle d'embedding (facultatif, base de connaissances en lien avec la qualité)

VariableValeur par défautIl ne faut pas changer
EMBEDDING_BASE_URLConfiguration de production recommandée. Utilisation d'un embedder local 256D intégré, disponible, mais la qualité de récupération n'est pas adaptée à la production; référence à tout format OpenAI /v1/embeddings Le point final.
EMBEDDING_API_KEYEn fonction du service intégré.
EMBEDDING_MODELtext-embedding-3-smallModifier selon vos services.
EMBEDDING_DIM1536** Il doit être conforme aux dimensions de sortie du modèle d'embedding ** Qdrant utilise une collection indépendante par dimension, et la non-conciliation des dimensions renvoie l'embedder local 256D.

Analyse de documents MinerU (facultatif)

VariableValeur par défautIl ne faut pas changer
MINERU_API_URLhttps://mineru.netGénéralement inchangé
MINERU_API_KEYOptionnel. résolution OCR pour les fichiers PDF numérisés/images; ces fichiers peuvent toujours être téléchargés dans la base de connaissances lorsqu'ils ne sont pas configurés, mais ne contiennent qu'une seule ligne de texte.

Code bac à sable (l'état des notes, généralement rien)

Le service bac à sable démarre avec ce stack. app Lorsque vous y accédez via un réseau privé, les deux parties partagent la même clé par défaut intégrée pour l'ouverture de la boîte. Annuler les commentaires uniquement lorsque la limite par défaut est nécessaire:

VariableValeur par défautExpliquer
SANDBOX_API_KEYValeur partagée intégréePour configurer une clé personnalisée, appsandbox Lire en même temps.
SANDBOX_MEMORY2gLimite de mémoire pour chaque conteneur de session
SANDBOX_CPUS1Quota de CPU pour chaque conteneur de session
SANDBOX_MAX_SESSIONS16Limiter le nombre de sessions de bac à sable
SANDBOX_WORKSPACE_SIZE512mChaque séance /workspace taille
SANDBOX_NETWORKnonebac à sable code par défaut ** Pas de réseau ** Il faut changer quand on est connecté. bridge

bac à sable Architecture et frontières de sécuritéDéploiement du code bac à sable Restez dans les paramètres de la console d'administration. sandbox_base_url / sandbox_api_key Les deux champs sont vides, de sorte que le bac à sable intégré ne prendra effet.

Prochaine étape