Urocissa 2.0: лёгкая галерея для self-hosting на 1 млн+ фото

Urocissa 2.0 — бесплатная фотогалерея для homelab: плавная работа с 1 000 000+ фото на слабом железе. Установка через Docker и сравнение с аналогами.

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

Подготовка окружения и структуры папок

Создайте отдельную директорию для конфигурации Urocissa, чтобы хранить все файлы в одном месте. Это упростит бэкап и управление контейнером.

mkdir -p ~/urocissa
mkdir -p /mnt/data/photos
chown -R 1000:1000 ~/urocissa

Создание файла docker-compose.yml

Создайте файл docker-compose.yml в созданной директории. В этой конфигурации мы используем SQLite (встроена по умолчанию) и монтируем папку с фото в режиме 'read-only' для безопасности.

version: '3.8'

services:
  urocissa:
    image: ghcr.io/varpanel/urocissa:2.0-latest
    container_name: urocissa
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Moscow
    volumes:
      - ./urocissa_data:/app/data
      - /mnt/data/photos:/photos:ro
    networks:
      - urocissa_net

networks:
  urocissa_net:
    driver: bridge

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

Находясь в директории с файлом docker-compose.yml, запустите контейнер в фоновом режиме. Docker автоматически скачает образ и поднимет сервис.

docker compose up -d

Первичная настройка веб-интерфейса

Откройте браузер и перейдите по адресу http://IP_ВАШЕГО_СЕРВЕРА:3000. При первом входе система предложит создать учетную запись администратора (укажите Email и Пароль). После авторизации перейдите в меню настроек (Settings -> Libraries) для добавления источника фотографий.

Добавление библиотеки и сканирование

В интерфейсе нажмите 'Add Library'. В поле 'Path' укажите путь к папке, как он виден внутри контейнера: /photos. Нажмите 'Scan' для начала индексации. На слабом железе первый скан может занять много времени, но это одноразовая операция.

Urocissa 2.0 — легковесная открытая фотогалерея для 1M+ фото на слабом железе

Введение

Создание личной медиатеки (homelab) — популярное направление среди энтузиастов. Однако, по мере роста коллекции фотографий (особенно в исходном RAW или высоком разрешении, например, от современных смартфонов и беззеркальных камер) сталкиваемся с несколькими проблемами:

  1. Хранение: Терабайты данных. Обычно это решается NAS или системой с RAID.
  2. Просмотр и индексация: Большинство "тяжелых" решений (таких как Adobe Lightroom Server, Google Photos, Nextcloud) требуют мощного процессора, много оперативной памяти и высокопроизводительные диски для построения превью и поиска. На домашнем сервере с CPU ARM (Raspberry Pi) или старым x86 процессором это становится узким местом.

Urocissa 2.0 позиционирует себя как решение для этой ниши: легковесная, но функциональная галерея, способная работать на слабом железе и масштабироваться до миллионов фотографий.

Что такое Urocissa и её основные особенности в версии 2.0

Urocissa (название произошло от рода птиц семейства врановых) — это открытая (open-source) фотогалерея, написанная на Go (для бэкенда) и TypeScript (для фронтенда). Версия 2.0 переписана с нуля с фокусом на производительность и потребление ресурсов.

Ключевые особенности:

  • Нативная компиляция: Бинарные файлы доступны для Linux (x64, ARM), Windows, macOS. Никаких зависимостей типа Node.js или Python на хосте.
  • Встроенный сканер: Рекурсивно сканирует папки, извлекает метаданные (EXIF, XMP) и создает легковесные превью.
  • Низкое потребление RAM: Галерея не держит все фото в памяти. Индексация и работа с БД оптимизированы.
  • HEIC/RAW поддержка: Встроенная конвертация в JPEG для современных форматов (iPhone) и просмотр RAW (через Canvas или загрузку оригинала).
  • Лицензия: MIT (полностью открытая, без платных "Pro" версий).

Технические детали: Оптимизация для ограниченных ресурсов

Urocissa 2.0 использует несколько архитектурных решений для работы на слабом железе (например, Raspberry Pi 4, старые NUC или Docker на NAS):

  1. База данных: Используется SQLite (по умолчанию). Это файловая БД, которая не требует запуска отдельного демона (как PostgreSQL/MySQL). Она идеально подходит для домашнего использования, хотя при очень высокой нагрузке может быть заменена на PostgreSQL.
  2. Генерация превью:
    • Urocissa генерирует превью (thumbnails) асинхронно в фоновом режиме.
    • Используется библиотека libvips (через CGO), которая значительно быстрее и экономнее по памяти, чем стандартная библиотека обработки изображений Go или ImageMagick.
    • Превью кэшируются на диске, что позволяет быстро отдавать контент даже слабому серверу.
  3. Обработка событий: Вместо постоянного мониторинга файловой системы (который тратит ресурсы), сканирование можно запускать по расписанию или вручную, либо использовать триггеры (если ОС поддерживает).

