Dashy на Ubuntu 24.04: пошаговая установка
Когда на сервере крутится десяток сервисов — Nextcloud, Portainer, Grafana, пара внутренних API — рано или поздно вы устаёте открывать закладки и проверять руками, что всё ещё живо. Dashy решает именно эту задачу: это не просто страница со ссылками, а дашборд с встроенным статус-мониторингом — он сам стучится в каждый сервис и показывает зелёный или красный индикатор, плюс умеет выводить виджеты (погода, загрузка CPU, курсы валют, RSS). Ниже — установка на чистой Ubuntu 24.04 через Docker, с конфигом, HTTPS и базовой защитой доступа.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Dashy и чем он отличается от Homepage и Homarr
Dashy — open-source дашборд на Vue.js, изначально заточенный под домашние серверы и self-hosted-инфраструктуру. Ключевая фишка — активный статус-чекинг: для каждой карточки можно включить statusCheck: true, и Dashy будет периодически опрашивать URL сервиса, показывая аптайм-индикатор прямо на плитке, без отдельного Uptime Kuma. Это не полноценный мониторинг с историей и алертами (для серьёзных SLA всё равно нужен Uptime Kuma), но для «беглого взгляда — всё ли на месте» хватает с запасом.
Если сравнивать с ближайшими альтернативами: Homepage конфигурируется через YAML-файлы и делает акцент на интеграциях (Docker, Radarr, Proxmox) через API-виджеты; Homarr больше про drag-and-drop редактирование прямо в браузере. Dashy — где-то посередине: конфиг тоже YAML, но встроенный визуальный редактор позволяет менять расположение карточек мышкой и сохранять результат обратно в файл. Плюс у Dashy богатая библиотека готовых виджетов (более 30 штук из коробки) и несколько десятков тем оформления.
Для чего это реально нужно на арендованном сервере:
- единая точка входа на все панели администрирования (Portainer, phpMyAdmin, Grafana, почтовый веб-интерфейс);
- визуальный контроль — сервис лёг, карточка сразу покраснела, не нужно открывать вкладку;
- удобно для команды — один URL вместо десятка разрозненных закладок у каждого разработчика.
Требования и подготовка сервера
Dashy — фронтенд-приложение, ресурсов ему нужно немного: 512 МБ ОЗУ и 1 vCPU достаточно, если это не единственная нагрузка на VPS. Диска хватит 1–2 ГБ под образ и конфиги. Для боевого использования разумно брать сервер, где уже крутятся ваши сервисы — тогда Dashy встанет рядом и будет мониторить их по внутренней сети, без лишних прыжков через интернет.
Понадобится:
- Ubuntu 24.04 LTS с доступом по SSH;
- установленный Docker и Docker Compose (см. установку Docker с нуля);
- домен или поддомен, если планируете HTTPS-доступ (например,
dash.example.com); - открытый порт 80/443, если публикуете дашборд наружу — настройте это заранее в файрволе.
Проверяем, что Docker установлен и демон запущен:
docker --version
docker compose version
sudo systemctl status docker
Если Docker ещё не стоит — быстрый вариант через официальный скрипт (для тестового окружения; на проде лучше явная установка из репозитория Docker, как описано в статье выше):
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
newgrp docker
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Dashy через Docker Compose
Это самый предсказуемый способ — вы получаете изолированный контейнер, который легко обновлять и переносить. Создаём рабочую директорию и файл конфигурации compose:
mkdir -p ~/dashy/conf
cd ~/dashy
nano docker-compose.yml
Содержимое docker-compose.yml:
services:
dashy:
image: lissy93/dashy:latest
container_name: dashy
restart: unless-stopped
ports:
- "4000:8080"
volumes:
- ./conf/conf.yml:/app/public/conf.yml
environment:
- NODE_ENV=production
- UID=1000
- GID=1000
healthcheck:
test: ["CMD", "node", "/app/services/healthcheck"]
interval: 30s
timeout: 10s
retries: 3
start_period: 15s
Обратите внимание на порт: слева 4000 — это порт на хосте, справа 8080 — внутренний порт контейнера. Если 4000 у вас уже занят другим сервисом, замените на свободный.
Перед первым запуском нужен минимальный conf.yml, иначе контейнер стартует с дефолтным демо-конфигом:
nano conf/conf.yml
pageInfo:
title: Дашборд сервера
description: Панель управления сервисами
appConfig:
theme: dark
layout: auto
statusCheck: true
statusCheckInterval: 300
sections:
- name: Инфраструктура
icon: fas fa-server
items:
- title: Portainer
description: Управление контейнерами
url: https://portainer.example.com
icon: hl-portainer
statusCheck: true
- title: Grafana
description: Мониторинг метрик
url: https://grafana.example.com
icon: hl-grafana
statusCheck: true
Запускаем:
docker compose up -d
docker compose logs -f
После старта дашборд доступен по http://IP-сервера:4000. Дождитесь строки о готовности сервера в логах — на слабых VPS первый билд занимает 20–40 секунд.
Настройка конфигурации: секции, виджеты, статус-мониторинг
Главный файл — conf.yml, он же полностью описывает структуру дашборда. Разберём ключевые блоки подробнее.
Секции и элементы. Каждая секция (sections) — это блок карточек, у элемента (items) обязательны title и url, остальное опционально:
sections:
- name: Сайты
items:
- title: Основной сайт
url: https://example.com
statusCheck: true
statusCheckUrl: https://example.com/health
target: newtab
Параметр statusCheckUrl полезен, когда сама главная страница тяжёлая или защищена авторизацией — тогда лучше указать отдельный лёгкий health-эндпоинт, который сервис отдаёт без логина.
Глобальный статус-мониторинг. В appConfig можно включить проверку сразу для всех карточек и задать интервал в секундах:
appConfig:
statusCheck: true
statusCheckInterval: 300
statusCheckAllowInsecure: false
Учтите нюанс: если Dashy стоит за reverse-proxy без прямого доступа к внутренней docker-сети, статус-проверка идёт через публичный URL — это создаёт лишнюю нагрузку на внешний интернет-канал сервиса и добавляет задержку. Если сервисы в том же Docker-хосте, эффективнее указывать внутренние адреса контейнеров (http://portainer:9000) — тогда проверка идёт напрямую, без выхода наружу, но для этого Dashy и целевые контейнеры должны быть в одной Docker-сети.
Виджеты. Dashy умеет выводить блоки с данными прямо на дашборд — погоду, курс валют, статус Docker, RSS-ленты:
- name: Виджеты
displayData:
collapsed: false
widgets:
- type: weather
options:
apiKey: ваш_ключ_openweathermap
city: Moscow
- type: system-info
- type: rss-list
options:
rssUrl: https://example.com/feed.xml
limit: 5
Виджет system-info не требует ключей — он читает данные прямо из контейнера через dockerode, но для доступа к метрикам хоста придётся пробросить сокет Docker в docker-compose.yml:
volumes:
- ./conf/conf.yml:/app/public/conf.yml
- /var/run/docker.sock:/var/run/docker.sock:ro
Это открывает контейнеру доступ к управлению Docker на хосте, пусть и в режиме чтения — не включайте, если Dashy смотрит наружу без авторизации.
Публикация через домен: Nginx и HTTPS
Открывать дашборд по IP:порт неудобно и небезопасно — лучше повесить его на поддомен с HTTPS. Разберём вариант с Nginx как reverse-proxy (подробный разбор — в статье про Nginx в роли reverse-proxy).
Устанавливаем Nginx и Certbot:
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
Создаём конфиг сайта:
sudo nano /etc/nginx/sites-available/dashy
server {
listen 80;
server_name dash.example.com;
location / {
proxy_pass http://127.0.0.1:4000;
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;
}
}
Активируем и получаем сертификат:
sudo ln -s /etc/nginx/sites-available/dashy /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d dash.example.com
Certbot сам пропишет редирект на HTTPS и настроит автопродление. Проверить его можно командой:
sudo certbot renew --dry-run
Если вы уже используете Traefik как единую точку входа для контейнеров, вариант с лейблами будет удобнее прямого проброса портов — этот подход разобран в статье про Traefik как reverse-proxy для Docker.
Аутентификация и базовая защита доступа
Дашборд со списком всех внутренних панелей — лакомая цель, если он торчит наружу без пароля. У Dashy есть встроенная авторизация — без внешнего identity-провайдера, но с ограничениями: пароли хранятся в конфиге в виде SHA256-хэша, ролей и групп нет, это простая защита «по паролю на вход», а не полноценная IAM-система.
Включается в conf.yml:
appConfig:
auth:
users:
- user: admin
hash: 'ваш_sha256_хэш_пароля'
type: admin
Хэш пароля генерируется командой (замените ваш_пароль на реальный):
echo -n "ваш_пароль" | sha256sum
Для более серьёзной защиты — SSO, 2FA, единый вход сразу для нескольких панелей — логичнее поставить перед Dashy отдельный прокси-аутентификатор вроде Authelia или Authentik и завернуть через него весь поддомен. Это отдельная настройка, но она снимает нагрузку по авторизации со всех сервисов разом, а не только с дашборда.
Дополнительно на уровне Nginx стоит ограничить доступ по IP, если дашборд нужен только вам и команде:
location / {
allow 203.0.113.0/24;
deny all;
proxy_pass http://127.0.0.1:4000;
...
}
Обновление и резервное копирование конфига
Dashy обновляется просто, поскольку вся логика — в образе, а персональные данные — в одном YAML-файле:
cd ~/dashy
docker compose pull
docker compose up -d
Контейнер пересоздастся с новым образом, а conf.yml останется нетронутым, так как он смонтирован как volume. Перед обновлением на мажорную версию стоит свериться с release notes на GitHub — иногда меняется структура ключей конфига (например, в переходах между крупными версиями менялся формат виджетов), и старый файл может потребовать правки.
Бэкапить нужно ровно один файл — ~/dashy/conf/conf.yml. Простой вариант — добавить его в cron-копирование:
0 3 * * * tar -czf /backups/dashy-conf-$(date +\%F).tar.gz -C /home/user/dashy conf
Если конфиг ведёте через git — ещё удобнее: коммитите изменения в приватный репозиторий и получаете историю правок бесплатно.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Dashy тормозит на слабом VPS — что делать?
Обычно дело не в самом контейнере (он лёгкий), а в частых статус-проверках множества сервисов одновременно. Увеличьте statusCheckInterval до 600–900 секунд или отключите проверку для второстепенных карточек.
Можно ли обойтись без Docker?
Да, есть вариант через сборку из исходников (yarn build) и запуск на Node.js напрямую, но тогда обновления и изоляция зависимостей ложатся на вас вручную — Docker-путь надёжнее и предсказуемее.
Статус-индикатор показывает офлайн, хотя сервис работает.
Чаще всего проблема в CORS или в том, что сервис отдаёт редирект на страницу логина вместо 200 OK. Укажите отдельный statusCheckUrl на лёгкий эндпоинт без авторизации, если он есть у сервиса.
Чем Dashy отличается от простого списка ссылок в закладках?
Кроме визуального статус-мониторинга — единая точка входа для всей команды, поиск по карточкам (горячая клавиша /), виджеты с живыми данными и история версий конфига через git, если вы её ведёте.
Нужен ли Dashy, если уже стоит Uptime Kuma?
Задачи разные: Uptime Kuma — про историю аптайма, алерты в Telegram/email и SLA-графики, Dashy — про быстрый визуальный доступ к панелям с индикатором «жив/не жив» рядом с каждой ссылкой. Многие ставят оба: Kuma для алертинга, Dashy — как стартовую страницу.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →