bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Установка PhotoPrism на VPS: Docker, автоматическая индексация и доступ по домену

calendar_month Aug 09, 2026 schedule 23 мин. чтения visibility 28 просмотров
Установка PhotoPrism на VPS: Docker, автоматическая индексация и доступ по домену
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Установка PhotoPrism на VPS: Docker, автоматическая индексация и доступ по домену

TL;DR

В этом подробном руководстве мы шаг за шагом настроим PhotoPrism – мощное, самохостимое приложение для управления фотографиями и видео – на вашем виртуальном или выделенном сервере (VPS/Dedicated) с использованием Docker. Вы узнаете, как установить PhotoPrism, настроить автоматическую индексацию медиафайлов и обеспечить безопасный доступ к вашей фотобиблиотеке через доменное имя с HTTPS, используя обратный прокси-сервер Caddy.

  • Настройка PhotoPrism и его зависимостей (MariaDB) с помощью Docker Compose.
  • Обеспечение безопасного доступа к PhotoPrism через доменное имя и HTTPS с использованием Caddy.
  • Настройка автоматической индексации новых фотографий и видео.
  • Рекомендации по выбору оптимального VPS-конфига и базовой защите сервера.
  • Стратегии резервного копирования и обслуживания для вашей медиатеки.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

В эпоху цифровых технологий каждый из нас накапливает гигабайты, а порой и терабайты фотографий и видео. Облачные сервисы, такие как Google Photos или iCloud, предлагают удобные решения, но часто вызывают вопросы о конфиденциальности, стоимости подписки и контроле над вашими данными. PhotoPrism – это элегантная альтернатива, позволяющая вам полностью владеть и управлять своей медиатекой на собственном сервере.

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

В результате этого руководства вы получите полностью функциональный PhotoPrism, работающий на вашем VPS. Ваша медиатека будет доступна по собственному доменному имени (например, photos.yourdomain.com) с безопасным HTTPS-соединением, что обеспечит конфиденциальность и целостность данных. Мы настроим Docker Compose для легкого развертывания и управления PhotoPrism и его базой данных, а также автоматическую индексацию новых файлов, чтобы ваша библиотека всегда была актуальной.

Альтернативы: облачные сервисы против self-hosted на VPS

Когда речь идет об управлении фотографиями, существует два основных пути:

  • Облачные управляемые сервисы (Cloud-managed): Это такие решения, как Google Photos, Apple iCloud Photos, Dropbox Photos.
    • Плюсы: Максимальное удобство, не нужно беспокоиться об инфраструктуре, автоматические бэкапы, часто есть бесплатный уровень (с ограничениями).
    • Минусы: Зависимость от стороннего провайдера, вопросы конфиденциальности данных (кто имеет доступ к вашим фотографиям?), ограниченный контроль над функциями и хранилищем, растущие расходы по мере увеличения объема данных.
  • Самохостинг на VPS/Dedicated сервере (Self-hosted): Установка PhotoPrism (или аналогов, таких как Nextcloud с приложением Photos, Immich) на свой собственный сервер.
    • Плюсы: Полный контроль над вашими данными и их конфиденциальностью, отсутствие абонентской платы за сервис (только за сервер), гибкость в настройке, возможность интеграции с другими вашими сервисами.
    • Минусы: Требует технических знаний для установки и обслуживания, вы несете ответственность за бэкапы и безопасность сервера, первоначальные временные затраты на настройку.

Выбор self-hosted на VPS идеален для тех, кто ценит конфиденциальность, хочет иметь полный контроль над своей цифровой жизнью и готов инвестировать время в настройку. Это позволяет создать личное, мощное и надежное фотохранилище, независимое от корпоративных политик и ценовой политики облачных гигантов.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Выбор подходящего VPS – ключевой шаг для стабильной и быстрой работы PhotoPrism. Требования к ресурсам зависят от размера вашей медиатеки, количества пользователей и интенсивности индексации.

Минимальные требования

  • CPU: 2 ядра. PhotoPrism активно использует процессор для индексации, распознавания лиц и объектов, транскодирования видео. Чем больше ядер, тем быстрее будет проходить первоначальная индексация и обработка новых файлов.
  • RAM: 4 ГБ. PhotoPrism, особенно при активной индексации и работе с большой базой данных (MariaDB), может потреблять значительное количество оперативной памяти. 4 ГБ – это комфортный минимум. Если у вас очень большая библиотека (сотни тысяч фотографий) или планируется много одновременных пользователей, рассмотрите 8 ГБ.
  • Диск:
    • Тип: SSD или NVMe. Скорость диска критична для быстрой индексации и доступа к медиафайлам. NVMe предпочтительнее для больших библиотек.
    • Объем: От 100 ГБ. Основной объем будет занимать ваша медиатека. Помимо этого, PhotoPrism создает кэш и миниатюры, которые также требуют места. Рассчитывайте объем диска с запасом, исходя из текущего размера вашей коллекции и планов по её расширению. Например, если у вас 500 ГБ фотографий, вам потребуется минимум 600-700 ГБ дискового пространства для системы, базы данных, кэша и самих файлов.
  • Сеть: 100 Мбит/с или 1 Гбит/с. Хорошая пропускная способность сети важна для быстрой загрузки и скачивания фотографий, особенно если вы планируете делиться ими или работать с ними удаленно.

