VPSРейтинг
Self-hosted3 марта 2026 · 12 мин чтения

Glance на VPS: красивый дашборд для всех self-hosted сервисов

Когда на VPS крутятся Gitea, Nextcloud, Grafana и ещё пяток сервисов, держать все ссылки в голове неудобно. Glance — стартовая страница, которая собирает всё в одном месте: статус сервисов, погода, новости, закладки, последние релизы GitHub. Лёгкий Go-бинарник, ставится за 5 минут, работает на 30 МБ RAM.

1. Что такое Glance и зачем он нужен

Glance — это персональный стартовый дашборд. Открываешь браузер, видишь одну страницу: слева закладки на все свои сервисы, посередине свежие новости или RSS-ленты, справа — погода и курсы валют. Снизу — статус всех сайтов: зелёный/красный в зависимости от доступности.

Идея простая: вместо того чтобы держать двадцать вкладок или помнить, на каком порту что крутится, всё — на одном экране.

📌 Закладки на все сервисы

Gitea, Nextcloud, Grafana, Jellyfin — все ссылки на одной странице, сгруппированные по категориям.

🌤 Погода

Текущая температура, почасовой и семидневный прогноз. Данные с open-meteo.com без ключей API.

📰 RSS-ленты и новости

Hacker News, Reddit, собственные RSS — последние посты прямо на дашборде.

🟢 Мониторинг сайтов

Виджет monitor проверяет доступность URLs и показывает зелёный/красный статус.

🐙 GitHub-релизы

Следите за новыми версиями любых репозиториев — обновления всех ваших self-hosted инструментов в одном месте.

📈 Курсы и котировки

Акции, криптовалюта, валюты — живые данные без внешних сервисов.

🐳 Статус Docker-контейнеров

Какой контейнер запущен, какой упал — прямо из дашборда.

Почти нет требований

Go-бинарник весит 20 МБ, потребляет 30–60 МБ RAM. Работает на любом VPS.

Glance vs Homepage vs Dashy

Все три — self-hosted дашборды, но у каждого своя специализация. Homepage и Dashy богаче виджетами и интеграциями, но тяжелее (Node.js). Glance написан на Go: запускается мгновенно, ест минимум памяти, страница открывается быстрее — хороший выбор для бюджетного VPS.

2. Требования к серверу

Glance один из самых лёгких self-hosted проектов. Ставить его можно на тот же VPS, где уже что-то работает — лишних ресурсов почти не возьмёт.

ПараметрМинимумПримечание
RAM30–60 МБАктивно потребляет только при обращении к странице
CPU1 vCPUНагрузка только при загрузке виджетов
Диск< 100 МБDocker-образ ~20 МБ, данные не хранятся локально
ОСUbuntu 20.04+, Debian 11+Любая ОС с Docker
Dockerv20+Нужен только Docker Engine

Можно поставить на уже занятый VPS

Glance отлично живёт рядом с Nginx, Nextcloud, Gitea и другими сервисами. Отдельный сервер для него не нужен — это просто лёгкое веб-приложение.

3. Установка через Docker

Glance запускается одним контейнером. Конфиг хранится в файле glance.yml на хосте — его удобно редактировать и версионировать в Git.

Установить Docker

Если Docker ещё не установлен — один скрипт поставит всё необходимое:

Официальный скрипт установки Docker
curl -fsSL https://get.docker.com | sh

Создать структуру папок

Создать рабочую директорию
mkdir -p ~/glance/config
cd ~/glance

Создать docker-compose.yml

~/glance/docker-compose.yml
services:
  glance:
    image: glanceapp/glance
    container_name: glance
    restart: unless-stopped
    volumes:
      - ./config:/app/config
    ports:
      - "127.0.0.1:8080:8080"

Почему 127.0.0.1:8080, а не просто 8080?

Привязка к 127.0.0.1 означает, что порт 8080 не будет виден снаружи VPS — доступ только через Nginx, который настроим дальше. Если написать просто 8080:8080, Glance окажется открыт по IP:8080 без пароля и HTTPS.

Создать минимальный конфиг

Без конфига контейнер не запустится. Создайте пустой рабочий файл:

~/glance/config/glance.yml — минимальный конфиг для старта
server:
  port: 8080

pages:
  - name: Главная
    columns:
      - size: full
        widgets:
          - type: clock
            hour-format: 24h

Запустить контейнер

Запуск
docker compose up -d

Проверьте, что контейнер запустился:

Проверить статус
docker compose ps
# Должно быть: glance   Up   127.0.0.1:8080->8080/tcp

docker compose logs glance
# Должно быть: "Glance is listening on :8080"

Временно можно открыть напрямую, пока не настроен Nginx:

