Installer l’interface légère derrière son proxy HTTPS. Elle s’ajoute à l’agent serve.
1. Installer en lecture seule
Depuis la racine du clone v0.0.64, sur une installation neuve :
cd examples/ui
python3 prepare.py --self-signed
docker compose up -dLe script demande un identifiant et un mot de passe et prépare secrets.local. Ouvrez https://localhost:8443 sur la machine hôte. Le certificat autosigné dure sept jours et convient au test local ; le navigateur signalera qu’il n’est pas reconnu.
Cette stack démarre son propre agent. Arrêtez un agent précédent si son port entre en conflit. Seul l’agent reçoit le socket Docker.
2. Variante avec actions manuelles
Sur une autre installation neuve, utilisez cette préparation à la place de la précédente :
cd examples/ui
python3 prepare.py --actions --self-signedDans .env, définissez l’origine exacte, sans slash final :
UI_ORIGIN=https://localhost:8443docker compose -f compose.yaml -f compose.actions.yaml up -dPour convertir une installation existante, arrêtez la stack et sauvegardez secrets.local dans un emplacement privé hors dépôt avant de préparer de nouveaux secrets. Le script refuse d’écraser les secrets existants.
3. Vérifier les opérations
L’interface actualise l’état toutes les cinq secondes. Une donnée inconnue apparaît avec un tiret ; des données trop anciennes désactivent les actions. Les conteneurs arrêtés/créés peuvent être démarrés ; ceux en cours d’exécution peuvent être arrêtés ou redémarrés.
HTTP 202 signifie « accepté », pas « terminé ». Vérifiez le résultat de l’action. La file accepte une opération en attente ; une action expire après 60 secondes et le cooldown manuel est de 30 secondes par conteneur. Les résultats récents sont en mémoire.
4. Passer à un domaine réel
Exécutez la préparation sans --self-signed et fournissez un certificat reconnu et sa clé sous les noms tls.crt et tls.key attendus par l’exemple. Réglez UI_BIND, UI_PORT et, pour les actions, UI_ORIGIN sur votre domaine HTTPS exact. Conservez l’agent sur le réseau privé.
Le jeton d’action reste côté proxy et ne doit jamais être livré au navigateur. Les actions requièrent explicitement --allow-actions, --action-origin, --action-token-file et --state-file ; elles sont incompatibles avec --dry-run. Le fichier Compose dédié configure cet ensemble.
Arrêter et mettre à jour
Utilisez les mêmes options -f que lors du démarrage pour docker compose down. Gardez les volumes et les secrets. Lors d’une mise à jour, alignez les versions agent/UI, puis tirez les images et recréez les deux services pour renouveler la résolution DNS du proxy.
Protéger un conteneur des actions manuelles
Depuis la version 0.0.64, ajoutez ce label sous le service concerné dans votre fichier Compose :
labels:
monit-docker.protected: "true"
Appliquez le changement avec docker compose up -d NOM_DU_SERVICE. L’agent lit les labels du conteneur recréé. Celui-ci reste visible avec ses métriques et le badge « Protected », mais les boutons Démarrer, Arrêter et Redémarrer sont désactivés. L’API refuse aussi ces actions avec HTTP 403 et container_protected.
Sans ce label, les actions restent possibles. Les valeurs explicites false, 0, no et off désactivent la protection ; les autres valeurs protègent le conteneur. Les règles automatiques continuent de fonctionner. Ce label ne limite pas les droits d’un accès direct à Docker.
Essayer la démo publique
La démo en direct utilise de vrais conteneurs sur un environnement partagé. Les actions de chaque visiteur sont visibles par tous. Seuls monit-demo-web et monit-demo-worker sont manipulables ; l’agent, l’interface et le proxy HTTPS sont protégés.
Un conteneur de test arrêté est automatiquement démarré après cinq minutes d’arrêt, lors de la vérification suivante (une fois par minute). Les conteneurs déjà en marche sont laissés tels quels. Ce rétablissement est propre au serveur de démonstration : il n’est pas activé sur vos installations. Il ne supprime ni conteneur ni volume et ne vide pas l’historique récent de l’agent.
La simulation hors ligne reste disponible en français et en anglais, avec des données fictives.