Конкретный VPS-план под задачу (на примере)

Для комфортной работы с медиатекой до 1-2 ТБ и несколькими активными пользователями, рекомендуем рассмотреть VPS-план со следующими характеристиками:

  • CPU: 4 ядра
  • RAM: 8 ГБ
  • Диск: 1 ТБ NVMe SSD
  • Сеть: 1 Гбит/с

Такой конфигурации будет достаточно для большинства домашних и небольших командных сценариев использования PhotoPrism. Для аренды VPS с указанными характеристиками можно рассмотреть VPS с такими характеристиками у надежного провайдера.

Когда нужен dedicated, а не VPS

Выделенный сервер (dedicated server) становится необходим, если:

  • Ваша медиатека превышает 5-10 ТБ и продолжает активно расти.
  • Вы планируете использовать PhotoPrism для большого количества пользователей (десятки и более) с интенсивной нагрузкой.
  • Вам нужна максимальная производительность дисковой подсистемы (например, RAID-массивы с высокоскоростными HDD или NVMe).
  • Вы хотите полный физический контроль над оборудованием и максимальную гибкость в настройке.

Для большинства индивидуальных пользователей и небольших команд VPS будет более чем достаточно и экономически выгоднее. Однако, если вы видите, что требования к ресурсам выходят за рамки стандартных VPS-предложений, рассмотрите подходящий dedicated сервер.

Локация: на что влияет

Выбор локации VPS-сервера влияет на несколько ключевых факторов:

  • Скорость доступа (задержка/ping): Чем ближе сервер к вам и вашим основным пользователям, тем меньше задержка и быстрее загрузка страниц и медиафайлов. Выбирайте локацию, которая географически близка к большинству ваших пользователей.
  • Законодательство: В разных странах действуют разные законы о хранении данных и конфиденциальности. Убедитесь, что выбранная вами локация соответствует вашим требованиям к правовому регулированию.
  • Стоимость: Цены на VPS могут незначительно варьироваться в зависимости от локации из-за различий в стоимости электроэнергии, инфраструктуры и налогов.

В целом, для PhotoPrism приоритетом является скорость доступа, поэтому выбирайте дата-центр, расположенный в вашем регионе или регионе ваших основных пользователей.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Перед установкой PhotoPrism необходимо выполнить базовую настройку и защиту вашего свежего VPS. Мы будем использовать Ubuntu Server 24.04 LTS как основу, поскольку это одна из самых популярных и хорошо поддерживаемых операционных систем для серверов.

1. Подключение по SSH и создание нового пользователя

Подключитесь к вашему серверу как пользователь root, используя IP-адрес, предоставленный вашим провайдером. Замените YOUR_SERVER_IP на фактический IP-адрес вашего VPS.


ssh root@YOUR_SERVER_IP

После подключения создайте нового пользователя с правами sudo. Это лучшая практика безопасности, так как работа под root может быть опасна.


adduser yourusername # Создаем нового пользователя, замените 'yourusername'
usermod -aG sudo yourusername # Добавляем его в группу sudo

Установите пароль для нового пользователя, когда система запросит.

2. Настройка SSH-ключей (рекомендуется)

Использование SSH-ключей вместо паролей значительно повышает безопасность. Если у вас еще нет SSH-ключа, сгенерируйте его на вашей локальной машине:


ssh-keygen -t rsa -b 4096 # Генерируем новый SSH-ключ

Затем скопируйте публичный ключ на сервер. Замените yourusername и YOUR_SERVER_IP на свои данные.


ssh-copy-id yourusername@YOUR_SERVER_IP # Копируем публичный ключ на сервер

Теперь выйдите из сессии root и войдите как новый пользователь:


exit
ssh yourusername@YOUR_SERVER_IP # Входим как новый пользователь

Отключите вход по паролю для root и, опционально, для всех пользователей в файле /etc/ssh/sshd_config, чтобы разрешить только вход по ключу. Откройте файл:


sudo nano /etc/ssh/sshd_config

Найдите и измените (или добавьте) следующие строки:


PermitRootLogin no
PasswordAuthentication no # Отключает вход по паролю для всех пользователей
ChallengeResponseAuthentication no
UsePAM no

Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X). Перезапустите SSH-сервис:


sudo systemctl restart sshd

Важно: Перед тем как отключить вход по паролю, убедитесь, что вы можете войти с помощью SSH-ключа. Иначе вы можете потерять доступ к серверу.