Временно открыть порт (убрать после настройки Nginx)
ufw allow 8080/tcp
# Открыть в браузере: http://IP_СЕРВЕРА:8080

4. Первый конфиг: три колонки за 10 минут

Весь дашборд описан в glance.yml. После каждого изменения файла нужно перезапустить контейнер: docker compose restart glance.

Структура страницы

Каждая страница делится на колонки. Бывает два типа:

ТипШиринаКогда использовать
size: small~300 пикселейБоковые: погода, часы, закладки
size: fullОставшееся местоЦентр: новости, RSS, Hacker News

Важное правило: обязательно нужна хотя бы одна колонка full

Допустимые комбинации: small + full, full + small, small + full + small. Две колонки small без full — конфиг не загрузится, будет ошибка.

Практический пример: дашборд с тремя колонками

~/glance/config/glance.yml
server:
  port: 8080
  proxied: true   # включите, если за Nginx

pages:
  - name: Главная
    columns:

      # Левая колонка: часы + закладки на сервисы
      - size: small
        widgets:
          - type: clock
            hour-format: 24h

          - type: bookmarks
            groups:
              - title: Мои сервисы
                links:
                  - title: Gitea
                    url: https://git.ваш-домен.ru
                    icon: si:gitea
                  - title: Nextcloud
                    url: https://cloud.ваш-домен.ru
                    icon: si:nextcloud
                  - title: Grafana
                    url: https://grafana.ваш-домен.ru
                    icon: si:grafana
                  - title: Uptime Kuma
                    url: https://status.ваш-домен.ru
                    icon: si:uptimekuma
              - title: Полезные ресурсы
                links:
                  - title: GitHub
                    url: https://github.com
                    icon: si:github
                  - title: Docker Hub
                    url: https://hub.docker.com
                    icon: si:docker

      # Центральная колонка: новости
      - size: full
        widgets:
          - type: hacker-news
            limit: 15
            collapse-after: 5

          - type: reddit
            subreddit: selfhosted
            style: vertical-list
            limit: 10
            collapse-after: 5
            sort-by: hot

      # Правая колонка: погода + мониторинг
      - size: small
        widgets:
          - type: weather
            location: Moscow, Russia
            units: metric
            hour-format: 24h

          - type: monitor
            title: Мои сайты
            sites:
              - title: Основной сайт
                url: https://ваш-домен.ru
              - title: Gitea
                url: https://git.ваш-домен.ru
              - title: Nextcloud
                url: https://cloud.ваш-домен.ru

После сохранения файла — перезапустите контейнер, чтобы конфиг применился:

Перезапустить Glance после изменения конфига
docker compose restart glance

Если конфиг не применился — смотрите логи

Ошибки синтаксиса YAML видны сразу: docker compose logs glance. Чаще всего проблема — лишние пробелы или tab вместо пробелов (YAML требует только пробелы).

5. Полезные виджеты с примерами

У Glance больше 20 типов виджетов. Вот самые полезные с рабочими конфигами.

RSS-ленты

Читайте нужные блоги и новости прямо на дашборде, без алгоритмов и рекламы. Стиль vertical-list — компактный список заголовков.

Виджет RSS
- type: rss
  title: Новости
  style: vertical-list
  limit: 20
  collapse-after: 5
  feeds:
    - url: https://habr.com/ru/rss/hubs/all/
      title: Хабр
    - url: https://nplus1.ru/rss
      title: N+1
    - url: https://tproger.ru/feed/
      title: Tproger

Релизы GitHub

Следите за обновлениями всего, что установлено на VPS. Вышел новый Gitea — сразу видно. Без GitHub-токена API ограничен 60 запросами в час — на небольшой список репозиториев хватает.

Виджет GitHub Releases
- type: releases
  title: Обновления
  show-source-icon: true
  collapse-after: 5
  repositories:
    - go-gitea/gitea
    - nextcloud/server
    - glanceapp/glance
    - louislam/uptime-kuma
    - immich-app/immich
    - jellyfin/jellyfin

Мониторинг сайтов

Виджет проверяет доступность URL каждые несколько минут. Зелёный — работает, красный — нет. Не замена Uptime Kuma (нет уведомлений и истории), но удобен для быстрой проверки.

Виджет Monitor
- type: monitor
  title: Статус сервисов
  cache: 2m
  sites:
    - title: Основной сайт
      url: https://ваш-домен.ru
      icon: si:googlechrome
    - title: Gitea
      url: https://git.ваш-домен.ru
      icon: si:gitea
    - title: Nextcloud
      url: https://cloud.ваш-домен.ru
      icon: si:nextcloud
    - title: Grafana
      url: https://grafana.ваш-домен.ru
      icon: si:grafana

Курсы валют и акции

