[{"data":1,"prerenderedAt":252},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-glance-your-startpage-dashboard-on-a-vps-ma-en":6,"promo-bar-likely":251},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-glance-your-startpage-dashboard-on-a-vps-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":188,"ctaBody":189,"ctaButton":190,"ctaUrl":191,"relatedPosts":192},190,"self-host-glance-your-startpage-dashboard-on-a-vps",{"fr":12,"en":10,"ar":13,"es":14},"self-host-glance-vps","استضف-glance-ذاتيا-لوحة-بداية-على-خادم-vps","alojar-glance-en-un-vps","Self-host Glance: your startpage dashboard on a VPS","Deploy Glance self-hosted on a ServOrbit VPS: Hacker News, RSS, CPU\u002FRAM\u002FDocker on one page — YAML config, docker.sock security, troubleshooting, agency use cases.",7,1,false,"2026-07-24T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},8,"Security & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-glance-vps-poster.svg",{"categorySlug":34,"appSlug":35},"monitoring-observability","glance","Running multiple services on a VPS without a unified view means flying blind. Glance fixes that: an lightweight self-hosted dashboard that consolidates your tech news (Hacker News, RSS), live server metrics and Docker container status on a single browser-accessible page. One Go binary, zero databases, zero Redis — it starts in under a second, idles under 25 MB RAM, and is configured entirely through a YAML file. This guide covers the full installation, advanced widget configuration, Docker socket security, comparisons with alternatives and troubleshooting common errors.",[38,41,51,53,91,93,100,102,136,138,141,150,152,154,162,165,167,174,176,178,186],{"type":39,"title":40},"h2","Why Glance is a perfect fit for a VPS",{"type":42,"title":43,"items":44},"ul","What you get out of the box",[45,46,47,48,49,50],"Built-in widgets: RSS feeds, Hacker News, Reddit, weather, bookmarks, world clock","Live server metrics: CPU, RAM, disk, load average","Docker container status (running \u002F stopped \u002F paused)","Light\u002Fdark themes and custom colors via YAML","No external dependencies: single static Go binary (~15 MB)","Hot-reload configuration without restart",{"type":39,"title":52},"Glance vs alternatives: Heimdall, Homepage, Homarr",{"type":54,"title":55,"columns":56,"rows":63,"note":90},"comparison","Self-hosted dashboard comparison",[57,58,59,60,61,62],"Tool","Language","Idle RAM","Config","Docker metrics","RSS\u002Fnews widgets",[64,71,78,83],[65,66,67,68,69,70],"**Glance**","Go","\u003C 25 MB","Pure YAML","Yes (read-only)","Yes (native)",[72,73,74,75,76,77],"Homepage","Node\u002FReact","~120 MB","YAML","Yes","Partial",[79,73,80,81,76,82],"Homarr","~150 MB","GUI + JSON","Via integration",[84,85,86,87,88,89],"Heimdall","PHP\u002FLaravel","~200 MB","GUI + MySQL","Not native","No","Glance excels when lightness and speed matter more than a graphical configuration UI. For non-technical teams who prefer clicking over editing YAML, Homarr or Heimdall are valid alternatives.",{"type":39,"title":92},"Prerequisites",{"type":42,"title":94,"items":95},"What you need before starting",[96,97,98,99],"A ServOrbit VPS running Ubuntu 22.04 \u002F Debian 12 (≥ 1 vCPU, 512 MB RAM is enough)","`docker` and `docker compose` installed (Docker Engine 24+, Compose v2)","SSH root or sudo access","A subdomain pointed at your VPS (e.g. `glance.mydomain.tld`) — optional but recommended for HTTPS",{"type":39,"title":101},"Deploy Glance on your ServOrbit VPS",{"type":103,"title":104,"steps":105},"steps","Step-by-step installation",[106,109,112,115,118,121,124,127,130,133],{"title":107,"body":108},"Create the working directory","SSH into your VPS and create the folder that will hold the Glance configuration:\n\n`mkdir -p \u002Fopt\u002Fglance && cd \u002Fopt\u002Fglance`",{"title":110,"body":111},"Write the `docker-compose.yml` file","Create the following file. The read-only mount of the Docker socket is **mandatory** (see Security section below):\n\n```yaml\nservices:\n  glance:\n    image: glanceapp\u002Fglance:latest\n    restart: unless-stopped\n    ports:\n      - \"8080:8080\"\n    volumes:\n      - .\u002Fglance.yml:\u002Fapp\u002Fglance.yml:ro\n      - \u002Fvar\u002Frun\u002Fdocker.sock:\u002Fvar\u002Frun\u002Fdocker.sock:ro\n      - \u002Fproc:\u002Fproc:ro\n    environment:\n      - TZ=UTC\n```",{"title":113,"body":114},"Create the base configuration `glance.yml`","This YAML file defines your pages, columns and widgets:\n\n```yaml\nserver:\n  port: 8080\n\npages:\n  - name: Home\n    columns:\n      - size: small\n        widgets:\n          - type: clock\n            hour-format: 24h\n          - type: resource-usage\n      - size: full\n        widgets:\n          - type: hacker-news\n          - type: rss\n            feeds:\n              - url: https:\u002F\u002Fblog.servOrbit.com\u002Frss\n                title: ServOrbit Blog\n      - size: small\n        widgets:\n          - type: docker-containers\n```",{"title":116,"body":117},"Start the container","`docker compose up -d`\n\nCheck it's running: `docker compose ps` — status should show `Up`.",{"title":119,"body":120},"Open the firewall (if UFW is active)","`ufw allow 8080\u002Ftcp`\n\nOpen `http:\u002F\u002F\u003CVPS-IP>:8080` in your browser to confirm Glance responds.",{"title":122,"body":123},"Set up an nginx reverse proxy with HTTPS","To serve Glance on `https:\u002F\u002Fglance.mydomain.tld`, create an nginx vhost:\n\n```nginx\nserver {\n    listen 443 ssl http2;\n    server_name glance.mydomain.tld;\n    ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Fglance.mydomain.tld\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fglance.mydomain.tld\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002F127.0.0.1:8080;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n    }\n}\n```\n\nGet the certificate via Certbot: `certbot --nginx -d glance.mydomain.tld`.",{"title":125,"body":126},"Enable HTTP basic authentication (recommended)","Glance has no built-in auth. Protect access via nginx:\n\n`htpasswd -c \u002Fetc\u002Fnginx\u002F.htpasswd admin`\n\nAdd to the `location \u002F` block in your vhost:\n\n```nginx\nauth_basic \"Glance\";\nauth_basic_user_file \u002Fetc\u002Fnginx\u002F.htpasswd;\n```\n\nReload nginx: `systemctl reload nginx`.",{"title":128,"body":129},"Verify system metrics","The `resource-usage` widget reads `\u002Fproc` — the `:ro` mount in `docker-compose.yml` is therefore mandatory. If metrics don't appear, check: `docker compose logs glance | grep -i proc`.",{"title":131,"body":132},"Reload config without restart","Any change to `glance.yml` is picked up by sending `SIGHUP` to the container:\n\n`docker kill --signal=SIGHUP glance_glance_1`\n\nAlternatively: `docker compose restart glance` (causes ~1 s of downtime).",{"title":134,"body":135},"Enable automatic updates (optional)","Deploy [Watchtower](https:\u002F\u002Fcontainrrr.dev\u002Fwatchtower\u002F) to keep the Glance image up to date automatically, or manage it manually:\n\n`docker compose pull && docker compose up -d`",{"type":39,"title":137},"Advanced YAML configuration: widgets, themes and layout",{"type":139,"body":140},"p","Glance's power lies in its YAML file. Here are the most useful customizations.",{"type":42,"title":142,"items":143},"Advanced configuration options",[144,145,146,147,148,149],"**Custom theme** — add under `server:`: `theme: { background-color: \"240 21 15\", primary-color: \"217 92 83\" }` (HSL format without `hsl()`)","**Multiple pages** — add as many `- name:` blocks under `pages:` as you have contexts (e.g. \"Dev\", \"Clients\", \"Personal\")","**Bookmarks widget** — `type: bookmarks` with link groups to centralize quick access to internal tools","**Monitor widget** — `type: monitor` with a list of URLs: Glance performs HTTP checks and displays latency + status in real time","**GitHub releases widget** — `type: releases` with a list of repos: ideal for tracking new versions of your tools","**Refresh interval** — each widget accepts `cache: 1h` (or `30m`, `5m`) to control polling frequency",{"type":39,"title":151},"Security: the Docker socket in read-only mode",{"type":139,"body":153},"Mounting `\u002Fvar\u002Frun\u002Fdocker.sock` inside a container gives that container potentially full control over the host Docker daemon — equivalent to root. This is the **most common privilege escalation vector** in Docker environments.",{"type":42,"title":155,"items":156},"Risks and mitigations",[157,158,159,160,161],"**Risk**: a compromised container with `:rw` socket access can launch root containers, mount `\u002F`, exfiltrate secrets","**Mitigation 1 — Read-only mount**: the `:ro` flag in `docker-compose.yml` blocks all writes; Glance only needs to read container state","**Mitigation 2 — Socket proxy**: deploy [Docker Socket Proxy](https:\u002F\u002Fgithub.com\u002FTecnativa\u002Fdocker-socket-proxy) to expose only `GET \u002Fcontainers` and `GET \u002Fversion` endpoints","**Mitigation 3 — Network isolation**: place Glance in a dedicated Docker network, isolated from your application services","**Verification**: `docker inspect glance_glance_1 | grep -A5 Mounts` — the `Mode` line must show `ro`, never `rw`",{"type":163,"body":164},"tip","If you don't need Docker metrics, simply remove the `\u002Fvar\u002Frun\u002Fdocker.sock` mount from `docker-compose.yml` and remove the `docker-containers` widget from `glance.yml`. Glance works perfectly without Docker daemon access.",{"type":39,"title":166},"Troubleshooting: common errors",{"type":42,"title":168,"items":169},"Frequent issues and solutions",[170,171,172,173],"**Port 8080 already in use** — `ss -tlnp | grep 8080` to identify the process. Change the host port in `docker-compose.yml`: `\"8181:8080\"` (the container port stays 8080 on Glance's side).","**Widget not loading \u002F permanent spinner** — check outbound network connectivity from the container: `docker exec glance_glance_1 curl -s https:\u002F\u002Fnews.ycombinator.com`. If timeout, your VPS is behind a restrictive outbound firewall — open ports 80\u002F443 outbound via `ufw`.","**Docker socket refused (`permission denied`)** — the container runs under a non-root UID without access to the `docker` group. Fix: add `group_add: [\"docker\"]` or mount the socket with correct permissions. Check: `ls -la \u002Fvar\u002Frun\u002Fdocker.sock` (group `docker`, mode `660`).","**`\u002Fproc` metrics missing** — the `\u002Fproc:\u002Fproc:ro` mount is missing from `docker-compose.yml`. Without it, `resource-usage` shows null values or an error. Add the volume and restart: `docker compose up -d`.",{"type":39,"title":175},"Real-world use cases for a web agency",{"type":139,"body":177},"An agency managing N client projects on separate VPSes can centralize monitoring in Glance with one page per client or environment.",{"type":42,"title":179,"items":180},"How to structure Glance for an agency",[181,182,183,184,185],"**One page per client**: each `pages[n]` block corresponds to a project — `monitor` widget with critical URLs (front, API, backoffice), `docker-containers` widget if services run locally","**\"Global infra\" page**: the `monitor` widget can check healthcheck endpoints exposed on each machine (e.g. `\u002Fhealthz`) to aggregate multi-VPS status","**Alert RSS feed**: add the RSS feed from your monitoring tool (UptimeKuma, Gatus) to surface incidents without leaving Glance","**GitHub releases widget**: track CMS\u002Fframework releases for your clients to anticipate critical updates","**Multi-team access**: one Glance per environment (staging \u002F prod), each protected by a separate HTTP auth via nginx, shareable by link with the relevant team",{"type":163,"body":187},"The official Glance documentation (github.com\u002Fglanceapp\u002Fglance) lists all available widgets and their options. The `glance.yml reference` section is the most up-to-date reference — options evolve with each minor release.","Your VPS services at a glance","Deploy Glance on a ServOrbit VPS — self-hosted dashboard with no database with live tech news and server stats in the browser.","Deploy Glance","\u002Fapplications\u002Fmonitoring-observability\u002Fglance",[193,216,233],{"id":194,"slug":195,"slugs":196,"title":200,"excerpt":201,"readTime":202,"views":203,"isPinned":19,"noindex":19,"publishedAt":204,"updatedAt":205,"category":206,"categories":211,"featuredImage":30,"bgImage":31,"posterImage":213,"relatedSolution":214},167,"how-to-self-host-dozzle-on-a-vps-real-time-docker-log-viewer",{"fr":197,"en":195,"ar":198,"es":199},"self-host-dozzle-vps","استضافة-dozzle-على-vps-عارض-سجلات-docker-لحظيا","alojar-dozzle-en-un-vps","How to Self-Host Dozzle on a VPS: Real-Time Docker Log Viewer","Deploy Dozzle on your VPS — a stateless, open-source Docker log viewer. Stream, search and tail logs from all your containers in the browser, without SSH or log storage.",4,2,"2026-07-06T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":17,"name":207,"slug":208,"color":209,"icon":210},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[212],{"id":17,"name":207,"slug":208,"color":209,"icon":210},"\u002Fblog\u002Fcovers\u002Fself-host-dozzle-vps-poster.svg",{"categorySlug":34,"appSlug":215},"dozzle",{"id":217,"slug":218,"slugs":219,"title":223,"excerpt":224,"readTime":23,"views":203,"isPinned":19,"noindex":19,"publishedAt":225,"updatedAt":226,"category":227,"categories":228,"featuredImage":30,"bgImage":31,"posterImage":230,"relatedSolution":231},133,"self-host-beszel-multi-server-monitoring-hub-on-your-vps",{"fr":220,"en":218,"ar":221,"es":222},"self-host-beszel-vps","استضف-beszel-على-vps-مركز-مراقبة-متعدد-الخوادم","alojar-beszel-hub-monitorizacion-vps","Beszel on VPS: multi-server monitoring, alerts and security","Deploy Beszel on a VPS, monitor your entire fleet from one hub, set up Telegram\u002Femail alerts, enable 2FA and fix silent agents, TLS errors and blocked ports.","2026-02-14T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[229],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fself-host-beszel-vps-poster.svg",{"categorySlug":34,"appSlug":232},"beszel",{"id":234,"slug":235,"slugs":236,"title":240,"excerpt":241,"readTime":23,"views":242,"isPinned":19,"noindex":19,"publishedAt":243,"updatedAt":244,"category":245,"categories":246,"featuredImage":30,"bgImage":31,"posterImage":248,"relatedSolution":249},105,"monitoring-your-vps-with-uptime-kuma",{"fr":237,"en":235,"ar":238,"es":239},"superviser-vps-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","supervisar-vps-con-uptime-kuma","Monitoring your VPS with Uptime Kuma","Deploy Uptime Kuma on your VPS to monitor your sites and services self-hosted, with alerts and a public status page.",0,"2026-03-07T00:00:00+00:00","2026-11-09T20:55:19+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[247],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":34,"appSlug":250},"uptime-kuma",true,1794270485657]