3. Обновление системы

Всегда начинайте с обновления пакетной базы и установленных пакетов до актуальных версий.


sudo apt update # Обновление списка пакетов
sudo apt upgrade -y # Обновление установленных пакетов
sudo apt autoremove -y # Удаление ненужных зависимостей

4. Настройка брандмауэра (UFW)

Брандмауэр Uncomplicated Firewall (UFW) прост в настройке и является первой линией защиты. По умолчанию он блокирует все входящие соединения.


sudo apt install ufw -y # Установка UFW
sudo ufw allow OpenSSH # Разрешаем SSH-подключение (порт 22)
sudo ufw allow http # Разрешаем HTTP (порт 80)
sudo ufw allow https # Разрешаем HTTPS (порт 443)
sudo ufw enable # Включаем брандмауэр
sudo ufw status verbose # Проверяем статус UFW

Если вы используете другой порт для SSH, разрешите его вместо OpenSSH, например sudo ufw allow 2222/tcp.

5. Установка Fail2Ban

Fail2Ban защищает ваш сервер от атак методом подбора пароля (brute-force) путем временной блокировки IP-адресов, с которых поступают неудачные попытки входа.


sudo apt install fail2ban -y # Установка Fail2Ban
sudo systemctl enable fail2ban # Включение автоматического запуска Fail2Ban
sudo systemctl start fail2ban # Запуск Fail2Ban

По умолчанию Fail2Ban уже настроен для защиты SSH. Вы можете создать файл /etc/fail2ban/jail.local для кастомных настроек, но для начала стандартных будет достаточно.

Теперь ваш сервер готов к установке Docker и PhotoPrism.

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

Для установки PhotoPrism мы будем использовать Docker и Docker Compose, так как это наиболее рекомендуемый и удобный способ развертывания. Docker позволяет изолировать приложение со всеми его зависимостями в контейнеры, что упрощает управление и обновление.

1. Установка Docker Engine

Установим Docker Engine, актуальный для 2026 года (предполагаем версию 26.x+). Мы будем использовать официальный репозиторий Docker.


# Обновляем список пакетов и устанавливаем необходимые зависимости
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# Добавляем официальный GPG-ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Добавляем репозиторий Docker в APT
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновляем список пакетов с учетом нового репозитория Docker
sudo apt update

# Устанавливаем Docker Engine, Docker CLI и containerd
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Добавляем текущего пользователя в группу docker для запуска команд без sudo
sudo usermod -aG docker yourusername

После добавления пользователя в группу docker, вам нужно выйти и снова войти в SSH-сессию, чтобы изменения вступили в силу:


exit
ssh yourusername@YOUR_SERVER_IP

Проверим, что Docker установлен корректно, запустив тестовый контейнер:


docker run hello-world # Запускаем тестовый контейнер Docker

Если вы видите сообщение "Hello from Docker!", значит, Docker установлен и работает.

2. Установка Docker Compose

Docker Compose обычно устанавливается как плагин к Docker CLI. Мы уже установили его на предыдущем шаге (docker-compose-plugin). Проверим версию:


docker compose version # Проверяем версию Docker Compose (должно быть 2.x.x)

3. Подготовка структуры каталогов для PhotoPrism

Создадим каталоги для хранения конфигурации PhotoPrism, базы данных и ваших медиафайлов. Это важно для сохранения данных при обновлении контейнеров.


mkdir -p ~/photoprism/config # Каталог для конфигурации PhotoPrism
mkdir -p ~/photoprism/storage # Каталог для кэша и вспомогательных файлов PhotoPrism
mkdir -p ~/photoprism/database # Каталог для базы данных MariaDB
mkdir -p ~/photoprism/originals # Каталог, куда вы будете загружать оригиналы фотографий и видео
mkdir -p ~/photoprism/import # Каталог для автоматического импорта (опционально)

При необходимости, вы можете изменить пути к этим каталогам. Например, если у вас есть отдельный диск для данных, вы можете смонтировать его в /mnt/data и использовать пути вроде /mnt/data/photoprism/originals.

4. Создание файла Docker Compose для PhotoPrism

Создадим файл docker-compose.yml, который определит сервисы PhotoPrism и MariaDB.


cd ~/photoprism
nano docker-compose.yml # Создаем и открываем файл docker-compose.yml

Вставьте следующее содержимое. Убедитесь, что заменили YOUR_PHOTOPRISM_PASSWORD, YOUR_MARIADB_ROOT_PASSWORD и YOUR_MARIADB_PASSWORD на надежные пароли.


version: "3.8"

