Самостоятельный хостинг homepage: настройка панели в Docker
Установите и настройте бесплатную панель управления homepage в Docker: интеграции с Home Assistant, Sonarr, Monit и другими виджетами для self‑hosting.
Создание структуры каталогов и прав доступа
Перейдите в каталог для хранения конфигурации (например, /opt/homepage). Создайте папку для конфигов и установите права доступа, чтобы контейнер мог читать и записывать файлы.
sudo mkdir -p /opt/homepage/config
sudo chown -R 1000:1000 /opt/homepage
cd /opt/homepageСоздание файла docker-compose.yml
Создайте файл docker-compose.yml в корне папки /opt/homepage. Этот файл определяет, как будет запускаться homepage, куда монтировать конфиги и какой порт использовать. Обязательно монтируем /var/run/docker.sock для интеграции с контейнерами.
version: "3.3"
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
ports:
- 3000:3000
volumes:
- ./config:/app/config
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro
environment:
- PUID=1000
- PGID=1000
networks:
- homepage-net
networks:
homepage-net:
driver: bridgeЗапуск контейнера
Запустите контейнер в фоновом режиме с помощью Docker Compose. После запуска проверьте статус контейнера, чтобы убедиться, что он перешел в состояние Up.
docker compose up -d
docker ps -aНастройка основного интерфейса (settings.yaml)
Создайте файл ./config/settings.yaml для задания названия, темы и стиля шапки вашего homepage.
title: Мой Хомелаб
headerStyle: boxed
theme: dark
color: slateНастройка виджетов системы (widgets.yaml)
Создайте ./config/widgets.yaml для добавления виджетов системных ресурсов (CPU, память), поиска и времени.
- resources:
cpu: true
memory: true
disk: /
uptime: true
- search:
provider: duckduckgo
target: _blank
- datetime:
text_size: l
format: HH:mm:ss
locale: ru-RUДобавление сервисов (services.yaml)
Создайте ./config/services.yaml для отображения ссылок на приложения и виджетов статуса (например, Sonarr, Plex). Можно настроить автоматическое получение данных через API.
- Медиа:
- Sonarr:
href: http://192.168.1.100:8989
description: Телесериалы
icon: sonarr
widget:
type: sonarr
url: http://192.168.1.100:8989
key: !secret SONARR_API_KEY
- Plex:
href: http://192.168.1.100:32400
description: Медиацентр
icon: plex
widget:
type: plex
url: http://192.168.1.100:32400
key: !secret PLEX_TOKENБезопасное хранение ключей (secrets.yaml)
Создайте ./config/secrets.yaml для хранения чувствительных данных (API ключи). В docker-compose.yml добавьте монтирование этого файла.
SONARR_API_KEY: "ваш_ключ_sonarr"
PLEX_TOKEN: "ваш_токен_plex"
WEATHER_API_KEY: "ключ_openweathermap"Самостоятельное хостинг homepage — персонализированная стартовая страница и панель управления приложениями с Docker
Введение
Современный хомелаб — это не просто набор серверов, а экосистема сервисов. Быстрый доступ к ним, мониторинг состояния и единая точка входа значительно упрощают управление. homepage — это самописная веб-страница, объединяющая ссылки на ваши сервисы, виджеты (погода, статистика) и дашборды в одном интерфейсе.
Почему выбираем homepage?
- Легковесность: Не требует базы данных (использует файлы конфигурации).
- Модульность: Поддерживает множество интеграций (Docker API, Home Assistant, Sonarr, Plex и т.д.).
- Гибкость: Полная настройка через YAML, кастомные CSS/JS и иконки.
- Бесплатно и Open Source: Полностью без лицензионных ограничений.
Подготовка окружения и системные требования
Для работы homepage достаточно базового сервера. Рекомендуемый стек:
- ОС: Linux (Ubuntu, Debian, CentOS) или Windows (с Docker Desktop).
- Docker: Версия 20.10.0 и выше.
- Docker Compose: Версия 2.0 и выше.
- Ресурсы: 1 vCPU, 512 МБ RAM (минимально), 1 ГБ дискового пространства.
Проверка установки Docker:
docker --version
docker compose version
Если команды не найдены, установите Docker официальным способом (например, curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh для Ubuntu/Debian).
Установка homepage через Docker Compose (пошаговая инструкция)
Мы будем использовать отфициальный образ с Docker Hub.
1. Создание структуры каталогов
Перейдите в каталог, где будет храниться конфигурация (например, /opt/homepage).
sudo mkdir -p /opt/homepage/config
sudo chown -R 1000:1000 /opt/homepage # Установка прав для пользователя контейнера
cd /opt/homepage
2. Создание файла docker-compose.yml
Создайте файл docker-compose.yml и вставьте следующее содержимое:
version: "3.3"
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
restart: unless-stopped
ports:
- 3000:3000
volumes:
- ./config:/app/config
- /var/run/docker.sock:/var/run/docker.sock # Для интеграции с Docker (опционально)
- /etc/localtime:/etc/localtime:ro # Синхронизация времени
environment:
- PUID=1000
- PGID=1000
networks:
- homepage-net
networks:
homepage-net:
driver: bridge
Важные примечания:
ports:3000— порт веб-интерфейса. Измените левую часть (3000:3000), если порт 3000 занят (например,8080:3000).volumes:./config:/app/config: Хранение настроек./var/run/docker.sock:/var/run/docker.sock: Обязательно для автоматического отображения контейнеров. Если вы не используете Docker интеграцию, эту строку можно удалить (но это сильно снизит функциональность).
PUID/PGID: ID пользователя и группы в вашей системе (узнайте командойid). Это гарантирует правильные права на файлы конфигурации.
3. Запуск
docker compose up -d
После запуска проверьте статус:
docker ps -a
Контейнер homepage должен быть в состоянии Up.
Первичная настройка и знакомство с интерфейсом
Откройте браузер и перейдите по адресу http://<IP-вашего-сервера>:3000.
При первом запуске интерфейс будет пустым. Homepage автоматически сканирует Docker-контейнеры, если вы подключили docker.sock, и отобразит их как карточки. Чтобы отобразить имена вместо ID, добавьте метки (labels) в docker-compose файлы ваших сервисов (например, homepage.title: "Nextcloud").
Конфигурация: Подключение интеграций
Главная сила homepage — конфигурация через YAML-файлы. Все файлы лежат в ./config.
1. Основной файл settings.yaml
Создайте файл ./config/settings.yaml для глобальных настроек:
title: Мой Хомелаб
headerStyle: boxed # Стиль шапки (boxed, clean)
theme: dark # Тема (light, dark)
color: slate # Цветовая схема (доступные: slate, gray, zinc, neutral, stone, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose)
2. Файл docker.yaml (Интеграция с Docker)
Создайте ./config/docker.yaml. Этот файл отвечает за виджеты Docker.
# Показывать только запущенные контейнеры
showAll: false
# Режим сортировки (name, state)
sort: name
# Кастомные иконки и названия
dockerHost: "unix:///var/run/docker.sock" # Путь к сокету
containerName: true
3. Файл services.yaml (Ссылки на приложения)
Создайте ./config/services.yaml. Это "карточки" с кнопками запуска приложений.
- Медиа:
- Sonarr:
href: http://192.168.1.100:8989
description: Телесериалы
icon: sonarr
# Для интеграции API (погода, статус)
widget:
type: sonarr
url: http://192.168.1.100:8989
key: !secret SONARR_API_KEY
- Plex:
href: http://192.168.1.100:32400
description: Медиацентр
icon: plex
widget:
type: plex
url: http://192.168.1.100:32400
key: !secret PLEX_TOKEN
- Система:
- TrueNAS:
href: https://truenas.local
icon: truenas
description: Файловое хранилище
4. Файл widgets.yaml (Общие виджеты)
Создайте ./config/widgets.yaml для отображения системной информации.
- resources:
cpu: true
memory: true
disk: /
# disk: /mnt/data # Для кастомного диска
uptime: true
- search:
provider: duckduckgo
target: _blank
- datetime:
text_size: l
format: HH:mm:ss
locale: ru-RU
Создание виджетов: Погода, счётчики и мониторинг
В файле services.yaml можно размещать не только ссылки, но и сложные виджеты.
Пример виджета погоды (требуется API ключ OpenWeatherMap):
В services.yaml:
- Информация:
- Погода:
icon: weather-cloudy
href: https://openweathermap.org
widget:
type: openweathermap
key: !secret WEATHER_API_KEY
city: Moscow
units: metric
lang: ru
Пример мониторинга Ping: Чтобы проверять доступность хостов (например, принтера или другого сервера):
- Сеть:
- Принтер:
icon: printer
widget:
type: ping
url: 192.168.1.50
Темы и персонализация: CSS и иконки
Homepage поддерживает кастомизацию через CSS.
- Создайте файл
./config/custom.css. - Добавьте в
settings.yaml:customCSS: /app/config/custom.css
Пример кастомного CSS (изменяем шрифт и скругление углов):
/* ./config/custom.css */
body {
font-family: 'Inter', sans-serif;
}
.card {
border-radius: 15px !important;
background-color: rgba(30, 41, 59, 0.7); /* Полупрозрачный фон */
}
Иконки: Homepage использует иконки из FontAwesome, Simple Icons и Toolset. Имена иконок можно найти в документации homepage или на соответствующих ресурсах.
Интеграция с переменными окружения (secrets) для безопасности
Хранить API-ключи в открытом доступе (services.yaml) небезопасно. Homepage поддерживает механизм !secret.
1. Определение секретов
Создайте файл ./config/secrets.yaml (добавьте его в .gitignore, если используете Git):
SONARR_API_KEY: "1234567890abcdef"
PLEX_TOKEN: "my_plex_token_xyz"
WEATHER_API_KEY: "my_openweathermap_key"
2. Обновление docker-compose.yml
Монтируйте секрет в контейнер. Добавьте том:
volumes:
- ./config/secrets.yaml:/app/config/secrets.yaml:ro
3. Использование
В services.yaml теперь можно использовать синтаксис !secret KEY_NAME, как показано выше в примерах.
Обновление homepage и управление через Watchtower
Для автоматического обновления контейнеров homepage используйте Watchtower.
Добавьте в ваш docker-compose.yml сервис Watchtower:
services:
# ... ваши сервисы ...
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_POLL_INTERVAL=86400 # Проверка раз в сутки
- WATCHTOWER_CLEANUP=true # Удалять старые образы
command: --label-enable # Обновлять только контейнеры с меткой "com.centurylinklabs.watchtower.enable=true"
В сервисе homepage добавьте метку:
services:
homepage:
...
labels:
- "com.centurylinklabs.watchtower.enable=true"
Запустите: docker compose up -d.
Идеи для продвинутой конфигурации и полезные виджеты
-
Интеграция Home Assistant: В
widgets.yaml:- homeassistant: url: http://192.168.1.5:8123 key: !secret HA_TOKEN # Можно отображать сенсоры entity: sensor.cpu_temperature -
Виджет умного дома: Ссылка на лампочку с виджетом статуса (включена/выключена).
-
Просмотр логов: Виджет
logдля отображения последних строк файла лога или API.
Облачный доступ: Настройка доступа через Cloudflare Tunnel или Nginx Proxy Manager
Чтобы получить доступ из интернета безопасно, не открывая порты роутера.
Вариант 1: Cloudflare Tunnel (Бесплатно, безопасно)
- Создайте бесплатный аккаунт Cloudflare.
- В Cloudflare Zero Trust настройте Tunnel (демон
cloudflared). - Пропишите маршрут:
homepage.yourdomain.com->http://localhost:3000.
Вариант 2: Nginx Proxy Manager (Локальный реверс-прокси)
- Запустите NPM в Docker.
- Настройте SSL-сертификат (Let's Encrypt).
- Создайте Proxy Host:
homepage.local->http://homepage:3000.
Устранение неполадок: Частые ошибки и решения
-
Ошибка 403 Forbidden:
- Причина: Неправильные права доступа к
docker.sockили файлам конфигурации. - Решение: Выполните
chmod 666 /var/run/docker.sock(небезопасно для продакшена) или добавьте пользователя в группуdocker(sudo usermod -aG docker $USER).
- Причина: Неправильные права доступа к
-
Виджеты не показывают данные:
- Причина: Нет доступа к API сервиса или неверный API-ключ.
- Решение: Проверьте подключение из контейнера:
docker exec -it homepage sh, затемcurl http://service:port/api.
-
Docker контейнеры не отображаются:
- Причина: Не смонтирован
/var/run/docker.sock. - Решение: Добавьте том в
docker-compose.ymlи перезапустите контейнер.
- Причина: Не смонтирован
Заключение
Вы настроили единую точку входа для вашего хомелаба. Homepage объединил ссылки, мониторинг и статусы сервисов в одном месте. Теперь, открыв браузер, вы видите полную картину состояния вашего сервера. Продолжайте расширять функционал через виджеты и интеграции, превращая эту страницу в настоящий командный центр.