Данные через Yahoo Finance API — ключи не нужны. Работает для акций (SPY, NVDA), крипты (BTC-USD, ETH-USD) и валютных пар (RUB=X, USDRUB=X).

Виджет Markets
- type: markets
  title: Рынки
  markets:
    - symbol: BTC-USD
      name: Bitcoin
    - symbol: ETH-USD
      name: Ethereum
    - symbol: NVDA
      name: NVIDIA
    - symbol: SPY
      name: S&P 500

Статус Docker-контейнеров

Чтобы Glance видел Docker, нужно пробросить сокет в контейнер. Добавьте строку в docker-compose.yml:

docker-compose.yml — добавить Docker socket
services:
  glance:
    image: glanceapp/glance
    container_name: glance
    restart: unless-stopped
    volumes:
      - ./config:/app/config
      - /var/run/docker.sock:/var/run/docker.sock:ro  # добавить эту строку
    ports:
      - "127.0.0.1:8080:8080"

После пересоздания контейнера (docker compose up -d --force-recreate) добавьте виджет:

Виджет Docker контейнеры
- type: docker-containers
  title: Контейнеры
  sort-by: state

Несколько страниц

Если виджетов много — разбейте по страницам. Каждая страница — отдельная вкладка в верхнем меню Glance.

Несколько страниц в glance.yml
pages:
  - name: Главная
    columns:
      - size: small
        widgets:
          - type: clock
            hour-format: 24h
      - size: full
        widgets:
          - type: hacker-news

  - name: Девопс
    columns:
      - size: full
        widgets:
          - type: releases
            repositories:
              - go-gitea/gitea
              - nextcloud/server
      - size: small
        widgets:
          - type: monitor
            sites:
              - title: Gitea
                url: https://git.ваш-домен.ru

6. Nginx + SSL

Glance работает по обычному HTTP — Nginx выступает как reverse proxy и обеспечивает HTTPS.

Шаг 1: настройка DNS

Добавьте A-запись у вашего регистратора. Имя домена придумайте сами — например, dash.ваш-домен.ru:

DNS-запись (у регистратора домена)
dash.ваш-домен.ru  →  A  →  IP_СЕРВЕРА

Шаг 2: конфиг Nginx

/etc/nginx/sites-available/glance
server {
    listen 80;
    server_name dash.ваш-домен.ru;

    location / {
        proxy_pass         http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}
Активировать конфиг
ln -s /etc/nginx/sites-available/glance /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Шаг 3: SSL-сертификат

Получить SSL через Certbot
apt install -y certbot python3-certbot-nginx
certbot --nginx -d dash.ваш-домен.ru

Certbot сам обновит конфиг Nginx для HTTPS. После этого закройте прямой порт:

Убрать прямой доступ к порту 8080
ufw delete allow 8080/tcp
ufw reload

Включите proxied в glance.yml

Когда Glance находится за Nginx, добавьте в конфиг строку proxied: true в раздел server:. Тогда Glance будет корректно определять IP клиентов из заголовка X-Forwarded-For.

7. Защита паролем

По умолчанию Glance открыт всем — любой, кто знает ваш домен, увидит дашборд. Если на дашборде есть внутренние ссылки или приватная информация, защитите его паролем.

Добавить аутентификацию в glance.yml

Сначала сгенерируйте секретный ключ — он нужен для шифрования сессий:

Сгенерировать секретный ключ (запустить один раз)
docker run --rm glanceapp/glance secret:make
# Выведет строку вида: 8f3a2b9c1d4e7f0a...
# Скопируйте её

Добавьте блок auth: в конфиг:

~/glance/config/glance.yml — добавить auth
server:
  port: 8080
  proxied: true

auth:
  secret-key: 8f3a2b9c1d4e7f0a...  # ключ из команды выше
  users:
    admin:
      password: ВашПароль

pages:
  # ... остальной конфиг
Перезапустить после изменения конфига
docker compose restart glance

Теперь при открытии дашборда появится форма входа. После логина браузер запомнит сессию — повторно вводить пароль не нужно.

Хешированный пароль (безопаснее)

Хранить пароль в открытом виде в конфиге — не лучшая практика. Можно сохранить bcrypt-хеш:

Получить хеш пароля
docker run --rm glanceapp/glance password:hash ВашПароль
# Выведет: $2a$10$...

Замените password: на password-hash: с полученным хешем.

8. Обновление

Glance не хранит данные внутри контейнера (весь конфиг — в ./config/ на хосте), поэтому обновление полностью безопасно — ничего не потеряется.

Обновить Glance до последней версии
cd ~/glance
docker compose pull
docker compose up -d

Docker скачает новый образ и перезапустит контейнер. Конфиг остаётся нетронутым.

9. Частые проблемы

Нужен VPS для Glance и других self-hosted сервисов?

Рейтинг VPS →

Смотрите также