Документация
Документация предназначена для администраторов, которые размещают Wanmory на NAS, домашнем сервере или личном компьютере. Здесь описаны установка, настройка, развёртывание ИИ-сервиса, повседневная работа, системные настройки и обслуживание. Об устройстве системы и алгоритмах — в разделе Архитектура.
Введение#
Wanmory — открытая частная фототека с ИИ для размещения на своём сервере. Система состоит из четырёх контейнеров: бэкенда на Go (server), сервиса ИИ-инференса на Python (ml), базы данных PostgreSQL + pgvector (postgres) и mdns, который объявляет локальный домен. Все фото, метаданные, векторы и очередь задач хранятся локально, без зависимости от облачных сервисов.
- Работа с фото: хронология по месяцам, альбомы и умные альбомы, разбор серий и похожих снимков, карта путешествий, слайд-шоу.
- Возможности ИИ: обнаружение и группировка лиц, поиск на естественном языке (Chinese-CLIP), распознавание текста (PP-OCR), эстетическая оценка (выбор ИИ).
- Несколько участников: отдельные учётные записи, право удаления по принципу владения, история входов.
Системные требования#
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| Архитектура CPU | x86_64 (amd64) или ARM64 | — |
| Процессор | Уровня Intel N100 / Raspberry Pi 5 | Уровня Intel i5 и выше или ИИ-сервис на отдельной машине с GPU |
| Память | 4 ГБ (автоматически выбирается уровень «Лёгкий») | 8 ГБ и больше (уровень «Сбалансированный») |
| Диск | Около 1–4 ГБ на модели плюс место под миниатюры | SSD для data/ и тома базы данных |
| ПО | Docker Engine и Docker Compose v2 | — |
| ОС | Любой дистрибутив Linux, где работает Docker | Synology DSM, QNAP QTS, TrueNAS SCALE, Unraid, Ubuntu / Debian |
linux/amd64 и linux/arm64, Docker сам скачает подходящий. Контейнеры Docker в macOS не могут использовать GPU Apple; для аппаратного ускорения на Mac см. ИИ-сервис на отдельной машине.Быстрая установка#
Способ 1: скрипт установки (рекомендуется)
На 64-битной машине с установленным Docker выполните:
curl -fsSL https://wanmory.com/install.sh | bash
Скрипт по порядку делает следующее:
- Проверка окружения: архитектура CPU (amd64 / arm64) и 64-битное пользовательское окружение, наличие Docker и Docker Compose v2, свободная память и место на диске.
- Интерактивная настройка: каталог установки (по умолчанию ~/wanmory), порт (по умолчанию 8080, проверяется занятость), локальный домен (по умолчанию wanmory.local), пароль базы данных (по умолчанию случайный) и расположение базы (по умолчанию том Docker pgdata, можно указать каталог на локальном диске), часовой пояс (введите город или регион для поиска, например shanghai, tokyo или 北京; при нескольких совпадениях выберите номер).
- Места хранения: каталог данных (миниатюры, превью и загруженные фото, по умолчанию ./data) и каталог моделей ИИ (по умолчанию ./models).
- Вопросы и вывод скрипта — на английском, чтобы корректно отображаться в любом терминале NAS.
- Существующие папки с фото: добавляйте сколько нужно, для каждой выбирая подключение только для чтения (рекомендуется) или для чтения и записи.
- Создаёт
.env(права 600); если указаны папки с фото, создаёт такжеdocker-compose.override.yml, который Docker Compose подхватывает автоматически. - Скачивает официальный docker-compose.yml (если GitHub недоступен — с Gitee), проверяет конфигурацию, загружает образы, запускает сервисы и, когда всё готово, выводит адрес.
| Параметр / переменная | Описание |
|---|---|
-y | Без вопросов, все значения по умолчанию (пароль базы данных случайный). Подходит для автоматической установки. |
--dir КАТАЛОГ | Задать каталог установки. |
--dry-run | Только проверить окружение и создать файлы конфигурации, без загрузки образов и запуска. |
WANMORY_PORT | Задаёт порт заранее; так же работают WANMORY_DOMAIN, WANMORY_DB_PASSWORD, WANMORY_TZ, WANMORY_DATA_DIR, WANMORY_MODELS_DIR, WANMORY_DB_DIR, WANMORY_REGISTRY и WANMORY_VERSION. |
WANMORY_PHOTOS | Папки с фото через запятую, по умолчанию только для чтения; :rw после пути — чтение и запись, например /volume1/photo,/mnt/usb:rw. |
# Пример: установка без вопросов в /opt/wanmory на порт 9000 с подключением папок с фото NAScurl -fsSL https://wanmory.com/install.sh | WANMORY_PORT=9000 WANMORY_PHOTOS=/volume1/photo,/volume2/family bash -s -- -y --dir /opt/wanmory
Способ 2: ручная установка
- 1Создайте каталог и скачайте файл Compose
Создайте каталог для файла Compose, данных и моделей и скачайте официальный
docker-compose.yml:bashmkdir -p ~/wanmory && cd ~/wanmorycurl -fsSLO https://raw.githubusercontent.com/i-dj/wanmory/main/docker/docker-compose.yml - 2(Необязательно) Создайте .env
Создайте в том же каталоге
.env, чтобы переопределить значения по умолчанию. В рабочей среде обязательно смените пароль базы данных:.envWANMORY_DB_PASSWORD=замените-на-случайную-строкуWANMORY_PORT=8080WANMORY_TZ=Europe/MoscowWANMORY_VERSION=latest - 3Запустите сервисы
При первом запуске загружаются образы и автоматически выполняются миграции базы данных:
bashdocker compose up -ddocker compose ps # убедитесь, что все четыре сервиса running / healthy - 4Откройте и настройте
Откройте в браузере
http://wanmory.local:8080(илиhttp://<IP хоста>:8080), создайте учётную запись администратора по подсказкам и загрузите модели в «Системные настройки → ИИ». После загрузки моделей существующие фото автоматически встают в очередь ИИ.
Разбор docker-compose.yml#
Официальный файл Compose описывает четыре сервиса: базу данных postgres, бэкенд server, объявление локального домена mdns и встроенный ИИ-сервис ml. Назначение каждого параметра указано прямо в файле:
# Официальный файл Compose для Wanmory: выполните docker compose up -d в каталоге этого файла# Переменные вида ${VAR:-значение} читаются из .env в том же каталоге; если не заданы — берётся значение по умолчаниюservices:# ── База данных: PostgreSQL 17 + pgvector ────────────────────────# Хранит метаданные фото, людей, альбомы, настройки, очередь задач и векторы (индекс HNSW)# Порт не публикуется; доступна только во внутренней сети Composepostgres:image: pgvector/pgvector:pg17environment:POSTGRES_USER: wanmoryPOSTGRES_PASSWORD: ${WANMORY_DB_PASSWORD:-wanmory} # в рабочей среде обязательно смените в .envPOSTGRES_DB: wanmoryvolumes:- ${WANMORY_DB_DIR:-pgdata}:/var/lib/postgresql/data # по умолчанию именованный том pgdata; с WANMORY_DB_DIR — этот каталог. Включите в резервные копииhealthcheck: # server ждёт эту проверку и стартует, когда база готоваtest: ["CMD", "pg_isready", "-U", "wanmory", "-d", "wanmory"]interval: 5stimeout: 3sretries: 20restart: unless-stopped# ── Бэкенд: программа на Go со встроенным веб-приложением ────────# Отвечает за API, загрузки (tus), планирование задач, миниатюры и права; при запуске выполняет миграции БДserver:image: ${WANMORY_REGISTRY:-ghcr.io/i-dj}/wanmory-server:${WANMORY_VERSION:-latest}environment:DATABASE_URL: postgres://wanmory:${WANMORY_DB_PASSWORD:-wanmory}@postgres:5432/wanmoryWANMORY_ML_URL: http://ml:3003 # адрес встроенного ИИ-сервиса; удалённый задаётся в «Настройках ИИ»TZ: ${WANMORY_TZ:-Asia/Shanghai} # часовой пояс, если в EXIF его нетWANMORY_MDNS: "off" # в сети bridge контейнер не получает мультикаст; домен объявляет сервис mdns нижеWANMORY_HTTP_PUBLIC_PORT: ${WANMORY_PORT:-8080} # порт, который показывает веб-приложение; должен совпадать с пробросомWANMORY_DOMAIN: ${WANMORY_DOMAIN:-wanmory.local} # начальный локальный домен; после смены в веб-настройках действует настройкаports:- "${WANMORY_PORT:-8080}:8080" # порт хоста:порт контейнераvolumes:- ${WANMORY_DATA_DIR:-./data}:/data # upload/ — загруженные оригиналы, thumbs/ — миниатюры и превью 1440 px# Существующие папки с фото подключаются подкаталогами /photos, сколько угодно; :ro — только чтение; сканируются каждые 15 минут# - /mnt/nas/photos:/photos/nas:ro# - /media/usb/camera:/photos/usb:rodepends_on:postgres:condition: service_healthyrestart: unless-stopped# ── Объявление локального домена (mDNS) ──────────────────────────# Тот же образ, что и server, запускает только подкоманду mdns; объявляет wanmory.local (можно сменить в веб-приложении)mdns:image: ${WANMORY_REGISTRY:-ghcr.io/i-dj}/wanmory-server:${WANMORY_VERSION:-latest}command: ["mdns"]network_mode: host # для отправки и приёма мультикаста в локальной сети нужна сеть хостаenvironment:WANMORY_URL: http://127.0.0.1:${WANMORY_PORT:-8080} # периодически запрашивает у server текущий доменWANMORY_DOMAIN: ${WANMORY_DOMAIN:-wanmory.local} # объявляется, пока server недоступенdepends_on:- serverrestart: unless-stopped# ── Встроенный ИИ-сервис: FastAPI + ONNX Runtime, только CPU ─────# Без состояния; получает превью от server и возвращает лица, векторы и текст; порт не публикуетсяml:image: ${WANMORY_REGISTRY:-ghcr.io/i-dj}/wanmory-ml:${WANMORY_VERSION:-latest}volumes:- ${WANMORY_MODELS_DIR:-./models}:/models # модели сохраняются, пересоздание контейнера не требует повторной загрузкиenvironment:WANMORY_MODEL_DIR: /modelsWANMORY_AUTO_DOWNLOAD: "0" # без автозагрузки; администратор сначала подтверждает лицензии и место на диске в веб-приложенииrestart: unless-stoppedvolumes:pgdata:
Переменные окружения#
.env (переменные Compose)
Эти переменные используются в docker-compose.yml; запишите их в .env в том же каталоге, чтобы они вступили в силу:
| Переменная | По умолчанию | Описание |
|---|---|---|
WANMORY_DB_PASSWORD | wanmory | Пароль PostgreSQL, используется и в DATABASE_URL сервиса server. Смена после первого запуска требует сменить и пароль пользователя внутри базы. |
WANMORY_PORT | 8080 | Порт на хосте; используется и в адресе, который показывает веб-приложение. |
WANMORY_TZ | Asia/Shanghai | Часовой пояс, если в данных EXIF его нет. |
WANMORY_VERSION | latest | Тег образа; закрепите конкретную версию, чтобы самим решать, когда обновляться. |
WANMORY_REGISTRY | ghcr.io/i-dj | Реестр образов. Если ghcr.io недоступен, замените на доступный. |
WANMORY_DATA_DIR | ./data | Каталог данных: загруженные оригиналы (upload/), миниатюры и превью (thumbs/); подключается в контейнер как /data. |
WANMORY_MODELS_DIR | ./models | Каталог моделей ИИ, подключается в контейнер ml как /models. |
WANMORY_DB_DIR | том pgdata | Каталог базы данных. Если не задан, используется том Docker pgdata; если указан путь к каталогу на локальном диске, база хранится прямо там. Не используйте сетевые папки. |
WANMORY_DOMAIN | wanmory.local | Начальный локальный домен, должен оканчиваться на .local. После смены в «Системные настройки → Домен доступа» действует настройка. |
Контейнер server (необязательно)
DATABASE_URL, WANMORY_ML_URL, WANMORY_MDNS и WANMORY_HTTP_PUBLIC_PORT уже заданы в файле Compose с пояснениями. Следующих переменных в стандартном файле нет; при необходимости добавьте их в environment сервиса server:
| Переменная | По умолчанию | Описание |
|---|---|---|
WANMORY_WORKERS | авто | Параллельность задач метаданных и миниатюр по умолчанию. Если не задана, рассчитывается по числу ядер и памяти; меняется в разделе «Производительность» веб-приложения. |
WANMORY_ML_TOKEN | пусто | Токен доступа встроенного ИИ-сервиса; должен совпадать с одноимённой переменной контейнера ml. Обычно не нужен. |
WANMORY_FACE_MODEL | antelopev2 | Модель лиц, если уровень моделей не выбран. |
WANMORY_CLIP_MODEL | chinese-clip-vit-h-14 | Модель семантического поиска, если уровень моделей не выбран. |
WANMORY_STORAGE_ROOTS | каталог данных | Каталоги, которые можно просматривать и выбирать в веб-приложении, через двоеточие. |
Подключение папок с фото#
Фото, которые уже лежат на NAS или внешнем диске, загружать не нужно. Подключите папку подкаталогом /photos внутри контейнера: она сканируется каждые 15 минут, новые файлы импортируются на месте (без копирования и перемещения), а затем, как и загруженные фото, проходят чтение метаданных, создание миниатюр и обработку ИИ.
server:volumes:- ./data:/data- /mnt/nas/photos:/photos/nas:ro # :ro — только для чтения- /media/usb/camera:/photos/usb:ro- /home/me/Pictures:/photos/pictures # чтение и запись
После изменения выполните docker compose up -d. Первое сканирование начнётся примерно через 20 секунд после перезапуска контейнера.
- Рекомендуется подключать только для чтения (:ro): система ничего не пишет в такие папки. Удаление фото в приложении лишь переносит его в «Недавно удалённые», окончательное удаление никогда не стирает исходный файл, и при следующих сканированиях он не импортируется снова. В папках с правом записи окончательное удаление стирает и исходный файл.
- Файлы с одинаковым содержимым импортируются один раз (сверка по контрольной сумме SHA-1), включая уже загруженные файлы и дубликаты в разных папках.
- Скрытые каталоги и системные папки NAS (.xxx, @eaDir, #recycle и т. п.) пропускаются автоматически.
- Фото из подключённых папок не принадлежат ни одному участнику; удалять их могут только администраторы.
Локальный домен (mDNS)#
Сервис mdns работает в режиме сети хоста и объявляет домен доступа в локальной сети (по умолчанию wanmory.local). macOS, iOS, iPadOS и Windows 10 и новее открывают http://wanmory.local:8080 без настройки роутера. Домен меняется в «Системные настройки → Домен доступа» и должен оканчиваться на .local.
Обратный прокси и доступ из интернета#
Веб-загрузка использует протокол с докачкой tus (/api/uploads/) с блоками по 16 МБ. За обратным прокси снимите ограничение на размер запроса и отключите буферизацию запросов. Пример для Nginx:
location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Forwarded-Proto $scheme;}location /api/uploads/ {proxy_pass http://127.0.0.1:8080;client_max_body_size 0; # без ограничения размера (не меньше 20m)proxy_request_buffering off; # передавать потоком, не сохраняя на диск проксиproxy_set_header Host $host;proxy_set_header X-Forwarded-Proto $scheme;}
Режимы работы#
ИИ-сервис — HTTP-сервис без состояния: он получает от бэкенда превью размером 1440 пикселей и возвращает лица, векторы и распознанный текст. Он не обращается к базе данных и не сохраняет файлы. Бэкенд поддерживает два режима, которые переключаются в «Системные настройки → ИИ → Режим работы ИИ»:
| Режим | Где работает | Когда подходит |
|---|---|---|
| Встроенный (только CPU) | Контейнер ml в Compose, доступен только во внутренней сети | Работает сразу; NAS или мини-ПК с небольшой фототекой или когда допустима долгая первичная обработка |
| Удалённый сервис | Другая машина в локальной сети, Python-сервис запущен напрямую | Mac на Apple Silicon (CoreML / MPS) или машина с GPU NVIDIA (CUDA) — первичная обработка намного быстрее |
Когда ИИ-сервис недоступен, задачи ИИ остаются в очереди и перестают забираться, не расходуя повторы; когда сервис вернётся, обработка продолжится сама. Просмотр, загрузка и прочее при этом работают.
ИИ-сервис на отдельной машине#
Способ 1: напрямую на Mac или машине с GPU (рекомендуется)
При прямом запуске доступно аппаратное ускорение: на Apple Silicon модели лиц используют CoreML, а Chinese-CLIP — MPS; на GPU NVIDIA Chinese-CLIP работает через CUDA в половинной точности (около 1,9 ГБ видеопамяти / памяти). Сначала установите uv.
git clone https://github.com/i-dj/wanmory.gitcd wanmory/mluv sync --extra torch # установить зависимости PyTorch (семантический поиск с ускорением на GPU)# Сгенерируйте токен доступа; бэкенд и ИИ-сервис используют одно значениеexport WANMORY_ML_TOKEN=$(openssl rand -hex 24)echo $WANMORY_ML_TOKENWANMORY_FACE_MODEL_PRELOAD=1 uv run --extra torch python -m wanmory_ml# По умолчанию слушает 0.0.0.0:3003; меняется через WANMORY_ML_HOST / WANMORY_ML_PORT
Способ 2: образ Docker на другой машине
Для более мощной машины x86 без подходящего GPU; образ использует только процессор:
docker run -d --name wanmory-ml --restart unless-stopped \-p 3003:3003 \-e WANMORY_ML_TOKEN=<токен-доступа> \-v $PWD/models:/models \ghcr.io/i-dj/wanmory-ml:latest
Включение удалённого сервиса в бэкенде
- 1Откройте настройки ИИ
Войдите как администратор, откройте «Системные настройки → ИИ → Режим работы ИИ» и выберите «Удалённый сервис».
- 2Укажите адрес и токен
Адрес вида
http://192.168.1.20:3003, токен — значение, сгенерированное на предыдущем шаге. Перед сохранением соединение проверяется, показываются задержка и версия сервиса. - 3Проверьте уровень и модели
После подключения уровень «Авто» пересчитывается по оборудованию удалённой машины; загрузите нужные модели в разделе «Уровень моделей».
Уровни моделей и загрузка#
Уровень определяет, какие модели используются для лиц и семантического поиска. В режиме «Авто» система рекомендует уровень по оборудованию машины с ИИ-сервисом: при наличии подходящего GPU — «Высокая точность»; только с процессором и памятью меньше 6 ГБ — «Лёгкий», иначе — «Сбалансированный».
| Уровень | Обнаружение и признаки лиц | Семантический поиск | Подходящее оборудование |
|---|---|---|---|
| Высокая точность (quality) | antelopev2 (SCRFD-10G + ArcFace R100) | Chinese-CLIP ViT-H/14 (1024-d) | Mac на Apple Silicon, GPU NVIDIA |
| Сбалансированный (balanced) | antelopev2 | Chinese-CLIP ViT-L/14 (768-d) | NAS уровня Intel i5 |
| Лёгкий (lite) | buffalo_l (ArcFace R50) | Chinese-CLIP ViT-B/16 (512-d) | N100, Raspberry Pi 5 |
- Распознавание текста использует PP-OCRv6 (RapidOCR); его модели ставятся вместе с зависимостями и отдельно не загружаются.
- После смены уровня лица на всех фото обнаруживаются заново, а семантические векторы пересчитываются новыми моделями; пока это идёт, поиск работает по старым векторам, а люди с именами сохраняются.
- Модели загружаются в подключённый каталог ./models; неиспользуемые можно удалить, чтобы освободить место (используемую модель удалить нельзя).
- Модели лиц InsightFace разрешены только для некоммерческого использования; перед коммерческим использованием замените их или получите лицензию.
Переменные ИИ-сервиса#
| Переменная | По умолчанию | Описание |
|---|---|---|
WANMORY_ML_HOST | 0.0.0.0 | Адрес прослушивания. |
WANMORY_ML_PORT | 3003 | Порт прослушивания. |
WANMORY_ML_TOKEN | пусто | Токен доступа; если задан, каждый запрос должен содержать Authorization: Bearer. |
WANMORY_MODEL_DIR | ~/.cache/wanmory/models | Каталог моделей; в образе — /models. |
WANMORY_AUTO_DOWNLOAD | 0 в образе | Загружать ли модели автоматически при первом использовании. |
WANMORY_FACE_MODEL_PRELOAD | — | При значении 1 модели лиц загружаются при старте; Chinese-CLIP загружается в фоне. |
WANMORY_UNLOAD_AFTER | 5 / 30 минут | Через сколько секунд простоя модель выгружается для освобождения памяти; 0 — никогда. По умолчанию зависит от памяти хоста. |
Первый запуск и вход#
- 1Создайте администратора
При первом входе система видит, что учётных записей нет, и предлагает создать администратора. Администраторы могут добавлять участников и менять системные настройки.
- 2Загрузите модели
Откройте «Системные настройки → ИИ», подтвердите уровень моделей и загрузите их. Пока модели не готовы, задачи ИИ ждут в очереди.
- 3Импортируйте фото
Загрузите через веб-приложение или подключите фото с NAS, как описано в разделе Подключение папок с фото.
- 4Добавьте участников
В «Системные настройки → Участники» создайте учётные записи для других людей и выберите роль «Участник» или «Администратор».
Загрузка и импорт#
- Веб-загрузка принимает фото, видео, HEIC, RAW (например, DNG) и другое, с выбором нескольких файлов; загрузка идёт блоками по протоколу tus и продолжается после обрыва сети или перезагрузки страницы.
- Загруженные файлы раскладываются по годам и месяцам в каталоге загрузок (по умолчанию data/upload). Каталог меняется в «Системные настройки → Каталог загрузок» и влияет только на новые загрузки.
- После импорта по порядку выполняются: чтение метаданных (ExifTool) → миниатюры и превью 1440 пикселей (libvips / FFmpeg) → семантические векторы, лица и текст (ИИ-сервис) → обратное геокодирование.
- Индикатор фоновых задач вверху боковой панели показывает в штуках фото прогресс и оставшееся время для «Импорт фото» и «Распознавание ИИ».
Просмотр, поиск и упорядочивание#
| Функция | Описание |
|---|---|
| Фототека | Хронология фото по месяцам, вверху — карусель выбора ИИ и «В этот день». |
| Поиск на естественном языке | Введите описание (например, «фото с третьего дня рождения малыша»); результаты ранжируются по распознанному тексту, месту съёмки и семантическому сходству Chinese-CLIP. Название категории сразу возвращает эту категорию. |
| Люди | Лица группируются автоматически; человек появляется в списке, если он есть хотя бы на 3 фото. Можно давать имена, объединять, указывать день рождения и смотреть взросление по возрасту, места и общие фото. |
| Альбомы · Умные альбомы | В альбомы фото добавляются вручную, альбом можно сделать личным; умные альбомы собирают фото сами по людям, местам, времени и другим условиям. |
| Места | Показывает места съёмки на карте по GPS, с видами «Карта», «Спутник» и «Сетка». |
| Серии и похожие | Автоматически группирует серии и похожие фото и рекомендует лучший кадр; в «Дубликатах» — файлы с одинаковым содержимым. |
| Слайд-шоу | Можно запускать для фототеки, альбомов, людей и воспоминаний; вертикальные фото объединяются по два-три на кадр, есть фоновая музыка и переходы. |
Участники и права#
| Роль | Права |
|---|---|
| Администратор | Добавляет и удаляет участников, сбрасывает их пароли, меняет системные настройки; может удалить любое фото. |
| Участник | Загружает, просматривает и упорядочивает фото; удаляет только свои загрузки; не может менять системные настройки. |
| Гость | При включённом гостевом доступе посетители без входа могут только смотреть общий контент; личные альбомы и скрытые фото не видны. |
Сведения о людях (имена, объединения) общие для всех участников; число фото, обложки и страницы людей считаются по фото, которые видит конкретный участник, а скрытые фото видит только владелец.
Участники и история входов#
- Участники: при добавлении задаются имя, начальный пароль (не короче 4 символов) и роль; пароль участника можно сбросить, а самого участника — удалить.
- История входов: записываются время, устройство и IP каждого входа, местоположение оценивается по IP без интернета (ip2region), хранятся последние полгода. Видна только администраторам.
- В разделе «Моя учётная запись» каждый участник может сменить пароль и аватар и посмотреть устройства, на которых выполнен вход.
Настройки ИИ#
| Параметр | Варианты | Описание |
|---|---|---|
| Режим работы ИИ | Встроенный (только CPU) / Удалённый сервис | Для удалённого сервиса нужны адрес и токен, перед переключением проверяется соединение; пока сервис недоступен, обработка ИИ приостановлена. |
| Вычислительное устройство | Авто / GPU / Только CPU | Без подходящей видеокарты доступен только CPU; при переключении модели перезагружаются, а текущая обработка ИИ вскоре продолжается. |
| Уровень моделей | Авто / Высокая точность / Сбалансированный / Лёгкий | После смены все фото обрабатываются новыми моделями заново, прогресс отображается. |
| Управление моделями | Загрузить / Удалить | Показывает размер и состояние каждой модели (используется, загружена, не загружена). |
Производительность и ресурсы#
| Параметр | Варианты | Описание |
|---|---|---|
| Время обработки | В простое / Всегда / Ночью | В простое: обработка ИИ приостанавливается во время загрузок и создания миниатюр; Всегда: обработка идёт постоянно, загрузки могут замедлиться; Ночью: только в заданные часы. |
| Параллельная обработка фото | Число | Сколько фото одновременно читается и получает миниатюры; по умолчанию считается по ядрам и памяти. |
| Параллельная обработка ИИ | Число | Сколько фото одновременно отправляется в ИИ-сервис. |
| Потоки CPU | Число | Сколько потоков CPU использует каждая модель при инференсе. |
Вверху карточки в реальном времени показывается состояние ИИ (работает или причина паузы). Изменения применяются сразу, без перезапуска.
Хранилище, гости, карты и домен#
| Параметр | По умолчанию | Описание |
|---|---|---|
| Каталог загрузок | data/upload | Загруженные файлы раскладываются по годам и месяцам; изменение влияет только на новые загрузки. |
| Гостевой доступ | Вкл. | Позволяет смотреть общий контент без входа. При доступе из интернета лучше отключить. |
| Онлайн-карты | Вкл. | Показывает карты, названия мест и поиск по местам, отправляя координаты фото картографическому сервису; если выключено — только координаты. |
| Источник карт | Авто | Авто: AMap в материковом Китае, OpenStreetMap в остальных регионах; можно закрепить один из них. |
| Домен доступа | wanmory.local | Домен для доступа в локальной сети; должен оканчиваться на .local. |
Обновление системы#
«Системные настройки → Обновление системы» показывает текущие версии бэкенда и ИИ-сервиса и сообщает о новых. Для обновления выполните в каталоге с docker-compose.yml:
docker compose pull && docker compose up -d
Миграции базы данных выполняются автоматически при запуске server. Если версия закреплена через WANMORY_VERSION, сначала измените тег в .env.
Резервное копирование и восстановление#
Резервировать нужно три вида данных:
| Данные | Где | Описание |
|---|---|---|
| База данных | именованный том pgdata | Метаданные фото, люди, альбомы, настройки, векторы и очередь задач. |
| Загрузки и миниатюры | ./data | Загруженные оригиналы (data/upload) и миниатюры (data/thumbs); миниатюры можно создать заново. |
| Папки с фото | папки, подключённые в /photos | Защищаются собственным резервным копированием NAS; приложение не меняет папки, подключённые только для чтения. |
# Выгрузить базу данныхdocker compose exec -T postgres pg_dump -U wanmory -Fc wanmory > wanmory-$(date +%F).dump# Восстановить в новую установку (сначала docker compose up -d postgres)docker compose exec -T postgres pg_restore -U wanmory -d wanmory --clean < wanmory-2026-11-10.dump
Сброс пароля администратора#
Если участник забыл пароль, администратор сбрасывает его в «Системные настройки → Участники». Если пароль забыл сам администратор, выполните на хосте с приложением, в каталоге с docker-compose.yml:
docker compose exec server wanmory reset-password # показать учётные записи и выбратьdocker compose exec server wanmory reset-password <имя> # указать учётную запись сразу
- Команда выводит все учётные записи (имя, роль, дата создания, последний вход); выберите номер и дважды введите новый пароль.
- После сброса учётная запись выходит из системы на всех устройствах; фото и альбомы не затрагиваются.
- Сделать это можно только на хосте, в веб-приложении такой возможности нет. Без Docker запустите wanmory reset-password с теми же переменными окружения, что и сервер, например DATABASE_URL.
Устранение неполадок#
| Симптом | Что проверить |
|---|---|
| Не открывается wanmory.local | Убедитесь, что сервис mdns работает (docker compose ps); некоторые Android не поддерживают mDNS — используйте IP; проверьте, не занят ли порт 5353 на хосте. |
| В настройках ИИ «Нет соединения, обработка ИИ приостановлена» | Во встроенном режиме посмотрите журнал контейнера ml (docker compose logs ml); в удалённом — проверьте, совпадают ли адрес, порт, файрвол и токен. |
| Нет результатов в «Людях» или поиске | Убедитесь, что модели загружены; в «Производительности» проверьте, не приостановлен ли ИИ настройкой времени обработки; посмотрите прогресс распознавания в индикаторе задач. |
| Не загружаются большие файлы | Слишком маленький лимит размера запроса на обратном прокси; настройте client_max_body_size, как в разделе «Обратный прокси и доступ из интернета». |
| Не появляются фото из подключённой папки | Папки нужно подключать подкаталогами /photos; первое сканирование — примерно через 20 секунд после запуска, затем каждые 15 минут; скрытые каталоги пропускаются. |
| Образы загружаются медленно или не загружаются | Укажите в .env WANMORY_REGISTRY с доступным реестром. |
Журналы сервисов: docker compose logs -f server и docker compose logs -f ml. Если проблема не решается, напишите нам на странице Сообщить о проблеме, указав версию и приложив нужные журналы.
Удаление#
Запустите скрипт удаления на хосте, где работает Wanmory:
curl -fsSL https://wanmory.com/uninstall.sh | bash
Скрипт сначала читает .env в каталоге установки и показывает контейнеры, базу данных, каталог данных, модели ИИ и занимаемое ими место, а также подключённые папки с фото. Затем останавливает и удаляет контейнеры и сеть и по каждому пункту спрашивает, удалять ли его (по умолчанию всё сохраняется):
| Пункт | Описание |
|---|---|
| База данных | Том Docker pgdata или каталог из WANMORY_DB_DIR. После удаления люди, альбомы, настройки и результаты ИИ не восстанавливаются. |
| Каталог данных | Миниатюры, превью и исходные фото, загруженные через веб-приложение. |
| Модели ИИ | После переустановки их можно снова загрузить из веб-приложения. |
| Образы Docker | Включая образ postgres/pgvector; их можно скачать снова. Образы, используемые другими контейнерами, не удаляются. |
| Файлы конфигурации | .env (с паролем базы данных), docker-compose.yml и docker-compose.override.yml; опустевший каталог удаляется вместе с ними. |
- Подключённые папки с фото (NAS, внешние диски) никогда не удаляются.
- Для удаления базы данных или каталога данных нужно подтвердить действие вводом DELETE.
- Если удалить только контейнеры и сохранить данные, повторный запуск install.sh в том же каталоге вернёт всё как было; если удаляете .env, но оставляете базу данных, сначала запишите указанный в нём WANMORY_DB_PASSWORD.
| Параметр | Описание |
|---|---|
--dir КАТАЛОГ | Задать каталог установки; по умолчанию ~/wanmory. |
-y | Без вопросов: удалить только контейнеры и сеть, сохранив все данные и конфигурацию. |
--purge | Без вопросов: удалить все пункты таблицы выше (кроме папок с фото). |
--dry-run | Только показать, что будет сделано, ничего не меняя. |