Une installation auto-hébergée fait tourner le moteur Ephemeral et le tableau de bord d'exécution sur un hôte que vous contrôlez, avec des workers dans des microVM de votre propre compte AWS et votre propre fournisseur de modèles. Vous recevez une image Docker et sa documentation ; l'image exporte tous les autres fichiers dont vous avez besoin. Elle nécessite une licence de déploiement délivrée par Ephemeral.
Ce que vous exploitez
| Composant | Emplacement |
|---|---|
| API du moteur et tableau de bord d'exécution | Conteneur app issu de ephemer.al/ephemeral/self-hosted sur votre hôte |
| PostgreSQL | Un conteneur sur le même hôte, accessible uniquement depuis l'application |
| Caddy | Sert le HTTPS sur les ports 80 et 443 et route /v1 vers le moteur |
| Workers | Des microVM AWS Lambda dans votre compte AWS, une par exécution, sans accès à Internet |
| Appels au modèle | Votre endpoint d'inférence compatible OpenAI |
| Validation de la licence | https://ephemer.al, au démarrage et au lancement des exécutions |
Le site client, les comptes et la facturation ne font pas partie d'une installation auto-hébergée, pas plus que le code source. Les utilisateurs se connectent au tableau de bord avec une clé API du moteur.
L'image contient le guide complet de l'opérateur. Les étapes ci-dessous en donnent un résumé ; suivez le guide pour les commandes exactes, les sorties attendues, les mises à niveau, les sauvegardes et le dépannage :
docker run --rm ephemer.al/ephemeral/self-hosted:VERSION setup docs > SELF-HOSTING.mdAvant de commencer
- Docker avec Docker Compose 2.24 ou plus récent, et AWS CLI v2 avec le plugin Session Manager.
- Un compte AWS dans une région disposant des microVM Lambda, et l'autorisation de créer une pile CloudFormation avec des rôles IAM.
- Un nom de domaine que vous pouvez faire pointer vers l'hôte.
- Un endpoint d'inférence compatible OpenAI et sa clé API.
- Un droit d'utilisation pour votre organisation. Ephemeral l'accorde après un accord ; voir licences de déploiement.
Installer
Enregistrer l'installation
Dans le portail client, ouvrez Déploiements et enregistrez cette installation avec un nom, par exemple
production-eu. Ephemeral crée son ID de machine et son jeton de licence. Choisissez Télécharger le fichier de licence pour conserver le jeton, l'ID de machine et l'ID de déploiement ; le jeton n'est affiché qu'une fois.Récupérer l'image
Connectez-vous au registre avec l'ID de déploiement comme nom d'utilisateur et le jeton de licence comme mot de passe, puis récupérez une version. Les numéros de version n'ont pas de v initial.
export EPHEMERAL_VERSION=0.1.0 read -rs LICENSE_TOKEN printf '%s' "$LICENSE_TOKEN" | docker login ephemer.al -u dep_YOUR_DEPLOYMENT_ID --password-stdin docker pull ephemer.al/ephemeral/self-hosted:$EPHEMERAL_VERSIONExporter les fichiers d'installation
mkdir -p ephemeral && cd ephemeral docker run --rm --user "$(id -u):$(id -g)" -v "$PWD:/out" \ ephemer.al/ephemeral/self-hosted:$EPHEMERAL_VERSION setup all /outFichier Rôle compose.yaml PostgreSQL, l'application et Caddy, figés sur cette version compose.evaluation. yaml Surcharge pour l'essayer sur un seul ordinateur, sans AWS CaddyfileRoutes d'entrée .env Configuration avec des secrets nouvellement générés. Un export ultérieur ne l'écrase jamais ephemeral-aws.yaml Modèle CloudFormation pour les ressources AWS ephemeral-worker-VERSION.zip Le worker compilé qu'AWS intègre à l'image de microVM SELF-HOSTING.md Le guide de l'opérateur Créer les ressources AWS
Importez le ZIP du worker dans un bucket S3 privé de votre compte, puis créez la pile. Elle crée un VPC avec un sous-réseau isolé pour les workers, un pare-feu DNS, l'image de microVM et le connecteur réseau, un bucket de stockage chiffré, le rôle IAM à privilèges minimaux de l'hôte et, par défaut, un hôte Amazon Linux
t4g.smallavec une Elastic IP et un volume de données chiffré. La construction de l'image du worker prend 15 à 30 minutes, et la pile crée des ressources facturables.aws s3 cp "ephemeral-worker-$EPHEMERAL_VERSION.zip" "s3://YOUR_ARTIFACT_BUCKET/" aws cloudformation create-stack --stack-name ephemeral \ --template-body file://ephemeral-aws.yaml --capabilities CAPABILITY_IAM \ --parameters ParameterKey=Domain,ParameterValue=ephemeral.example.com \ ParameterKey=WorkerArtifactBucket,ParameterValue=YOUR_ARTIFACT_BUCKET \ ParameterKey=WorkerArtifactKey,ParameterValue="ephemeral-worker-$EPHEMERAL_VERSION.zip" \ ParameterKey=HostImageId,ParameterValue=AL2023_ARM64_AMI aws cloudformation wait stack-create-complete --stack-name ephemeral aws cloudformation describe-stacks --stack-name ephemeral \ --query "Stacks[0].Outputs[?OutputKey=='EngineEnvironment'].OutputValue" --output text | tr ' ' '\n'La dernière commande affiche les paramètres AWS du moteur. Faites pointer l'enregistrement DNS A de votre domaine vers la sortie de pile
HostPublicIp.Configurer l'hôte
Connectez-vous avec
aws ssm start-session --targetet la sortie de pileHostInstanceId, puis répétez la connexion au registre et l'export dans/srv/ephemeral/install. Modifiez ces entrées dans.env:Paramètre Valeur EPHEMERAL_DOMAIN Votre nom d'hôte, par exemple ephemeral.example.com EPHEMERAL_LICENSE_ TOKEN Le jeton de la première étape EPHEMERAL_MACHINE_ ID L'ID de machine de la première étape, exactement tel qu'enregistré INFERENCE_BASE_ URL Votre endpoint compatible OpenAI INFERENCE_API_ KEY Sa clé API EPHEMERAL_DEFAULT_ MODEL Le modèle utilisé par les exécutions qui n'en désignent pas Paramètres AWS Les cinq lignes affichées par la pile : AWS_REGION,EPHEMERAL_S3_BUCKETet trois valeursEPHEMERAL_MICROVM_…L'export a généré la clé maître de chiffrement, la clé admin d'amorçage et le mot de passe de la base de données. Conservez une copie de
.envdans votre gestionnaire de secrets ; sans la clé maître, les identifiants stockés et les données d'exécution sont illisibles. Le profil d'instance de l'hôte fournit les identifiants AWS.Démarrer l'installation
Caddy obtient le certificat HTTPS. PostgreSQL et les API internes ne sont pas publiés.
docker compose pull docker compose up -dLe moteur valide la licence au démarrage et refuse de démarrer si elle est invalide ou si la concurrence configurée la dépasse.
Créer la première organisation
Une nouvelle installation n'a aucune clé API. Exécutez ceci une fois dans le répertoire d'installation, en remplaçant
my-organizationpar l'ID d'organisation de votre choix. La commande lit la clé d'amorçage à l'intérieur du conteneur : la clé reste ainsi absente de l'historique de votre shell.docker compose exec -T app node --input-type=module - <<'NODE' if (process.env.EPHEMERAL_MODE !== 'self-hosted') { throw new Error('Bootstrap requires EPHEMERAL_MODE=self-hosted'); } const adminKey = process.env.EPHEMERAL_ADMIN_KEY; if (!adminKey) throw new Error('EPHEMERAL_ADMIN_KEY is not configured'); const response = await fetch('http://127.0.0.1:8080/admin/organizations', { method: 'POST', headers: { Authorization: `Bearer ${adminKey}`, 'Content-Type': 'application/json', }, body: JSON.stringify({id: 'my-organization'}), }); const result = await response.json(); if (!response.ok) throw new Error(result.error || `Bootstrap failed (${response.status})`); console.log(JSON.stringify(result, null, 2)); NODELa réponse contient l'
idde l'organisation, lekey_idet lerolede la nouvelle clé de propriétaire, ainsi que lakeyelle-même, qui commence pareph_. Conservez la clé maintenant ; elle ne peut pas être récupérée plus tard. Relancer la commande pour une organisation qui a une clé active renvoie409.Se connecter
Ouvrez votre adresse HTTPS et saisissez la clé sous Clé API d'organisation. Créez d'autres clés member et admin sous Clés API. La clé admin d'amorçage du fichier de configuration ne sert qu'à créer des organisations ; elle ne peut ni se connecter ni appeler l'API.
Essayer sur un seul ordinateur
Sans AWS, ajoutez la surcharge d'évaluation. Les agents s'exécutent alors dans le conteneur applicatif avec le runner local, et le tableau de bord est servi en HTTP simple à l'adresse http://localhost:8000 uniquement. Une licence reste nécessaire ; enregistrez-y un déploiement distinct.
docker compose -f compose.yaml -f compose.evaluation.yaml up -dDifférences avec le service hébergé
| Comportement auto-hébergé | |
|---|---|
| Facturation | Pas de portefeuille ni de frais facturés par Ephemeral. max_cost_micros est validé mais ne limite pas les dépenses en modèles : fixez donc des limites auprès de votre fournisseur. |
| Modèles | Les exécutions peuvent désigner n'importe quel ID de modèle accepté par votre endpoint. Le catalogue ne liste que le modèle par défaut. |
| Clés API | Les clés commencent par eph_. Les clés admin gèrent les clés via /v1/keys et le tableau de bord. |
| Comptes | Il n'y a ni comptes utilisateurs, ni membres, ni invitations. L'accès se fait par clé API. |
| Concurrence | Deux exécutions à la fois par défaut. Définissez EPHEMERAL_CONCURRENCY de 1 à 32, dans la limite de votre licence. |
| Conservation | Les exécutions terminées sont conservées 30 jours. Définissez EPHEMERAL_RETENTION_DAYS pour modifier cette durée. |
| Rétention zéro des données | Les exécutions avec zero_data_retention ne gardent leurs événements et leur sortie non lue que dans des tables non journalisées, supprimées quelques minutes après l'exécution. Les sauvegardes doivent utiliser pg_dump --no-unlogged-table-data ; la sauvegarde quotidienne de l'hôte le fait. EPHEMERAL_ZDR_EVENT_WINDOW_SECONDS (300 par défaut) et EPHEMERAL_ZDR_OUTPUT_WINDOW_SECONDS (3600 par défaut) fixent la durée d'attente maximale. |
Mises à jour et sauvegardes
Pour mettre à niveau, importez le ZIP du worker de la nouvelle version et mettez à jour la pile avec sa clé. Ensuite, sur l'hôte, exportez les fichiers de la nouvelle version, définissez EPHEMERAL_VERSION et le nouveau EPHEMERAL_MICROVM_IMAGE_VERSION dans .env, puis exécutez docker compose up -d. Les exécutions en cours disposent de cinq minutes au maximum pour se terminer ; celles encore actives après ce délai sont marquées interrupted et ne sont pas relancées : les actions externes ne sont donc jamais répétées. Les migrations de base de données s'exécutent automatiquement.
Sauvegardez à la fois la base de données et la clé maître de chiffrement. Perdre la clé maître rend illisibles les identifiants de connexion et les données d'exécution stockés. L'hôte créé par la pile sauvegarde chaque jour la base de données dans son bucket S3.