services:
  photoprism:
    image: photoprism/photoprism:24.x.x # Актуальная версия PhotoPrism на 2026 год
    container_name: photoprism
    restart: unless-stopped
    ports:
      - "2342:2342" # Порт для доступа к PhotoPrism напрямую (будет проксироваться Caddy)
    environment:
      PHOTOPRISM_ADMIN_USER: "admin" # Имя пользователя PhotoPrism
      PHOTOPRISM_ADMIN_PASSWORD: "YOUR_PHOTOPRISM_PASSWORD" # Пароль пользователя PhotoPrism
      PHOTOPRISM_DATABASE_DRIVER: "mariadb"
      PHOTOPRISM_DATABASE_DSN: "mariadb://photoprism:YOUR_MARIADB_PASSWORD@mariadb:3306/photoprism?parseTime=true"
      PHOTOPRISM_ORIGINALS_PATH: "/photoprism/originals"
      PHOTOPRISM_IMPORT_PATH: "/photoprism/import" # Путь для автоматического импорта
      PHOTOPRISM_STORAGE_PATH: "/photoprism/storage"
      PHOTOPRISM_CONFIG_PATH: "/photoprism/config"
      PHOTOPRISM_DETECT_NSFW: "false" # Можно включить "true" для детектирования неприемлемого контента
      PHOTOPRISM_SIDECAR_YAML: "true" # Включить поддержку YAML-файлов для метаданных
      PHOTOPRISM_LOG_LEVEL: "info"
    volumes:
      - ./originals:/photoprism/originals # Ваши оригиналы фото и видео
      - ./import:/photoprism/import # Каталог для импорта
      - ./storage:/photoprism/storage # Кэш, миниатюры, sidecar-файлы
      - ./config:/photoprism/config # Конфигурация PhotoPrism
    depends_on:
      - mariadb

  mariadb:
    image: mariadb:11.x # Актуальная стабильная версия MariaDB на 2026 год
    container_name: mariadb
    restart: unless-stopped
    environment:
      MARIADB_ROOT_PASSWORD: "YOUR_MARIADB_ROOT_PASSWORD" # Пароль root для MariaDB
      MARIADB_DATABASE: "photoprism" # Имя базы данных для PhotoPrism
      MARIADB_USER: "photoprism" # Пользователь базы данных для PhotoPrism
      MARIADB_PASSWORD: "YOUR_MARIADB_PASSWORD" # Пароль пользователя базы данных
    volumes:
      - ./database:/var/lib/mysql # Каталог для данных базы данных
    # Если на сервере мало RAM, можно ограничить использование памяти для MariaDB
    # command: ["--max-connections=200", "--innodb-buffer-pool-size=256M"]

Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).

5. Запуск PhotoPrism с Docker Compose

Теперь запустите контейнеры:


docker compose up -d # Запускаем контейнеры в фоновом режиме

Это может занять некоторое время, пока Docker скачает образы и запустит сервисы. Проверьте статус контейнеров:


docker compose ps # Проверяем статус запущенных контейнеров

Оба контейнера (photoprism и mariadb) должны быть в статусе running.

