Photoprism: развёртывание на собственном сервере
Полный гайд по установке Photoprism в Homelab: сравнение Docker и Proxmox, настройка Nginx Proxy Manager, подключение MinIO/S3 и ускорение ИИ‑распознавания.
Установка Docker и Docker Compose
Обновите систему и установите необходимые пакеты для работы Docker.
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER
newgrp docker
Установка Docker Compose
Скачайте и установите бинарный файл Docker Compose.
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Создание директории и файла конфигурации
Создайте папку для проекта и файл docker-compose.yml с конфигурацией Photoprism и базы данных MariaDB.
mkdir ~/photoprism && cd ~/photoprism
Настройка docker-compose.yml
Создайте файл docker-compose.yml с настройками контейнеров Photoprism и MariaDB. Укажите пароли и пути к папкам с фотографиями.
version: '3.8'
services:
photoprism:
image: photoprism/photoprism:latest
container_name: photoprism
restart: unless-stopped
ports:
- "2342:2342"
environment:
PHOTOPRISM_ADMIN_PASSWORD: "ВашСложныйПароль123!"
PHOTOPRISM_AUTH_MODE: "password"
PHOTOPRISM_SITE_URL: "https://photos.example.com"
PHOTOPRISM_SITE_TITLE: "Моя Фототека"
PHOTOPRISM_DATABASE_DRIVER: "mysql"
PHOTOPRISM_DATABASE_SERVER: "db:3306"
PHOTOPRISM_DATABASE_NAME: "photoprism"
PHOTOPRISM_DATABASE_USER: "photoprism"
PHOTOPRISM_DATABASE_PASSWORD: "DBPassword123!"
PHOTOPRISM_EXIF_BRUTEFORCE: "true"
PHOTOPRISM_FFMPEG: "true"
volumes:
- ./photoprism/storage:/photoprism/storage
- /путь/к/вашим/фото:/photoprism/import
- /путь/к/вашим/фото:/photoprism/originals
depends_on:
- db
networks:
- photoprism-net
db:
image: mariadb:10.11
container_name: photoprism-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "RootDBPassword123!"
MYSQL_DATABASE: "photoprism"
MYSQL_USER: "photoprism"
MYSQL_PASSWORD: "DBPassword123!"
volumes:
- ./mariadb:/var/lib/mysql
networks:
- photoprism-net
networks:
photoprism-net:
driver: bridge
Запуск контейнеров
Запустите контейнеры Photoprism и MariaDB в фоновом режиме.
docker-compose up -d
Первоначальная настройка
Проверьте логи на наличие ошибок, затем откройте веб-интерфейс по адресу http://IP_сервера:2342. Войдите с логином 'admin' и паролем, указанным в конфиге. Перейдите в Settings -> Library и нажмите 'Start Indexing' для сканирования фотографий.
docker-compose logs -f photoprism
Настройка доступа через Nginx Proxy Manager
Для безопасного доступа из интернета добавьте Nginx Proxy Manager в docker-compose.yml. Запустите его, зайдите на порт 81, настройте Proxy Host на ваш домен,指向 на photoprism:2342, и получите SSL сертификат Let's Encrypt.
nginx-proxy-manager:
image: jc21/nginx-proxy-manager:latest
container_name: npm
restart: unless-stopped
ports:
- "80:80"
- "81:81"
- "443:443"
volumes:
- ./npm/data:/data
- ./npm/letsencrypt:/etc/letsencrypt
networks:
- photoprism-net
Интеграция с внешним хранилищем (MinIO/S3)
Добавьте сервис MinIO в docker-compose.yml для использования S3-совместимого хранилища. После запуска создайте бакет и настройте переменные окружения Photoprism (PHOTOPRISM_S3_ENDPOINT, PHOTOPRISM_S3_ACCESS_KEY и др.) для подключения к нему.
minio:
image: minio/minio:latest
container_name: minio
restart: unless-stopped
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: "minioadmin"
MINIO_ROOT_PASSWORD: "minioadmin123!"
volumes:
- ./minio/data:/data
command: server /data --console-address ":9001"
networks:
- photoprism-net
Активация AI-распознавания
Включите TensorFlow и распознавание лиц в файле docker-compose.yml, добавив соответствующие переменные окружения. Перезапустите контейнер для применения изменений.
PHOTOPRISM_TENSORFLOW: "true"
PHOTOPRISM_TENSORFLOW_MODELS: "/photoprism/storage/models"
PHOTOPRISM_FACE_RECOGNITION: "true"
Настройка автоматического бэкапа
Создайте скрипт backup.sh для резервного копирования данных Photoprism и базы данных MariaDB. Добавьте выполнение скрипта в cron для регулярного создания бэкапов.
#!/bin/bash
BACKUP_DIR="/backup/photoprism-$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# Бэкап данных Photoprism
docker run --rm -v ~/photoprism/photoprism/storage:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/photoprism-storage.tar.gz -C /data .
# Бэкап MariaDB
docker exec photoprism-db mysqldump -u photoprism -pDBPassword123! photoprism > $BACKUP_DIR/photoprism.sql
tar czf $BACKUP_DIR.tar.gz $BACKUP_DIR
rm -rf $BACKUP_DIR
echo "Backup created: $BACKUP_DIR.tar.gz"
Руководство: Как развернуть Photoprism — ИИ-фотоприложение для децентрализованной сети
Photoprism — это самохостинговое решение для просмотра, организации и поиска фотографий, использующее искусственный интеллект для анализа метаданных и распознавания объектов. В отличие от облачных сервисов, вы полностью контролируете свои данные. В этом руководстве мы подробно разберем, как развернуть Photoprism на вашем сервере, настроить базу данных, внешний доступ, интеграцию с хранилищами и обеспечить безопасность.
Предварительные требования
Перед установкой убедитесь, что у вас есть:
- Сервер: Linux-машина (Ubuntu 22.04 LTS или аналогичная) с минимум 4 ГБ ОЗУ (рекомендуется 8+ ГБ для AI-обработки) и 2-4 ядрами CPU.
- Docker и Docker Compose: Photoprism работает в контейнерах.
- Установка Docker:
sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io sudo usermod -aG docker $USER newgrp docker - Установка Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
- Установка Docker:
- Домен и SSL: Домен (например,
photos.example.com) и сертификат Let's Encrypt для HTTPS. Для доступа из интернета потребуется статический IP или проброс портов (80/443). - Оборудование для хранения: Достаточно места на диске для фотографий (минимум 100 ГБ).
Способ 1: Быстрый старт с Docker Compose (рекомендуемый)
Это самый простой и поддерживаемый метод. Мы используем официальный docker-compose.yml от Photoprism.
-
Создайте директорию для проекта:
mkdir ~/photoprism && cd ~/photoprism -
Скачайте шаблон
docker-compose.ymlс официального сайта или создайте его вручную. Пример конфигурации с MariaDB:version: '3.8' services: photoprism: image: photoprism/photoprism:latest container_name: photoprism restart: unless-stopped ports: - "2342:2342" # Веб-интерфейс environment: PHOTOPRISM_ADMIN_PASSWORD: "ВашСложныйПароль123!" PHOTOPRISM_AUTH_MODE: "password" PHOTOPRISM_SITE_URL: "https://photos.example.com" PHOTOPRISM_SITE_TITLE: "Моя Фототека" PHOTOPRISM_DATABASE_DRIVER: "mysql" PHOTOPRISM_DATABASE_SERVER: "db:3306" PHOTOPRISM_DATABASE_NAME: "photoprism" PHOTOPRISM_DATABASE_USER: "photoprism" PHOTOPRISM_DATABASE_PASSWORD: "DBPassword123!" PHOTOPRISM_EXIF_BRUTEFORCE: "true" # Для ускорения индексации PHOTOPRISM_FFMPEG: "true" # Для видео volumes: - ./photoprism/storage:/photoprism/storage - /путь/к/вашим/фото:/photoprism/import # Монтирование папки с фото - /путь/к/вашим/фото:/photoprism/originals # Для оригиналов depends_on: - db networks: - photoprism-net db: image: mariadb:10.11 container_name: photoprism-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: "RootDBPassword123!" MYSQL_DATABASE: "photoprism" MYSQL_USER: "photoprism" MYSQL_PASSWORD: "DBPassword123!" volumes: - ./mariadb:/var/lib/mysql networks: - photoprism-net networks: photoprism-net: driver: bridgeЗамените пароли и пути к томам на свои.
/путь/к/вашим/фото— это реальная папка на хосте (например,/home/user/photos). -
Запустите контейнеры:
docker-compose up -d -
Проверьте логи на ошибки:
docker-compose logs -f photoprism -
Откройте в браузере
http://IP_сервера:2342и войдите под логиномadminи паролем из конфига.
Способ 2: Развертывание Photoprism на Proxmox VE (LXC контейнер)
Proxmox VE позволяет запускать Photoprism в изолированном LXC-контейнере для лучшего контроля ресурсов.
-
Создайте LXC-контейнер в Proxmox VE:
- В веб-интерфейсе: Create CT -> Имя (например,
photoprism), ОС: Ubuntu 22.04, Ресурсы: 4+ ГБ RAM, 2+ ядра, 20+ ГБ диска. - Включите привилегированный режим (privileged) для Docker, если требуется FUSE (но лучше unprivileged с настройкой).
- В веб-интерфейсе: Create CT -> Имя (например,
-
Запустите контейнер и войдите через консоль Proxmox:
pct enter <ID_контейнера> -
Внутри LXC обновите систему и установите Docker (как в Способе 1):
apt update && apt install -y curl gpg # ... (установка Docker и Docker Compose) -
Создайте директорию и
docker-compose.yml(см. Способ 1). Убедитесь, что тома монтируются корректно: для LXC используйте bind mounts из хранилища Proxmox (например,/mnt/pve/storage/photos). -
Если возникает ошибка с
systemdв unprivileged LXC, добавьте в конфиг контейнера (/etc/pve/lxc/<id>.conf):lxc.cap.drop: lxc.mount.auto: "cgroup:rw" lxc.apparmor.profile: "unconfined" -
Запустите
docker-compose up -dи настройте сеть (проброс портов в Proxmox: Firewall -> Add Rule для 2342/TCP). -
Для доступа из интернета настройте Nginx Proxy Manager на хосте Proxmox (см. ниже).
Настройка базы данных (MariaDB/MySQL)
Photoprism поддерживает SQLite (для тестов) и MySQL/MariaDB (для продакшена). Используем MariaDB из docker-compose выше.
-
После запуска контейнера
db, подключитесь к нему для проверки:docker exec -it photoprism-db mysql -u photoprism -p # Введите пароль DBPassword123!Внутри MySQL:
SHOW DATABASES;— должно отобразитьphotoprism. -
Если вы настраиваете внешнюю БД (не в Docker):
- Установите MariaDB на хост:
sudo apt install -y mariadb-server. - Создайте пользователя и БД:
CREATE DATABASE photoprism; CREATE USER 'photoprism'@'localhost' IDENTIFIED BY 'DBPassword123!'; GRANT ALL PRIVILEGES ON photoprism.* TO 'photoprism'@'localhost'; FLUSH PRIVILEGES; - В
docker-compose.ymlукажитеPHOTOPRISM_DATABASE_SERVER: "host.docker.internal:3306"или IP хоста.
- Установите MariaDB на хост:
-
Перезапустите Photoprism:
docker-compose restart photoprism. -
Для оптимизации: добавьте в конфиг MariaDB (
/etc/mysql/mariadb.conf.d/50-server.cnf):innodb_buffer_pool_size = 1G query_cache_size = 128MИ перезапустите MySQL:
sudo systemctl restart mariadb.
Первый запуск и первоначальная настройка
- После
docker-compose up -dоткройтеhttp://IP:2342в браузере. - Войдите: логин
admin, пароль изPHOTOPRISM_ADMIN_PASSWORD. - Первоначальная настройка:
- В настройках (Settings -> General) установите часовой пояс (например,
Europe/Moscow). - Перейдите в раздел "Library" и нажмите "Start Indexing". Photoprism просканирует папку
/photoprism/originalsи добавит фото в библиотеку. Процесс может занять время в зависимости от объема (от минут до часов). - Секретный ключ (API Key): Генерируется автоматически в
storage/config/settings.yml. Для внешних интеграций (например, мобильных приложений) скопируйте его изdocker exec photoprism cat /photoprism/storage/config/settings.yml | grep secret.
- В настройках (Settings -> General) установите часовой пояс (например,
- Настройте AI: в Settings -> AI включите распознавание лиц и объектов (требует TensorFlow, см. ниже).
- Для первого запуска с нуля: добавьте тестовые фото в папку originals, запустите индексацию и проверьте поиск (например, по слову "cat").
Настройка доступа из интернета: Nginx Proxy Manager и Let's Encrypt
Для безопасного доступа используем Nginx Proxy Manager (NPM) в Docker.
-
Добавьте в
docker-compose.yml(или отдельный файл):nginx-proxy-manager: image: jc21/nginx-proxy-manager:latest container_name: npm restart: unless-stopped ports: - "80:80" - "81:81" # Веб-интерфейс - "443:443" volumes: - ./npm/data:/data - ./npm/letsencrypt:/etc/letsencrypt networks: - photoprism-net -
Запустите:
docker-compose up -d nginx-proxy-manager. -
Откройте
http://IP:81, войдите (логин:admin@example.com, пароль:changeme— смените в настройках). -
Настройте хост:
- Hosts -> Proxy Hosts -> Add.
- Domain:
photos.example.com. - Scheme:
http, Forward Hostname:photoprism, Port:2342. - SSL: Request a new SSL Certificate with Let's Encrypt (укажите email и включите "Force SSL").
- DNS: Укажите A-запись вашего домена на IP сервера.
-
Проверьте: откройте
https://photos.example.com. Если порты 80/443 заняты, пробросьте их на роутере (Port Forwarding).
Как импортировать и организовать медиа-файлы (Samba/NFS/FTP)
Photoprism не имеет встроенного файлового менеджера, поэтому используем внешние инструменты для копирования файлов в тома Docker.
-
Samba (Windows-совместимость): Установите Samba на хост:
sudo apt install -y samba. Добавьте в/etc/samba/smb.conf:[Photos] path = /путь/к/вашим/фото browseable = yes read only = no valid users = youruserСоздайте пароль:
sudo smbpasswd -a youruser. Перезапустите:sudo systemctl restart smbd. Теперь подключитесь с Windows:\\IP_сервера\Photosи копируйте файлы. После этого запустите индексацию в Photoprism. -
NFS (для Linux-клиентов): На хосте:
sudo apt install -y nfs-kernel-server. Добавьте в/etc/exports:/путь/к/вашим/фото *(rw,sync,no_subtree_check). Экспортируйте:sudo exportfs -a. На клиенте:sudo mount IP_сервера:/путь/к/вашим/фото /mnt/photos. -
FTP (FileZilla): Установите vsftpd:
sudo apt install -y vsftpd. Настройте/etc/vsftpd.conf:anonymous_enable=NO,local_enable=YES,write_enable=YES. Перезапустите:sudo systemctl restart vsftpd. Используйте FileZilla для загрузки в папку originals.
После импорта: в Photoprism -> Settings -> Library -> Rescan.
Интеграция с внешним хранилищем: Подключение к S3 и MinIO
Photoprism поддерживает S3-совместимые хранилища для originals.
-
Настройте MinIO (локальный S3-сервер) в Docker: Добавьте в
docker-compose.yml:minio: image: minio/minio:latest container_name: minio restart: unless-stopped ports: - "9000:9000" - "9001:9001" environment: MINIO_ROOT_USER: "minioadmin" MINIO_ROOT_PASSWORD: "minioadmin123!" volumes: - ./minio/data:/data command: server /data --console-address ":9001" networks: - photoprism-net -
Запустите MinIO, откройте
http://IP:9001, создайте бакетphotoprism-bucket. -
В Photoprism настройте S3 (через конфиг или UI):
- В
docker-compose.ymlдобавьте переменные:PHOTOPRISM_STORAGE_PATH: "/photoprism/storage" PHOTOPRISM_ORIGINALS_PATH: "/photoprism/s3" # Монтировать S3 как том нельзя, используем интеграцию PHOTOPRISM_S3_ENDPOINT: "http://minio:9000" PHOTOPRISM_S3_ACCESS_KEY: "minioadmin" PHOTOPRISM_S3_SECRET_KEY: "minioadmin123!" PHOTOPRISM_S3_BUCKET: "photoprism-bucket" PHOTOPRISM_S3_REGION: "us-east-1" - Для оригиналов: используйте интеграцию через API или монтируйте S3 через
s3fs(установитеs3fsна хост, монтируйте в том Docker).
- В
-
Для AWS S3: замените endpoint на
https://s3.amazonaws.com, добавьте ключи доступа из AWS IAM. -
Проверьте: загрузите файл в MinIO, запустите индексацию — фото появятся в библиотеке.
Настройка AI-распознавания лиц и метаданных (TensorFlow/Colab)
Photoprism использует TensorFlow для AI. В Docker это встроено, но требует ресурсов.
-
Активация AI:
- В
docker-compose.ymlдобавьте:PHOTOPRISM_TENSORFLOW: "true" PHOTOPRISM_TENSORFLOW_MODELS: "/photoprism/storage/models" PHOTOPRISM_FACE_RECOGNITION: "true" - Перезапустите контейнер.
- В
-
После индексации: перейдите в Settings -> People. Photoprism распознает лица автоматически (может занять часы для больших библиотек).
- Для ручной разметки: в People -> MergeFaces.
- Метаданные (EXIF): Photoprism извлекает их автоматически, если включено
PHOTOPRISM_EXIF_BRUTEFORCE.
-
Оптимизация для слабого железа: Если CPU слабый, отключите
PHOTOPRISM_TENSORFLOW: "false"и используйте предобученные модели. Для GPU (NVIDIA): добавьте--gpus allвdocker run, но в Compose это сложно — лучше использовать интеграцию с NVIDIA Docker. -
Google Colab для обучения (опционально, если локально не хватает ресурсов):
- Colab не подключается напрямую, но вы можете обучить модель (например, для кастомных лиц) в Colab с TensorFlow, экспортировать модель в формате Photoprism (ONNX или SavedModel), и скопировать в том
./photoprism/storage/models. - Пример скрипта в Colab:
import tensorflow as tf # Ваш код обучения... model.save('/content/drive/MyDrive/photoprism_model') - Скопируйте на сервер:
docker cp /путь/к/model photoprism:/photoprism/storage/models/. - Укажите путь в конфиге:
PHOTOPRISM_TENSORFLOW_MODELS: "/photoprism/storage/models".
- Colab не подключается напрямую, но вы можете обучить модель (например, для кастомных лиц) в Colab с TensorFlow, экспортировать модель в формате Photoprism (ONNX или SavedModel), и скопировать в том
Автоматический бэкап и восстановление Photoprism
Photoprism хранит данные в storage (конфиг, кэш) и БД. Бэкапите тома и базу.
-
Простой бэкап с Docker: Создайте скрипт
backup.sh:#!/bin/bash BACKUP_DIR="/backup/photoprism-$(date +%Y%m%d)" mkdir -p $BACKUP_DIR # Бэкап данных Photoprism docker run --rm -v ~/photoprism/photoprism/storage:/data -v $BACKUP_DIR:/backup alpine tar czf /backup/photoprism-storage.tar.gz -C /data . # Бэкап MariaDB docker exec photoprism-db mysqldump -u photoprism -pDBPassword123! photoprism > $BACKUP_DIR/photoprism.sql tar czf $BACKUP_DIR.tar.gz $BACKUP_DIR rm -rf $BACKUP_DIR echo "Backup created: $BACKUP_DIR.tar.gz"Добавьте в cron:
crontab -e->0 2 * * * /путь/к/backup.sh(ежедневно в 2:00). -
Восстановление:
- Остановите контейнеры:
docker-compose down. - Распакуйте бэкап:
tar xzf backup.tar.gz. - Восстановите storage:
docker run --rm -v ~/photoprism/photoprism/storage:/data -v /путь/к/backup:/backup alpine sh -c "cd /data && tar xzf /backup/photoprism-storage.tar.gz". - Восстановите БД:
docker exec -i photoprism-db mysql -u photoprism -pDBPassword123! photoprism < /путь/к/backup/photoprism.sql. - Запустите:
docker-compose up -d.
- Остановите контейнеры:
-
Продвинутый: Используйте BorgBackup или Duplicity для дедупликации, храните бэкапы на внешнем диске или в облаке.
Решение типичных проблем и оптимизация производительности
- Медленная индексация: Увеличьте
PHOTOPRISM_WORKERS(например, до 8). Отключите ненужные фичи:PHOTOPRISM_DISABLE_FACES: "true". - Ошибки подключения к БД: Проверьте сеть Docker (
docker network ls,docker network inspect photoprism-net). Убедитесь, что пароли совпадают. - Недостаток памяти: Добавьте swap:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile. Вdocker-composeдобавьтеmem_limit: 4g. - SSL-ошибки в NPM: Обновите сертификат в интерфейсе NPM -> SSL Certificates -> Renew. Проверьте DNS-делегирование.
- Оптимизация:
- Используйте SSD для томов.
- Настройте
PHOTOPRISM_CACHE_PATH: "/photoprism/storage/cache"на быстром диске. - Для больших библиотек: разбейте на тома (
/photoprism/originals/vacation,/photoprism/originals/family). - Мониторинг: Добавьте Prometheus с экспортами для Docker.
- Безопасность: Измените пароль админа, ограничьте доступ по IP в NPM, используйте VPN (WireGuard) для локального доступа.
Заключение: Безопасный и мощный аналог Google Photos у вас дома
Вы развернули Photoprism с базой данных, AI-обработкой, внешним доступом и бэкапами. Теперь у вас есть полный контроль над фото: поиск по лицам, объектам, датам; организация в альбомы; доступ через HTTPS. Для мобильно-стиля добавьте Photoprism Web App или интеграцию с Nextcloud. Если возникнут проблемы — проверьте логи Docker и документацию Photoprism. Удачи в децентрализованном хранении!