Compose par projet
v0.0.1-alpha
Première version publique du Pier Agent — le démon que tu installes sur ton serveur pour le piloter à distance depuis le hub Pier. Voici tout ce qu'il sait faire.
#### Déploiement
- Compose par projet : l'agent maintient un seul
docker-compose.ymlpar projet sous<AppsDir>/<orgSlug>/<projectSlug>/. La commandedeploy-apprend la stack du projet et (re)lance uniquement les services de l'app ciblée (<appSlug>+ son<appSlug>-nginx) — les apps voisines du même projet ne sont jamais redémarrées.stop,restartetdelete-appciblent eux aussi les services de cette app dans le compose. - Build + push d'images :
build-imageconstruit l'image depuis le dépôt et la pousse vers le registre, avec une authentification fournie par le hub. - Étapes granulaires : pendant
build-imageetdeploy-app, l'agent émet des events de stage (build → push → load → start, chacunrunning/succeeded/failed) pour un suivi étape par étape côté hub. - Logs live : la sortie du build et du
docker compose upest streamée en temps réel au hub (même flux que l'attempt), au lieu de rester muette jusqu'à la fin. - Conf child-nginx : écrite dans
<projectDir>/nginx/<appSlug>.conf(là où le compose la monte) ; les variables d'environnement sont inlinées directement dans le compose (pas de.envséparé).
#### Robustesse / auto-réparation
- Conflit de nom de conteneur : si un conteneur portant le
container_namecible existe déjà (orphelin, reliquat d'un ancien run), l'agent le retire (docker rm -f) puis relance lecompose upau lieu d'échouer. - Conf nginx auto-créée en répertoire : si Docker avait créé
<projectDir>/nginx/<appSlug>.confen dossier (source de bind manquante lors d'un run antérieur), l'agent le supprime et réécrit un fichier — corrige l'erreur de mount « not a directory ». - Réseaux externes manquants : l'agent crée les réseaux
external: truerequis (ex.reverse-proxy-<org>) avant lecompose upau lieu d'échouer.
#### Santé temps réel
- Métriques hôte poussées toutes les 5 s sans intervention : CPU, mémoire, disque — en utilisé et en total.
- Métriques par conteneur : CPU et mémoire de chaque conteneur (via
docker stats). - Streaming activable/désactivable à distance depuis le hub (commande
set-health-streaming) ; l'état est persisté côté hub et re-synchronisé à chaque connexion.
#### Cycle de vie & sécurité
- Identité : l'agent dérive son empreinte
sha256(token); le hub n'autorise que les empreintes enrôlées. - Mise à jour à distance, vérifiée GPG : commande
updatedéclenchée par le client depuis le hub — le binaire téléchargé est vérifié (signature GPG) avant le swap. L'unité systemd accordeReadWritePaths=/usr/local/binpour permettre le self-update. - Agent révoqué : reste connecté (le hub peut toujours lui envoyer des commandes) mais cesse d'émettre (le hub coupe son streaming dès la connexion) et n'est jamais marqué
online. - Abandon après refus d'auth répétés : si le hub rejette les credentials 10 fois de suite (HTTP 401/403 — empreinte inconnue ou révoquée), l'agent passe offline au lieu de spammer le gateway. Les pannes réseau transitoires (hub injoignable) ne comptent pas : l'agent continue de réessayer, et un handshake réussi remet le compteur à zéro. Pour le réactiver : corriger/ré-enrôler le token puis redémarrer l'agent.
- Auto-destruction : la commande
self-destruct(envoyée par le hub à la suppression du serveur) désinstalle complètement l'agent — binaire, unité systemd, config, état et logs — via un process détaché. Les conteneurs déjà déployés sont laissés intacts.
#### Installation & exploitation
- Installeur :
install.shpose le binaire (/usr/local/bin/pierrr-agent), l'unité systemd et la config, puis enrôle l'agent auprès du hub. - Layout sur disque : config dans
/etc/pierrr-agent/, état (apps, backups,last_ok_at) dans/var/lib/pierrr-agent/, logs dans/var/log/pierrr-agent/(chemins surchargeables par env). - Désinstallation propre :
pierrr-agent uninstallretire l'unité, les dossiers (config/état/logs) et le binaire — en respectant les chemins configurés — sans toucher aux conteneurs déployés. - Sonde de santé :
pierrr-agent healthzest vert uniquement si l'agent a eu un échange WebSocket récent et réussi avec le hub (reflète « connecté », pas seulement « process up »).
> Installer / mettre à jour : exécuter install.sh sur le serveur, ou déclencher la mise à jour à distance depuis le hub (bouton « Mettre à jour ») une fois l'agent enrôlé.