Самостоятельный хостинг homepage: настройка панели в Docker

Установите и настройте бесплатную панель управления homepage в Docker: интеграции с Home Assistant, Sonarr, Monit и другими виджетами для self‑hosting.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор20 января 2026 г.

Создание структуры каталогов и прав доступа

Перейдите в каталог для хранения конфигурации (например, /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.

  1. Создайте файл ./config/custom.css.
  2. Добавьте в 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.

Идеи для продвинутой конфигурации и полезные виджеты

  1. Интеграция Home Assistant: В widgets.yaml:

    - homeassistant:
        url: http://192.168.1.5:8123
        key: !secret HA_TOKEN
        # Можно отображать сенсоры
        entity: sensor.cpu_temperature
    
  2. Виджет умного дома: Ссылка на лампочку с виджетом статуса (включена/выключена).

  3. Просмотр логов: Виджет log для отображения последних строк файла лога или API.

Облачный доступ: Настройка доступа через Cloudflare Tunnel или Nginx Proxy Manager

Чтобы получить доступ из интернета безопасно, не открывая порты роутера.

Вариант 1: Cloudflare Tunnel (Бесплатно, безопасно)

  1. Создайте бесплатный аккаунт Cloudflare.
  2. В Cloudflare Zero Trust настройте Tunnel (демон cloudflared).
  3. Пропишите маршрут: homepage.yourdomain.com -> http://localhost:3000.

Вариант 2: Nginx Proxy Manager (Локальный реверс-прокси)

  1. Запустите NPM в Docker.
  2. Настройте SSL-сертификат (Let's Encrypt).
  3. Создайте Proxy Host: homepage.local -> http://homepage:3000.

Устранение неполадок: Частые ошибки и решения

  1. Ошибка 403 Forbidden:

    • Причина: Неправильные права доступа к docker.sock или файлам конфигурации.
    • Решение: Выполните chmod 666 /var/run/docker.sock (небезопасно для продакшена) или добавьте пользователя в группу docker (sudo usermod -aG docker $USER).
  2. Виджеты не показывают данные:

    • Причина: Нет доступа к API сервиса или неверный API-ключ.
    • Решение: Проверьте подключение из контейнера: docker exec -it homepage sh, затем curl http://service:port/api.
  3. Docker контейнеры не отображаются:

    • Причина: Не смонтирован /var/run/docker.sock.
    • Решение: Добавьте том в docker-compose.yml и перезапустите контейнер.

Заключение

Вы настроили единую точку входа для вашего хомелаба. Homepage объединил ссылки, мониторинг и статусы сервисов в одном месте. Теперь, открыв браузер, вы видите полную картину состояния вашего сервера. Продолжайте расширять функционал через виджеты и интеграции, превращая эту страницу в настоящий командный центр.

Поделиться:TelegramX / TwitterVK