На этом этапе PhotoPrism уже работает и доступен по IP-адресу вашего VPS на порту 2342 (например, http://YOUR_SERVER_IP:2342). Однако мы хотим настроить доступ по доменному имени с HTTPS, что будет сделано на следующем шаге.

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

Теперь, когда PhotoPrism запущен, необходимо настроить доступ к нему через доменное имя, обеспечить HTTPS-шифрование и, при необходимости, автоматизировать индексацию.

1. Настройка доменного имени

Прежде чем настраивать HTTPS, убедитесь, что ваш домен или поддомен указывает на IP-адрес вашего VPS. Например, если вы хотите получить доступ к PhotoPrism по адресу photos.yourdomain.com, вам нужно создать A-запись в DNS-настройках вашего домена, указывающую на IP-адрес вашего сервера:

  • Тип: A
  • Имя/Хост: photos (или @, если это основной домен)
  • Значение: YOUR_SERVER_IP

Подождите несколько минут (до нескольких часов), пока DNS-записи обновятся.

2. Настройка HTTPS с помощью Caddy (обратный прокси)

Caddy – это мощный, простой в использовании веб-сервер, который автоматически управляет HTTPS-сертификатами Let's Encrypt. Это идеальный выбор для self-hosted приложений.

Установка Caddy

Создадим отдельный каталог для Caddy и его конфигурации.


mkdir -p ~/caddy/Caddyfile # Каталог для конфигурации Caddy
mkdir -p ~/caddy/data # Каталог для данных Caddy (сертификаты)
mkdir -p ~/caddy/config # Каталог для конфигурации Caddy
cd ~/caddy

Создадим файл docker-compose.yml для Caddy в каталоге ~/caddy. Это позволит запускать Caddy как отдельный сервис, который будет проксировать запросы к PhotoPrism.


nano docker-compose.yml # Создаем и открываем файл docker-compose.yml для Caddy

Вставьте следующее содержимое:


version: "3.8"

services:
  caddy:
    image: caddy:2.7.x-alpine # Актуальная стабильная версия Caddy на 2026 год
    container_name: caddy
    restart: unless-stopped
    ports:
      - "80:80" # Для Let's Encrypt HTTP-01 challenge
      - "443:443" # Для HTTPS-трафика
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile # Файл конфигурации Caddy
      - ./data:/data # Место для хранения сертификатов и других данных Caddy
      - ./config:/config # Место для конфигурации Caddy
    network_mode: host # Используем host-сеть для прямого доступа к портам 80/443
    # Или, если вы хотите использовать отдельную сеть Docker
    # networks:
    #   - webproxy

# networks:
#   webproxy:
#     external: true # Используем существующую внешнюю сеть, если она есть
#     name: webproxy_network # Имя сети, которое нужно создать или использовать

Важно: Если вы используете network_mode: host, Caddy будет напрямую использовать порты 80 и 443 вашей VPS. Это самый простой способ. Если у вас уже есть другие сервисы, использующие эти порты, или вы предпочитаете более изолированный подход, вам нужно будет создать общую Docker-сеть и подключить к ней как Caddy, так и PhotoPrism.

Для простоты в этом руководстве мы будем использовать network_mode: host для Caddy и предполагать, что PhotoPrism доступен по порту 2342 на localhost (или IP-адресу контейнера, если вы используете отдельную сеть).

Конфигурация Caddyfile

Создайте файл Caddyfile в каталоге ~/caddy. Замените photos.yourdomain.com на ваш фактический домен.


nano ~/caddy/Caddyfile # Создаем и открываем Caddyfile

Вставьте следующее содержимое:


photos.yourdomain.com {
    # Включить сжатие данных
    encode gzip zstd

    # Настройки безопасности HTTP
    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
        Referrer-Policy "no-referrer-when-downgrade"
        Content-Security-Policy "default-src 'self' data: blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self'; connect-src 'self' ws: wss:"
    }

    # Проксирование запросов к PhotoPrism
    reverse_proxy localhost:2342 {
        # Дополнительные заголовки для корректной работы PhotoPrism через прокси
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Включить логирование (опционально)
    log {
        output file /var/log/caddy/access.log
    }
}

Сохраните файл (Ctrl+O, Enter) и выйдите (Ctrl+X).

Создайте каталог для логов Caddy:


sudo mkdir -p /var/log/caddy
sudo chown -R yourusername:yourusername /var/log/caddy # Убедитесь, что пользователь имеет права на запись
Запуск Caddy

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


cd ~/caddy
docker compose up -d # Запускаем контейнер Caddy

Caddy автоматически получит SSL-сертификат от Let's Encrypt и настроит HTTPS для вашего домена. Теперь вы сможете получить доступ к PhotoPrism по адресу https://photos.yourdomain.com.

3. Проверка работоспособности

Откройте в браузере https://photos.yourdomain.com. Вы должны увидеть страницу входа PhotoPrism. Используйте логин admin и пароль, который вы указали в docker-compose.yml для PhotoPrism.

Вы также можете проверить доступность сервиса с помощью curl с сервера:


curl -I https://photos.yourdomain.com # Проверяем HTTP-заголовки

Если вы видите статус HTTP/2 200 и заголовки, указывающие на Caddy и PhotoPrism, значит все работает корректно.

4. Автоматическая индексация

PhotoPrism может автоматически индексировать новые файлы, помещенные в каталог originals или import. Для автоматического сканирования новых файлов можно использовать встроенную функцию PhotoPrism или настроить cron-задание.

Использование встроенной функции PhotoPrism

PhotoPrism имеет встроенный планировщик, который может периодически сканировать новые файлы. Вы можете настроить это через веб-интерфейс в разделе "Настройки" -> "Библиотека".

Использование Cron-задания (для более точного контроля)

Вы можете создать cron-задание на вашем VPS, которое будет вызывать команду индексации PhotoPrism.


sudo crontab -e # Открываем crontab для root-пользователя (или yourusername, если он в группе docker)

Добавьте следующую строку для запуска индексации, например, каждый час:


0     cd /home/yourusername/photoprism && docker compose exec photoprism photoprism index --cleanup --scan-originals --import

Эта команда переходит в каталог ~/photoprism, затем выполняет команду photoprism index внутри контейнера PhotoPrism.

  • --cleanup: Удаляет метаданные для файлов, которые больше не существуют.
  • --scan-originals: Сканирует каталог оригиналов на предмет новых файлов.
  • --import: Перемещает файлы из каталога import в originals после обработки.

Замените /home/yourusername/photoprism на ваш фактический путь к файлу docker-compose.yml.

Сохраните и закройте файл. Теперь PhotoPrism будет автоматически индексировать новые медиафайлы.

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

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

Что бэкапить

Для PhotoPrism необходимо резервировать три основных компонента:

  1. Оригиналы медиафайлов: Это самые важные данные. Каталог ~/photoprism/originals.
  2. База данных PhotoPrism (MariaDB): Содержит всю информацию об индексации, метаданные, лица, объекты, альбомы и т.д. Каталог ~/photoprism/database.
  3. Конфигурация PhotoPrism: Файлы конфигурации и кэш. Каталог ~/photoprism/config и ~/photoprism/storage (хотя storage можно восстановить, лучше иметь его бэкап).
  4. Конфигурация Caddy: Файл ~/caddy/Caddyfile и каталог ~/caddy/data (для сертификатов).

Простой скрипт автобэкапа (cron + restic)

Restic – это современный, быстрый и безопасный инструмент для резервного копирования, который поддерживает дедупликацию, шифрование и множество бэкендов (S3, SFTP, MinIO и т.д.).

1. Установка Restic

sudo apt install restic -y # Устанавливаем Restic
2. Подготовка репозитория Restic

В качестве примера будем использовать SFTP-сервер (например, отдельный VPS или NAS). Замените sftp:[email protected]:/path/to/repo на ваш фактический путь. Также, создайте надежный пароль для репозитория и сохраните его в безопасном месте.


# Установите переменную окружения для пароля репозитория
export RESTIC_PASSWORD="your_restic_repository_password"

# Инициализируем репозиторий Restic
restic init --repo sftp:[email protected]:/path/to/repo
3. Создание скрипта бэкапа

Создайте файл скрипта, например, ~/backup_photoprism.sh:


nano ~/backup_photoprism.sh

Вставьте следующее содержимое. Замените /home/yourusername/photoprism, sftp:[email protected]:/path/to/repo и your_restic_repository_password на свои значения.


#!/bin/bash

# Каталог, где находится docker-compose.yml для PhotoPrism
PHOTOPRISM_DIR="/home/yourusername/photoprism"
CADDY_DIR="/home/yourusername/caddy"

# Переменные для Restic
RESTIC_REPO="sftp:[email protected]:/path/to/repo"
RESTIC_PASSWORD="your_restic_repository_password"

# Путь к лог-файлу
LOG_FILE="/var/log/photoprism_backup.log"

# Функция для вывода в лог
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | sudo tee -a "$LOG_FILE"
}

