MAATRIX / Блог / Как установить и настроить Dashy на VPS

Как установить и настроить Dashy на VPS

MAATRIX

Когда на VPS крутится больше двух-трёх сервисов, проблема обычно не в том, что они падают, а в том, что вы узнаёте об этом последним — сами натыкаетесь на белый экран в браузере вместо алерта. Dashy закрывает это не просто списком ссылок на панель управления, а живым статус-мониторингом прямо на стартовой странице: каждая карточка сама опрашивает свой сервис и красится в зелёный или красный, без отдельного инструмента ради простой проверки «жив — не жив». Ниже — как поставить Dashy на VPS через Docker, настроить проверку статуса и виджеты и закрыть панель от посторонних глаз.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Dashy и чем он отличается от Homepage и Heimdall

Dashy (проект lissy93/dashy) — открытый self-hosted дашборд-стартовая страница на Vue, тот же класс инструментов, что Homepage и Heimdall, но с другим набором акцентов. Три вещи, которые отличают его от соседей по нише:

  • Статус-мониторинг встроен в каждую карточку. У любого элемента можно включить statusCheck — Dashy сам, с бэкенда, будет опрашивать URL сервиса по расписанию и показывать цветной индикатор (доступен / недоступен / медленно отвечает) прямо на плитке, без интеграции со сторонним uptime-инструментом.
  • Конфигурация редактируется как в UI, так и в текстовом файле. В отличие от Homepage, где правка возможна только через YAML на диске, у Dashy есть встроенный визуальный редактор (иконка карандаша в углу страницы), который умеет сохранять изменения обратно в conf.yml — удобно, если не хочется каждый раз лезть по SSH ради мелкой правки.
  • Авторизация есть из коробки. Можно завести локальных пользователей с хешированным паролем прямо в конфиге дашборда, без обязательной установки Authelia или Authentik поверх, хотя для серьёзной защиты они всё равно лучше подходят.

Расплата за это — Dashy тяжелее и монтирует не директорию, а конкретный файл конфигурации, что создаёт свою собственную грабли при первом запуске (разберём ниже). Если нужен максимально лёгкий и предсказуемый дашборд без встроенного статус-чека и авторизации — присмотритесь к Homepage, он проще в поддержке. Если же ключевая задача — сразу видеть, какой из сервисов на сервере сейчас лежит, Dashy отрабатывает эту задачу без костылей.

Подготовка сервера

Dashy распространяется как готовый Docker-образ, поэтому единственная зависимость — установленный Docker и Docker Compose. Проверка:

docker --version
docker compose version

Если Docker ещё не стоит, процесс для Ubuntu 24.04 подробно разобран в статье про установку Docker с нуля. Дальше создаём рабочую директорию:

mkdir -p /opt/dashy/public
cd /opt/dashy

Отдельно подчеркну: Dashy монтирует не папку с конфигами, а один конкретный файл conf.yml. Это важно для следующего шага — если файла на хосте ещё нет, Docker при первом запуске молча создаст на его месте директорию вместо файла, и контейнер откажется стартовать с невнятной ошибкой чтения конфигурации.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Dashy через Docker Compose

Файл docker-compose.yml в /opt/dashy:

services:
  dashy:
    image: lissy93/dashy:latest
    container_name: dashy
    restart: unless-stopped
    ports:
      - "4000:80"
    volumes:
      - ./public/conf.yml:/app/public/conf.yml
    environment:
      - NODE_ENV=production
    healthcheck:
      test: ["CMD", "node", "/app/services/healthcheck"]
      interval: 1m30s
      timeout: 10s
      retries: 3
      start_period: 40s

Перед первым up нужно создать сам файл conf.yml, иначе сработает грабля с директорией, описанная выше. Самый надёжный способ — вытащить дефолтный конфиг из самого образа, а не искать актуальную версию файла где-то в интернете:

docker run -d --name dashy-tmp lissy93/dashy:latest
docker cp dashy-tmp:/app/public/conf.yml /opt/dashy/public/conf.yml
docker rm -f dashy-tmp

Теперь файл на диске существует, и volume смонтируется как файл, а не как пустая директория. Поднимаем сервис:

cd /opt/dashy
docker compose up -d
docker compose logs -f dashy

Открываем http://IP_сервера:4000 — должна показаться дефолтная страница Dashy с демонстрационными карточками. Если контейнер уходит в перезапуск по кругу, почти всегда причина — синтаксическая ошибка в conf.yml (проверьте отступы) или та самая грабля с директорией вместо файла.

Структура conf.yml: три уровня конфигурации

Весь дашборд описывается одним YAML-файлом с тремя верхнеуровневыми блоками:

БлокЗа что отвечает
pageInfoзаголовок вкладки, описание, верхние навигационные ссылки
appConfigтема оформления, язык, layout, глобальные настройки статус-чека и авторизации
sectionsсами разделы и карточки сервисов внутри них

Минимальный рабочий конфиг под VPS с парой сервисов:

pageInfo:
  title: Панель сервера
  description: Инфраструктура и приложения

appConfig:
  theme: dracula
  layout: auto
  iconSize: medium
  language: ru
  statusCheck: true
  statusCheckInterval: 300

sections:
  - name: Инфраструктура
    icon: fas fa-server
    items:
      - title: Portainer
        description: Управление контейнерами
        icon: hl-portainer
        url: https://panel.example.com
        statusCheck: true

      - title: Traefik
        description: Reverse proxy
        icon: hl-traefik
        url: https://traefik.example.com
        statusCheck: true

  - name: Приложения
    icon: fas fa-cubes
    items:
      - title: Nextcloud
        description: Файловое хранилище
        icon: hl-nextcloud
        url: https://cloud.example.com
        statusCheck: true

