OliveTin - Donnez un accès sûr et simple aux commandes shell prédéfinies à partir d'une interface Web.
Dans Services
Etiquettes: Service Docker Caddy self-hosting utilitaire
OliveTin donne un accès sûr et simple aux commandes shell prédéfinies à partir d'une interface Web.
Installation de OliveTin
Comme pour tous mes services (Glance et Glances), je pars du docker compose proposé par le projet
services:
olivetin:
container_name: olivetin
image: jamesread/olivetin
volumes:
- OliveTin-config:/config # replace host path or volume as needed
ports:
- "1337:1337"
restart: unless-stopped
volumes:
OliveTin-config:
external: false
et je modifie pour le CDP
services:
olivetin:
container_name: olivetin
image: jamesread/olivetin
volumes:
- ./config:/config
- /var/run/docker.sock:/var/run/docker.sock:ro # pour accéder aux dockers présent sur le serveur
ports:
- "1337:1337"
user : root
restart: unless-stopped
labels: # pour le caddy docker proxy
caddy: ot.albat.re
caddy.reverse_proxy: "olivetin:1337"
caddy.basic_auth.admin: "$2a$14$***********" # pour protéger l'accès au site
networks:
- webproxy-net
networks:
webproxy-net:
external: true
Les modifications apportées au docker compose d'origine sont les mêmes que pour les autres services. J'ajoute les labels et networks et caddy docker proxy fait le reste.
Attention, ce service accède en root à vos dockers, donc je le protège un minimum.
Configuration de OliveTin
Le fichier de configuration de OliveTin se trouve dans le dossier /config du service et ressemble à ceci chez moi. La documentation du projet est très bien faite
# Choose from INFO (default), WARN and DEBUG
logLevel: "INFO"
# Checking for updates https://docs.olivetin.app/reference/updateChecks.html
checkForUpdates: false
themeName: olive
# Docs: http://localhost/docs.olivetin.app/docs/entities.html
pageTitle: Alabtre1
actions:
- title: docker ps
shell: docker ps -a --format '{{.Names}}[{{.Image}}]({{.Status}})'
icon: <iconify-icon icon="ix:list"></iconify-icon>
popupOnStart: execution-dialog-stdout-only
- title: docker logs
shell: docker logs --tail 30 {{ containername }}
icon: <iconify-icon icon="ix:log"></iconify-icon>
popupOnStart: execution-dialog-stdout-only
arguments:
- name: containername
title: nom du conteneur
type: ascii_identifier
- title: Start {{ container.Names }}
icon: <iconify-icon icon="formkit:start"></iconify-icon>
shell: docker start {{ container.Names }}
entity: container
triggers:
- Update container entity file
- title: Stop {{ container.Names }}
icon: <iconify-icon icon="formkit:stop"></iconify-icon>
shell: docker stop {{ container.Names }}
entity: container
triggers:
- Update container entity file
- title: Restart {{ container.Names }}
icon: <iconify-icon icon="ix:reboot"></iconify-icon>
shell: docker restart {{ container.Names }}
popupOnStart: execution-dialog-stdout-only
entity: container
triggers:
- Update container entity file
- title: Logs de {{ container.Names }}
shell: docker logs --tail 30 {{ container.Names }}
icon: <iconify-icon icon="ix:log"></iconify-icon>
popupOnStart: execution-dialog-stdout-only
entity: container
triggers:
- Update container entity file
# This is a hidden action, that is run on startup, and every 5 minutes, and
# when the above start/stop commands are run (see the `triggers` property).
- title: Update container entity file
shell: 'docker ps -a --format json > /config/entities/containers.json'
hidden: true
execOnStartup: true
execOnCron: '*/5 * * * *'
# Docs: http://docs.olivetin.app/entities.html
entities:
- file: /config/entities/containers.json
name: container
# The only way to properly use entities, are to use them with a `fieldset` on
# a dashboard.
dashboards:
# This is the second dashboard.
- title: Conteneurs
contents:
- title: 'Conteneur {{ container.Names }}'
entity: container
type: fieldset
contents:
- type: display
title: |
{{ container.Status }}
- title: 'Start {{ container.Names }}'
- title: 'Stop {{ container.Names }}'
- title: 'Restart {{ container.Names }}'
- title: 'Logs de {{ container.Names }}'
J'ai donc deux pages, une page avec des actions génériques sur mes dockers (liste des dockers, log d'un docker…) et une seconde page listant tous mes services avec des boutons permettant de les démarrer, arrêter, redémarrer, auditer.
Résultat
Page d'accueil

Page des conteneurs

à bientôt
Articles similaires
- OliveTin - Lancement de commandes SSH (jeudi 14 août 2025)
- Pelican, le moteur de ce blog statique (mercredi 6 août 2025)
- file-browser, un peu plus qu'un gestionnaire de fichiers en ligne (samedi 9 août 2025)
- Glances, le moniteur de mes serveurs (mardi 5 août 2025)
- Glance, ma super page d'accueil web (samedi 2 août 2025)
- Installation de debian, docker et caddy-docker-proxy (samedi 2 août 2025)
Blog d'Albâtre