log "--- Запуск бэкапа PhotoPrism ---"

# 1. Бэкап базы данных MariaDB
log "Создание дампа базы данных MariaDB..."
docker compose -f "$PHOTOPRISM_DIR/docker-compose.yml" exec mariadb mariadb-dump -u photoprism -p"$MARIADB_PASSWORD" photoprism > "$PHOTOPRISM_DIR/database/photoprism_dump.sql"
if [ $? -eq 0 ]; then
    log "Дамп базы данных успешно создан."
else
    log "Ошибка при создании дампа базы данных."
    exit 1
fi

# 2. Выполнение бэкапа с Restic
log "Запуск Restic бэкапа..."
export RESTIC_PASSWORD="$RESTIC_PASSWORD" # Устанавливаем пароль для текущей сессии
restic backup \
    --repo "$RESTIC_REPO" \
    "$PHOTOPRISM_DIR/originals" \
    "$PHOTOPRISM_DIR/database" \
    "$PHOTOPRISM_DIR/config" \
    "$PHOTOPRISM_DIR/storage" \
    "$CADDY_DIR/Caddyfile" \
    "$CADDY_DIR/data" \
    --exclude "$PHOTOPRISM_DIR/database/photoprism_dump.sql" \
    --tag "photoprism-daily" \
    --verbose \
    >> "$LOG_FILE" 2>&1

if [ $? -eq 0 ]; then
    log "Restic бэкап успешно завершен."
else
    log "Ошибка при выполнении Restic бэкапа."
    exit 1
fi

# 3. Удаление старых снапшотов (политика retention)
log "Очистка старых снапшотов Restic..."
restic forget \
    --repo "$RESTIC_REPO" \
    --tag "photoprism-daily" \
    --keep-daily 7 \
    --keep-weekly 4 \
    --keep-monthly 6 \
    --prune \
    >> "$LOG_FILE" 2>&1

if [ $? -eq 0 ]; then
    log "Очистка снапшотов Restic успешно завершена."
else
    log "Ошибка при очистке снапшотов Restic."
    exit 1
fi

# 4. Удаление временного дампа БД
rm "$PHOTOPRISM_DIR/database/photoprism_dump.sql"
log "Временный дамп БД удален."

log "--- Бэкап PhotoPrism завершен ---"

Сделайте скрипт исполняемым:


chmod +x ~/backup_photoprism.sh

Создайте файл .env в каталоге ~/photoprism для хранения пароля MariaDB, чтобы не прописывать его в скрипте напрямую (лучше, чем прямо в скрипте):


nano ~/photoprism/.env