Иконки вида hl-portainer Dashy подтягивает из встроенной библиотеки иконок известных сервисов по имени — искать и загружать картинки вручную не нужно. Для сервисов без готовой иконки подходит префикс fas fa- (иконки Font Awesome) или прямая ссылка на PNG/SVG.

После правки conf.yml на диске изменения применяются после перезагрузки страницы в браузере, перезапуск контейнера не требуется — Dashy читает файл заново при каждом обращении.

Статус-мониторинг и виджеты

Ключевая функция Dashy — не список ссылок, а живой статус. Глобально он включается через appConfig.statusCheck: true и интервал в секундах (statusCheckInterval), а на уровне отдельной карточки его можно переопределить и уточнить:

- title: Внутренний API
  url: https://api.example.com
  statusCheck: true
  statusCheckUrl: http://api:8080/health
  statusCheckHeaders:
    Authorization: 'Bearer some-token'
  statusCheckAllowInsecure: true

Важный нюанс, который отличает Dashy от чисто клиентских дашбордов: опрос статуса выполняется на бэкенде контейнера, а не в браузере пользователя. Это значит, что statusCheckUrl может указывать на внутренний адрес в Docker-сети (например, http://api:8080/health, если Dashy и сервис в одной сети compose), не открытый наружу — публичный url при этом остаётся отдельным полем для перехода по клику. Так можно мониторить сервисы, которые вообще не торчат в интернет.

Отдельно от карточек-ссылок в conf.yml можно добавлять виджеты — блоки с живыми данными вместо кнопки-перехода: системная информация о самом сервере (CPU, память, аптайм), часы, RSS-лента, курсы валют, погода и ещё несколько десятков вариантов из встроенной библиотеки виджетов проекта. Пример раздела с виджетами сервера:

- name: Мониторинг
  icon: fas fa-chart-line
  items:
    - type: system-info
      options:
        hostLabel: VPS
    - type: clock
      options:
        format: 24
        timezone: Europe/Moscow

Для сложных сценариев мониторинга (история аптайма, уведомления в Telegram при падении, SSL-мониторинг с истечением сертификата) статус-чек Dashy — не замена, а дополнение: он даёт мгновенную визуальную сводку на дашборде, но не хранит историю и не шлёт алерты. Для этого рядом обычно ставят Uptime Kuma и добавляют его же карточкой в тот же Dashy.

Редактирование через UI, авторизация и публикация

У Dashy есть визуальный редактор конфигурации — иконка карандаша в правом верхнем углу открывает интерфейс, где можно добавлять и править карточки без ручной правки YAML, а затем сохранить изменения обратно в файл на диске. Для этого контейнеру нужны права на запись в примонтированный conf.yml: если файл принадлежит root с правами 644 и процесс внутри контейнера работает от другого пользователя, сохранение через UI будет молча падать. Простое решение:

chmod 666 /opt/dashy/public/conf.yml

Для боевого сервера это не идеальный вариант с точки зрения безопасности файловой системы, но для одного дашборда на своём VPS — рабочий компромисс; альтернатива — выставить владельца файла на тот же UID, под которым бежит процесс в контейнере.

Встроенная авторизация Dashy включается в appConfig списком пользователей с хешем пароля:

echo -n "ваш_пароль" | sha256sum
appConfig:
  auth:
    users:
      - user: admin
        hash: '<результат_sha256sum>'

Стоит сразу оговориться честно: это базовая защита уровня самого приложения, разработчики Dashy сами не позиционируют её как замену полноценной аутентификации. Для дашборда, который смотрит в открытый интернет, разумнее держать её как второй слой поверх защиты на уровне reverse-proxy. Через Caddy (пошагово — в статье про Caddy с авто-SSL) это выглядит так:

dashboard.example.com {
    reverse_proxy localhost:4000
    basicauth {
        admin $2a$14$хэш_пароля_bcrypt
    }
}

Открывать порт 4000 напрямую в интернет без прокси и HTTPS не стоит — дашборд агрегирует ссылки и статусы всей вашей инфраструктуры, это ровно та страница, которую не должен видеть посторонний.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Dashy требует базу данных?

Нет, вся конфигурация — один YAML-файл conf.yml, который монтируется в контейнер. Бэкап дашборда — это копия одного файла.

Можно ли использовать Dashy без встроенного статус-мониторинга?

Да, просто не выставляйте statusCheck: true — карточки будут работать как обычные ссылки, без опроса и цветных индикаторов, ресурсов контейнер в этом режиме тратит заметно меньше.

Почему при первом запуске контейнер сразу падает?

Чаще всего причина в том, что Docker создал директорию вместо файла conf.yml, потому что файла не существовало на хосте до docker compose up. Решение — заранее создать файл (например, командой docker cp из образа, как описано выше).

Изменения через визуальный редактор не сохраняются — почему?

Обычно не хватает прав на запись в примонтированный conf.yml на хосте. Проверьте владельца и права файла, при необходимости выставьте chmod 666 или синхронизируйте UID.

Хватит ли минимального VPS с 1 ГБ RAM?

Для самого Dashy — да, это фронтенд-приложение без базы, и в простое контейнер укладывается в скромный объём памяти; но если статус-чек опрашивает много сервисов с коротким интервалом, стоит взять запас, особенно если на том же VPS крутятся и сами проверяемые сервисы.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →