Как self-host 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"