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

Отримати VPS arrow_forward
eco Початковий Туторіал

Встановлення PhotoPrism на VPS

calendar_month Aug 09, 2026 schedule 23 хв. читання visibility 32 переглядів
Установка 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 перед оновленням, щоб переконатися у відсутності критичних змін, що вимагають ручного втручання.

Вирішення проблем + 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 або сторонніми додатками.

Чи був цей гайд корисним?

Ваш відгук допомагає нам покращувати гайди.

Share this post:

Надішліть гайд тому, кому він може стати в пригоді.

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.