Добавьте:


MARIADB_PASSWORD="YOUR_MARIADB_PASSWORD"

Замените YOUR_MARIADB_PASSWORD на пароль, который вы использовали в docker-compose.yml. Затем измените строку дампа БД в скрипте на:


docker compose -f "$PHOTOPRISM_DIR/docker-compose.yml" exec mariadb mariadb-dump -u photoprism -p"${MARIADB_PASSWORD}" photoprism > "$PHOTOPRISM_DIR/database/photoprism_dump.sql"

Или используйте docker compose exec mariadb sh -c "exec mariadb-dump -u photoprism -p\"$MARIADB_PASSWORD\" photoprism" > "$PHOTOPRISM_DIR/database/photoprism_dump.sql".

4. Настройка Cron-задания для бэкапа

Добавьте скрипт в Cron для ежедневного выполнения:


sudo crontab -e

Добавьте строку (например, в 3:00 ночи каждый день):


0 3   * /home/yourusername/backup_photoprism.sh >> /var/log/photoprism_backup.log 2>&1

Убедитесь, что каталог /var/log/ существует и доступен для записи.

Куда складывать бэкапы

  • Внешний S3-совместимый объектный сторадж: Наиболее надежный и масштабируемый вариант (AWS S3, Backblaze B2, DigitalOcean Spaces). Restic отлично работает с S3.
  • Отдельный VPS: Небольшой, недорогой VPS в другом дата-центре для хранения бэкапов через SFTP.
  • Сетевое хранилище (NAS): Если у вас есть домашний NAS, можно настроить SFTP-доступ к нему.

Никогда не храните бэкапы на том же сервере, что и оригиналы данных. Принцип 3-2-1 бэкапа (3 копии данных, на 2 разных носителях, 1 из которых находится вне площадки) – это золотой стандарт.

Обновления: rolling vs maintenance window

Регулярные обновления важны для безопасности и получения новых функций.

  • ОС и Docker: Рекомендуется обновлять в рамках "окна обслуживания" (maintenance window), когда нагрузка на сервер минимальна.
    
    sudo apt update && sudo apt upgrade -y
    sudo reboot # Перезагрузка после обновления ядра или критических компонентов
    
  • PhotoPrism и Caddy (Docker-контейнеры): Для обновления Docker-контейнеров достаточно остановить их, скачать новые образы и запустить снова.
    
    # Обновление PhotoPrism
    cd ~/photoprism
    docker compose pull photoprism mariadb # Скачать новые образы
    docker compose up -d # Пересоздать контейнеры с новыми образами
    
    # Обновление Caddy
    cd ~/caddy
    docker compose pull caddy # Скачать новый образ
    docker compose up -d # Пересоздать контейнер с новым образом
    

    Это можно делать чаще, так как риски минимальны. Всегда проверяйте Release Notes PhotoPrism перед обновлением, чтобы убедиться в отсутствии критических изменений, требующих ручного вмешательства.

Troubleshooting + FAQ

В этом разделе собраны типичные проблемы и ответы на часто задаваемые вопросы, которые могут возникнуть при установке и использовании PhotoPrism на VPS.

Не могу получить доступ к PhotoPrism через домен (502 Bad Gateway / Connection Refused)

Что проверить:

  1. DNS-записи: Убедитесь, что ваша A-запись для домена (например, photos.yourdomain.com) корректно указывает на IP-адрес вашего VPS. Используйте dig photos.yourdomain.com на локальной машине.
  2. Caddy: Проверьте, что контейнер Caddy запущен: docker compose -f ~/caddy/docker-compose.yml ps. Убедитесь, что Caddyfile настроен правильно (домен, порт PhotoPrism). Просмотрите логи Caddy: docker compose -f ~/caddy/docker-compose.yml logs -f. Возможно, Caddy не смог получить SSL-сертификат (проверьте, что порты 80 и 443 открыты и не заняты другим сервисом).
  3. PhotoPrism: Убедитесь, что контейнер PhotoPrism запущен: docker compose -f ~/photoprism/docker-compose.yml ps. Проверьте логи PhotoPrism: docker compose -f ~/photoprism/docker-compose.yml logs -f. Убедитесь, что PhotoPrism слушает на порту 2342 внутри Docker-сети.
  4. Брандмауэр (UFW): Убедитесь, что порты 80, 443 и 22 (SSH) открыты: sudo ufw status.

PhotoPrism медленно индексирует фотографии или работает медленно

Что проверить:

  1. Ресурсы VPS: Проверьте использование CPU, RAM и I/O диска с помощью команд htop, free -h, iostat -x 1. Если CPU постоянно загружен на 100%, RAM заполнена или I/O диска высок, возможно, ваш VPS не справляется с нагрузкой.
  2. Тип диска: Убедитесь, что вы используете SSD или NVMe. HDD значительно замедлит индексацию.
  3. Настройки PhotoPrism: В веб-интерфейсе PhotoPrism в разделе "Настройки" -> "Библиотека" можно управлять настройками индексации, например, отключить некоторые ресурсоемкие функции (распознавание лиц, объектов), если они не критичны.
  4. База данных: Если MariaDB медленно отвечает, проверьте ее логи. Убедитесь, что она имеет достаточно RAM.