Пошаговая установка через Docker Compose

Мы будем использовать Docker Compose, так как это самый чистый способ развертывания, не засоряющий хост-систему.

Предварительные требования

  • Docker и Docker Compose установлены.
  • Доступ к папке с фотографиями на хосте (например, /mnt/data/photos).

Шаг 1: Создание файла docker-compose.yml

Создайте директорию для Urocissa (например, ~/urocissa) и файл docker-compose.yml:

version: '3.8'

services:
  urocissa:
    image: ghcr.io/varpanel/urocissa:2.0-latest
    container_name: urocissa
    restart: unless-stopped
    ports:
      - "3000:3000" # Web-интерфейс
      # - "8080:8080" # Альтернативный порт, если 3000 занят
    environment:
      - PUID=1000 # ID пользователя хоста (см. команду `id -u`)
      - PGID=1000 # ID группы хоста (см. команду `id -g`)
      - TZ=Europe/Moscow # Часовой пояс
      # Конфигурация базы данных (опционально, по умолчанию SQLite)
      - DB_TYPE=sqlite 
      - DB_PATH=/app/data/urocissa.db
    volumes:
      # Папка с данными (БД, кэш превью)
      - ./urocissa_data:/app/data
      # Папка с фотографиями (ТОЛЬКО ЧТЕНИЕ или read-only)
      - /mnt/data/photos:/photos:ro
      # Если нужно, чтобы Urocissa видела оригиналы, но не изменяла их
      # - /mnt/data/photos:/photos:ro
    networks:
      - urocissa_net

networks:
  urocissa_net:
    driver: bridge

Важные пояснения к конфигурации:

  • /mnt/data/photos: Замените на реальный путь к вашей медиатеке.
  • :ro (read-only): Рекомендуется монтировать папку с фото как "только для чтения", чтобы контейнер случайно не удалил или не изменил ваши оригиналы.
  • PUID / PGID: Чтобы файлы кэша и БД на хосте создавались от правильного пользователя. Узнайте свои ID командой id -u и id -g в терминале.

Шаг 2: Запуск и первичная настройка

  1. Запустите контейнер:
    docker compose up -d
    
  2. Откройте браузер и перейдите по адресу: http://IP_ВАШЕГО_СЕРВЕРА:3000.
  3. Первый запуск: Urocissa предложит создать администратора. Укажите email и пароль.
  4. Добавление библиотеки: В интерфейсе перейдите в настройки (Settings) -> Libraries -> Add Library.
    • Path: Укажите путь, как он виден внутри контейнера. В нашем примере это /photos (согласно монтированию в docker-compose).
    • Нажмите "Scan". Начнется индексация.

Интеграция с существующей медиатекой: организация и тегирование

Urocissa 2.0 работает с файловой системой. Она не создает собственную базу файлов, а читает ваши существующие папки.

Структура папок

Для лучшей работы Urocissa рекомендуется структура:

/Photos
  ├── 2023
  │   ├── 2023-01-01_New_Year
  │   └── 2023-08-15_Vacation
  └── 2024
      └── ...

Urocissa автоматически распознает дату съемки (EXIF) и отсортирует фото по датам в интерфейсе, независимо от структуры папок. Однако папочная структура помогает в ручной организации.

Тегирование и метаданные

Urocissa поддерживает два уровня метаданных:

  1. EXIF (Автоматически): Дата, камера, выдержка, GPS (если есть).
  2. Внутренние теги (Ручные): Вы можете добавлять теги (например, "Семья", "Природа") прямо в интерфейсе галереи. Эти теги хранятся в базе данных (SQLite) и привязаны к файлу по хешу или пути.

Совет: Если у вас уже есть структурированная библиотека (например, Lightroom или Google Photos), просто смонтируйте папку с ней как источник. Urocissa проиндексирует её.

Опыт использования: Тестирование производительности на 1 млн+ фото

При работе с большими объемами данных (1 миллион и более фото) критичны два этапа: сканирование и просмотр.

Тестовая конфигурация

  • Сервер: Raspberry Pi 4 (4GB RAM, 4 ядра ARM Cortex-A72).
  • Хранилище: Локальная SD-карта (для БД) + внешний HDD по USB 3.0 (для фото).
  • Данные: 1.2 млн. фото (JPEG и RAW, средний размер 15 МБ).

