Pourquoi Glance convient parfaitement à un VPS
Ce que vous obtenez par défaut
- Widgets intégrés : flux RSS, Hacker News, Reddit, météo, bookmarks, horloge monde
- Métriques serveur en direct : CPU, RAM, disque, charge système
- État des conteneurs Docker (running / stopped / paused)
- Thèmes clair/sombre et couleurs personnalisables via YAML
- Aucune dépendance externe : un seul binaire statique Go (~15 Mo)
- Rechargement à chaud de la configuration sans redémarrage
Glance vs alternatives : Heimdall, Homepage, Homarr
Comparaison des tableaux de bord self-hosted
Faites défiler le tableau
| Outil | Langage | RAM idle | Config | Docker metrics | Widgets RSS/news |
|---|---|---|---|---|---|
| **Glance** | Go | < 25 Mo | YAML pur | Oui (lecture seule) | Oui (natif) |
| Homepage | Node/React | ~120 Mo | YAML | Oui | Partiel |
| Homarr | Node/React | ~150 Mo | GUI + JSON | Oui | Via intégration |
| Heimdall | PHP/Laravel | ~200 Mo | GUI MySQL | Non natif | Non |
Glance s'impose quand la légèreté et la vitesse comptent plus qu'une interface de configuration graphique. Pour une équipe non-technique qui préfère cliquer plutôt qu'éditer du YAML, Homarr ou Heimdall sont des alternatives valables.
Prérequis
Ce qu'il vous faut avant de commencer
- Un VPS ServOrbit sous Ubuntu 22.04 / Debian 12 (≥ 1 vCPU, 512 Mo RAM suffisent)
dockeretdocker composeinstallés (Docker Engine 24+, Compose v2)- Accès SSH root ou sudo
- Un sous-domaine pointé sur votre VPS (ex.
glance.mondomaine.tld) — optionnel mais recommandé pour HTTPS
Déployer Glance sur votre VPS ServOrbit
Installation pas à pas
Créer le répertoire de travail
Connectez-vous en SSH à votre VPS et créez le dossier qui accueillera la configuration Glance :
mkdir -p /opt/glance && cd /opt/glanceÉcrire le fichier `docker-compose.yml`
Créez le fichier suivant. Le montage en lecture seule du socket Docker est impératif (voir section Sécurité plus bas) :
services: glance: image: glanceapp/glance:latest restart: unless-stopped ports: - "8080:8080" volumes: - ./glance.yml:/app/glance.yml:ro - /var/run/docker.sock:/var/run/docker.sock:ro - /proc:/proc:ro environment: - TZ=Africa/CasablancaRemplacez
Africa/Casablancapar votre fuseau horaire (TZs'applique aux horloges et aux timestamps RSS).Créer la configuration de base `glance.yml`
Ce fichier YAML définit vos pages, colonnes et widgets :
server: port: 8080 pages: - name: Accueil columns: - size: small widgets: - type: clock hour-format: 24h - type: resource-usage - size: full widgets: - type: hacker-news - type: rss feeds: - url: https://blog.servOrbit.com/rss title: ServOrbit Blog - size: small widgets: - type: docker-containersDémarrer le conteneur
docker compose up -dVérifiez que le conteneur tourne :
docker compose ps— le statut doit afficherUp.Ouvrir le pare-feu (si UFW activé)
ufw allow 8080/tcpOuvrez
http://<IP-VPS>:8080dans votre navigateur pour confirmer que Glance répond.Configurer un reverse proxy nginx avec HTTPS
Pour servir Glance sur
https://glance.mondomaine.tld, créez un vhost nginx :server { listen 443 ssl http2; server_name glance.mondomaine.tld; ssl_certificate /etc/letsencrypt/live/glance.mondomaine.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/glance.mondomaine.tld/privkey.pem; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }Obtenez le certificat via Certbot :
certbot --nginx -d glance.mondomaine.tld.Activer l'authentification HTTP basique (recommandé)
Glance n'a pas d'auth intégrée. Protégez l'accès via nginx :
htpasswd -c /etc/nginx/.htpasswd adminAjoutez dans le bloc
location /du vhost :auth_basic "Glance"; auth_basic_user_file /etc/nginx/.htpasswd;Rechargez nginx :
systemctl reload nginx.Vérifier les métriques système
Le widget
resource-usagelit/proc— le montage:rodansdocker-compose.ymlest donc obligatoire. Si les métriques n'apparaissent pas, vérifiez :docker compose logs glance | grep -i proc.Recharger la config sans redémarrage
Toute modification de
glance.ymlest prise en compte en envoyant le signalSIGHUPau conteneur :docker kill --signal=SIGHUP glance_glance_1Alternativement :
docker compose restart glance(entraîne ~1 s d'indisponibilité).Activer les mises à jour automatiques (optionnel)
Déployez [Watchtower](https://containrrr.dev/watchtower/) pour maintenir l'image Glance à jour automatiquement, ou gérez-le manuellement :
docker compose pull && docker compose up -d
Configuration YAML avancée : widgets, thèmes et mise en page
La puissance de Glance réside dans son fichier YAML. Voici les personnalisations les plus utiles.
Options de configuration avancée
- Thème personnalisé — ajoutez sous
server::theme: { background-color: "240 21 15", primary-color: "217 92 83" }(format HSL sanshsl()) - Pages multiples — ajoutez autant de blocs
- name:souspages:qu'il y a de contextes (ex. "Dev", "Clients", "Perso") - Widget bookmarks —
type: bookmarksavec des groupes de liens pour centraliser vos accès rapides aux outils internes - Widget monitor —
type: monitoravec une liste d'URL : Glance effectue des checks HTTP et affiche latence + statut en temps réel - Widget GitHub releases —
type: releasesavec une liste de repos : idéal pour suivre les nouvelles versions de vos outils - Intervalle de rafraîchissement — chaque widget accepte
cache: 1h(ou30m,5m) pour contrôler la fréquence de polling
Sécurité : le docker.sock en lecture seule
Monter /var/run/docker.sock dans un conteneur donne à ce conteneur un contrôle potentiellement total sur le daemon Docker de l'hôte — équivalent root. C'est le vecteur d'escalade de privilèges le plus courant dans les environnements Docker.
Risques et mitigations
- Risque : un conteneur compromis avec accès
:rwau socket peut lancer des conteneurs root, monter/, exfiltrer des secrets - Mitigation 1 — Montage en lecture seule : le
:rodansdocker-compose.ymlbloque toute écriture ; Glance n'a besoin que de lire l'état des conteneurs - Mitigation 2 — Proxy socket : déployez [Docker Socket Proxy](https://github.com/Tecnativa/docker-socket-proxy) pour n'exposer que les endpoints
GET /containersetGET /version - Mitigation 3 — Network isolation : placez Glance dans un réseau Docker dédié, isolé de vos services applicatifs
- Vérification :
docker inspect glance_glance_1 | grep -A5 Mounts— la ligneModedoit afficherro, jamaisrw
Si vous n'avez pas besoin des métriques Docker, supprimez simplement le montage /var/run/docker.sock du docker-compose.yml et retirez le widget docker-containers de glance.yml. Glance fonctionne parfaitement sans accès au daemon Docker.
Dépannage : erreurs courantes
Problèmes fréquents et solutions
- Port 8080 déjà utilisé —
ss -tlnp | grep 8080pour identifier le process occupant le port. Changez le port hôte dansdocker-compose.yml:"8181:8080"(le port conteneur reste 8080 côté Glance). - Widget non chargé / spinner permanent — vérifiez la connectivité réseau sortante du conteneur :
docker exec glance_glance_1 curl -s https://news.ycombinator.com. Si timeout, votre VPS est derrière un pare-feu sortant restrictif — ouvrez les ports 80/443 en sortie viaufw. - Docker socket refusé (
permission denied) — le conteneur tourne sous un UID non-root sans accès au groupedocker. Solution : ajoutezgroup_add: ["docker"]ou montez le socket avec les permissions correctes. Vérifiez :ls -la /var/run/docker.sock(groupedocker, mode660). - Métriques
/procabsentes — le montage/proc:/proc:roest manquant dansdocker-compose.yml. Sans lui,resource-usageaffiche des valeurs nulles ou un message d'erreur. Ajoutez le volume et relancez :docker compose up -d.
Cas d'usage réels pour une agence web
Une agence qui gère N projets clients sur des VPS distincts peut centraliser la supervision dans Glance avec une page par client ou par environnement.
Comment structurer Glance pour une agence
- Une page par client : chaque page
pages[n]correspond à un projet — widgetmonitoravec les URLs critiques (front, API, backoffice), widgetdocker-containerssi les services tournent localement - Page "Infra globale" : un widget
resource-usagepar VPS n'est pas supporté nativement, mais le widgetmonitorpeut checker des endpoints d'healthcheck exposés sur chaque machine (ex./healthz) - Flux RSS d'alerte : ajoutez le flux RSS de votre outil de monitoring (UptimeKuma, Gatus) pour remonter les incidents sans quitter Glance
- Widget GitHub releases : suivez les releases des CMS/frameworks de vos clients pour anticiper les mises à jour critiques
- Accès multi-équipe : un Glance par environnement (staging / prod), chacun protégé par une auth HTTP distincte via nginx, partageable par lien avec l'équipe concernée
La documentation officielle Glance (github.com/glanceapp/glance) liste tous les widgets disponibles et leurs options. La section glance.yml reference est la référence la plus à jour — les options évoluent à chaque release mineure.