Не могу загрузить файлы в PhotoPrism

Что проверить:

  1. Права доступа: Убедитесь, что у пользователя Docker (или root, если запускаете без sudo) есть права на запись в каталоги ~/photoprism/originals и ~/photoprism/import на хост-системе. Можно попробовать sudo chmod -R 777 ~/photoprism/originals ~/photoprism/import (хотя это не лучшая практика безопасности, но поможет диагностировать проблему).
  2. Место на диске: Проверьте свободное место на диске: df -h. Если диск заполнен, загрузка будет невозможна.
  3. Размер файла: Проверьте, нет ли ограничений на размер файла в PhotoPrism или Caddy. По умолчанию PhotoPrism поддерживает большие файлы, но Caddy может иметь лимиты на размер запроса (обычно по умолчанию достаточно).

Какой VPS-конфиг минимально подойдёт?

Для запуска PhotoPrism с небольшой библиотекой (до 100-200 ГБ) и 1-2 пользователями минимально подойдёт VPS с 2 ядрами CPU, 4 ГБ RAM и 200-300 ГБ NVMe/SSD диска. Однако для комфортной работы, особенно с более крупными медиатеками и активной индексацией, рекомендуется увеличивать эти параметры, в первую очередь объем RAM и скорость диска.

Что выбрать — VPS или dedicated для этой задачи?

Для большинства пользователей, включая разработчиков, соло-фаундеров, игроков и криптоэнтузиастов, VPS будет оптимальным выбором. Он предлагает достаточную производительность, гибкость и экономичность. Выделенный сервер (dedicated) имеет смысл рассматривать только в случае очень больших медиатек (несколько терабайт и более), множества активных пользователей или специфических требований к производительности дисковой подсистемы, которые не может удовлетворить VPS (например, аппаратный RAID). VPS обеспечивает хороший баланс между стоимостью и производительностью для личного или небольшого командного использования PhotoPrism.

Как обновить PhotoPrism или Caddy?

Для обновления контейнеров PhotoPrism или Caddy достаточно выполнить следующие шаги в соответствующих каталогах (~/photoprism или ~/caddy):


docker compose pull # Скачать последнюю версию образа
docker compose up -d # Пересоздать контейнер, используя новый образ

Это скачает самую свежую версию образа, указанную в docker-compose.yml (например, photoprism/photoprism:24.x.x), и перезапустит контейнер с новым образом, сохраняя все ваши данные, так как они хранятся в постоянных томах.

Как восстановить PhotoPrism из бэкапа Restic?

Процесс восстановления включает:

  1. Установку нового VPS и настройку Docker/Docker Compose.
  2. Создание пустых каталогов для PhotoPrism и Caddy.
  3. Инициализацию Restic и восстановление данных из репозитория Restic в эти каталоги:
    
    export RESTIC_PASSWORD="your_restic_repository_password"
    restic restore latest --repo sftp:[email protected]:/path/to/repo --target /home/yourusername/ # Восстановить в корневой каталог пользователя
    
  4. Запуск контейнеров PhotoPrism и Caddy с восстановленными данными.
  5. Проверка и, возможно, повторная индексация в PhotoPrism, если база данных была сильно повреждена или не была восстановлена корректно.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно установили и настроили PhotoPrism на вашем VPS, обеспечив ему безопасный доступ по доменному имени с HTTPS и автоматическую индексацию. Теперь у вас есть мощное, конфиденциальное и полностью контролируемое решение для управления вашей цифровой медиатекой, которое не зависит от сторонних облачных сервисов.

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

Следующие шаги:

  • Масштабирование хранилища: Если ваша медиатека продолжит расти, рассмотрите возможность подключения к VPS дополнительных дисков или сетевого хранилища (NFS/SMB) для расширения каталога originals.
  • Оптимизация производительности: Для очень больших библиотек можно рассмотреть оптимизацию настроек MariaDB (например, увеличение innodb_buffer_pool_size) или использование более мощной базы данных, такой как PostgreSQL, если PhotoPrism будет поддерживать ее в будущем как основную.
  • Интеграция с мобильными приложениями: Изучите возможности синхронизации фотографий с мобильных устройств напрямую в каталог импорта PhotoPrism, используя WebDAV или другие протоколы, поддерживаемые PhotoPrism или сторонними приложениями.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

Telegram VKVK WhatsApp Facebook LinkedIn XX

установка photoprism на vps: docker, автоматическая индексация и доступ по домену
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.