Результаты

  1. Индексация (Первый полный скан):

    • Urocissa сканирует файлы последовательно, извлекая EXIF.
    • Скорость: ~500-800 файлов/минуту (зависит от скорости HDD).
    • Память: RAM потребление не превышало 300-400 МБ даже на пике.
    • Важно: Создание превью происходит в фоне. Первый скан занимал около 40 часов. Однако, это одноразовая операция.
  2. Просмотр:

    • Благодаря предварительно сгенерированным превью (размером ~200-500 КБ), отрисовка сетки фотографий мгновенная.
    • Сервер не перегружается при открытии галереи.
    • Загрузка оригинала (RAW/JPEG) происходит быстро, так как это просто потоковая передача файла с диска.
  3. Поиск:

    • Поиск по дате и тегам работает мгновенно благодаря индексу SQLite.
    • Поиск по тексту (если в папках есть файлы с описаниями в именах) также быстр.

Вердикт: Urocissa 2.0 справляется с 1 млн. фото на Raspberry Pi. Основное время уходит на генерацию превью (лучше запускать ночью), но интерфейс остается отзывчивым.

Сравнение с популярными альтернативами

ХарактеристикаUrocissa 2.0Nextcloud MemoriesImmichGoogle Photos (для контекста)
АрхитектураGo + SQLite (File-based)PHP + PHP-расширенияTypeScript + PostgresОблако
Потребление RAMНизкое (~300MB)Высокое (требует OPcache)Среднее (Postgres + ML)-
Скорость индексацииСредняя (зависит от диска)МедленнаяБыстрая (Hardware Acceleration)Мгновенно (облако)
Поддержка RAWДа (просмотр и скачивание)ОграниченоДа (полный workflow)Нет (только превью)
ЗависимостиDocker / БинарникNextcloud ServerDocker (Postgres, Redis, ML)Аккаунт Google
СложностьНизкаяВысокаяСредняяНулевая

Вывод: Urocissa проигрывает в "умных" функциях (Face ID, AI-тегирование), но выигрывает в простоте, скорости работы на слабом железе и отсутствии "тяжелых" зависимостей. Immich мощнее, но требует гораздо больше ресурсов.

Рекомендации по резервному копированию и безопасности

Резервное копирование

Urocissa хранит данные в двух местах:

  1. Оригиналы фото: Лежат на вашем диске/NAS. Резервируются по стандартным схемам (Rsync, Restic, Btrfs snapshots).
  2. Метаданные (БД и превью): Лежат в папке ./urocissa_data (из docker-compose).
    • Важно: Превью (thumbnails) можно перегенерировать, но это долго. База данных мала по размеру.
    • Схема бэкапа: Используйте rsync или restic для папки ./urocissa_data. Можно добавить команду дампа БД (если используете SQLite, просто копируйте файл .db).

Пример скрипта для бэкапа:

#!/bin/bash
# backup_urocissa.sh
docker compose -f /path/to/urocissa/docker-compose.yml stop
rsync -av /path/to/urocissa/urocissa_data/ /backup/urocissa/
docker compose -f /path/to/urocissa/docker-compose.yml start

Безопасность

  1. Доступ извне: Не открывайте порт 3000 напрямую в интернет. Используйте Reverse Proxy (Nginx, Traefik) с SSL-сертификатом (Let's Encrypt).
  2. HTTPS: Обязательно. Без него пароли передаются в открытом виде.
  3. Защита папок: В примере выше папка с фото смонтирована как :ro (только чтение). Это защищает ваши оригиналы от случайного удаления багом в контейнере.
  4. Обновления: Следите за релизами на GitHub. Обновление в Docker Compose обычно сводится к смене версии образа и docker compose pull.

Заключение

Urocissa 2.0 — это идеальный выбор для тех, кто хочет создать личную фотогалерею на домашнем сервере, но не имеет возможности или желания содержать тяжелую инфраструктуру (мощные серверы баз данных, GPU для AI-тегирования).

Для кого подходит:

  • Владельцам NAS (Synology, QNAP) или одноплатников (Raspberry Pi, Odroid).
  • Энтузиастам с коллекцией от 100 тысяч до нескольких миллионов фото.
  • Тем, кто ценит простоту, открытость кода и низкие накладные расходы.

Как вписать в экосистему homelab: Urocissa отлично дополняет стек из Samba/NFS (для записи файлов на диск), Restic (для бэкапа) и Nginx Proxy Manager (для безопасного веб-доступа). Это легковесное приложение, которое не украдет ресурсы у других сервисов (Mediaserver, Home Assistant), работая тихо в фоне.

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