Встановлення Immich на VPS: розгортання self-hosted альтернативи Google Photos через Docker
TL;DR
У цьому посібнику ми розберемо процес встановлення Immich — найпотужнішого рішення для зберігання фотографій і відео на власному сервері, що швидко розвивається. Ми налаштуємо повноцінну екосистему з підтримкою розпізнавання облич, автоматичного бекапу з мобільних пристроїв та інтелектуального пошуку, використовуючи Docker і сучасні практики адміністрування. У результаті ви отримаєте приватну хмару, яка за функціоналом не поступається Google Photos, але повністю належить вам.
- Повна незалежність: Ваші дані зберігаються на вашому VPS, а не на серверах корпорацій.
- Інтелектуальні функції: Розпізнавання облич, пошук за об'єктами та геопозицією працюють локально.
- Безпека: Налаштування SSL-сертифікатів, Firewall та автоматичних бекапів.
- Масштабованість: Можливість підключення зовнішніх сховищ та оптимізація під великі бібліотеки (1ТБ+).
- Версія 2026: Усі команди та конфігурації актуальні для сучасних дистрибутивів Linux.
rocket_launch
Quick pick
Looking for a server that just works?
Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.
View VPS plans
arrow_forward
1. Що ми налаштовуємо і навіщо: Еволюція Self-hosted Photo Storage
Схема: 1. Що ми налаштовуємо і навіщо: Еволюція Self-hosted Photo Storage
Довгий час Google Photos залишався безальтернативним лідером для зберігання мобільних медіаархівів. Однак зміна політики безкоштовного зберігання та зростаючі побоювання користувачів щодо приватності даних призвели до вибухового зростання популярності self-hosted рішень. Immich — це не просто скрипт для перегляду картинок, це складна мікросервісна архітектура, написана на TypeScript та Dart, яка ставить за мету повторити та перевершити користувацький досвід комерційних хмар.
Чому варто вибрати Immich на власному VPS замість готових хмарних рішень?
- Контроль даних: Ви точно знаєте, де фізично знаходяться ваші файли. Жодні алгоритми модерації не заблокують ваш обліковий запис через хибнопозитивні спрацювання.
- Швидкість роботи: При використанні сучасного VPS з NVMe-дисками індексація та пошук працюють швидше, ніж у перевантажених хмарах.
- Відсутність підписок: Ви платите лише за ресурси сервера, а не за "оренду" місця за завищеними тарифами.
- Функціонал: Підтримка RAW-форматів, живих фото (Live Photos), розпізнавання облич на базі машинного навчання та зручні мобільні додатки для iOS та Android.
В рамках цього туторіалу ми пройдемо шлях від "голого" сервера до працюючого сервісу з налаштованим доменом та мобільним додатком.
2. Який VPS-конфіг потрібен під Immich у 2026 році
Схема: 2. Який VPS-конфіг потрібен під Immich у 2026 році
Immich — ресурсний проект. На відміну від простих статичних сайтів, він активно використовує Machine Learning (ML) для аналізу зображень, класифікації облич та генерації прев'ю. Це накладає певні вимоги до заліза.
| Ресурс |
Мінімум (для 1-2 користувачів) |
Рекомендовано (для сім'ї) |
Профі (10+ користувачів) |
| CPU |
2 ядра (x86_64) |
4-6 ядер |
8+ ядер / Dedicated |
| RAM |
4 GB |
8-12 GB |
16 GB+ |
| Disk |
40 GB SSD (система) |
200 GB+ NVMe |
1 TB+ (Block Storage/HDD) |
| OS |
Ubuntu 24.04 LTS |
Ubuntu 24.04 / Debian 12 |
Debian 12 |
Особливу увагу варто приділити оперативній пам'яті. Компонент immich-machine-learning може споживати значний обсяг RAM під час первинної індексації великої бібліотеки. Якщо пам'яті буде менше 4 ГБ, Docker може почати аварійно завершувати процеси (OOM Killer).
Для комфортної роботи та швидкої генерації прев'ю найкраще вибрати відповідний VPS з SSD або NVMe накопичувачами, оскільки база даних PostgreSQL та пошуковий рушій чутливі до затримок введення-виведення (IOPS).
Якщо ваша бібліотека перевищує 500 ГБ, розгляньте можливість підключення додаткового блочного сховища (Block Storage) або використання виділеного сервера (Dedicated), де можна встановити ємні HDD диски в RAID-масиві для підвищення надійності.
3. Підготовка сервера: Безпека та базові утиліти
Схема: 3. Підготовка сервера: Безпека та базові утиліти
Перш ніж встановлювати Docker, необхідно привести сервер до ладу. Ми припускаємо, що у вас є свіжа установка Ubuntu 24.04 або 26.04.
Першим ділом оновимо список пакетів і саму систему:
sudo apt update && sudo apt upgrade -y
Встановимо необхідні системні утиліти, які стануть у нагоді нам для діагностики та роботи:
sudo apt install -y curl wget git vim software-properties-common ufw fail2ban htop
Налаштування безпеки — критичний крок. Налаштуємо Firewall (UFW), дозволивши тільки SSH і порти для веб-трафіку:
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
Рекомендується також створити окремого користувача з правами sudo, щоб не працювати під root постійно:
adduser adminuser
usermod -aG sudo adminuser
Після цього краще налаштувати вхід по SSH-ключах і відключити вхід за паролем у файлі /etc/ssh/sshd_config.
rocket_launch
Quick pick
Looking for a server that just works?
Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.
View VPS plans
arrow_forward
4. Встановлення Docker і Docker Compose
Схема: 4. Встановлення Docker і Docker Compose
Immich поставляється у вигляді набору Docker-контейнерів. Це стандарт індустрії, який дозволяє уникнути конфліктів залежностей. У 2026 році ми використовуємо офіційний репозиторій Docker для отримання найсвіжіших версій.
Додаємо 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
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Додаємо репозиторій в список джерел:
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 Engine і Docker Compose плагін:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Перевіряємо коректність установки:
docker --version
docker compose version
Додайте свого користувача в групу docker, щоб запускати контейнери без sudo:
sudo usermod -aG docker $USER
Увага: Для вступу змін в силу потрібно перезайти в систему або виконати команду newgrp docker.
5. Покрокове розгортання Immich
Схема: 5. Покрокове розгортання Immich
Immich потребує кілька файлів для запуску: основний маніфест docker-compose.yml, файл конфігурації змінних оточення .env і базу даних PostgreSQL з розширенням pgvector.
Створимо директорію для проєкту:
mkdir -p ~/immich-app && cd ~/immich-app
Завантажимо актуальні файли конфігурації безпосередньо з офіційного репозиторію Immich:
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget https://github.com/immich-app/immich/releases/latest/download/example.env -O .env
Давайте розберемо, що знаходиться всередині docker-compose.yml. У ньому описані наступні сервіси:
- immich-server: Основний API і бекенд застосунку.
- immich-microservices: Завдання з обробки відео, генерації прев'ю та метаданих.
- immich-machine-learning: Сервіс для розпізнавання облич і класифікації об'єктів.
- postgres: База даних для зберігання метаданих і векторів облич.
- redis: Черга завдань і кешування.
Тепер створимо папку, де будуть фізично зберігатися ваші фотографії:
mkdir -p /home/$USER/immich-data/photos
mkdir -p /home/$USER/immich-data/postgres
6. Тонке налаштування: Змінні оточення та секрети
Схема: 6. Тонке налаштування: Змінні оточення та секрети
Файл .env містить всі ключові налаштування. Відкрийте його для редагування:
nano .env
Вам необхідно змінити наступні параметри:
# Шлях до ваших фото (обов'язково вкажіть абсолютний шлях)
UPLOAD_LOCATION=/home/adminuser/immich-data/photos
# Версія Immich (рекомендується залишити release)
IMMICH_VERSION=release
# Секрети для бази даних (згенерируйте свої складні паролі!)
DB_PASSWORD=your_strong_password_here
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
# Налаштування Redis
REDIS_HOSTNAME=redis
Якщо ви плануєте використовувати апаратне прискорення для кодування відео (наприклад, якщо ваш VPS підтримує Intel QuickSync або у вас є GPU), в docker-compose.yml потрібно буде прокинути відповідні пристрої (/dev/dri). Для більшості стандартних VPS ми залишаємо програмне кодування.
Після налаштування запустимо контейнери:
docker compose up -d
Перевіримо статус запуску:
docker compose ps
Якщо всі сервіси знаходяться в статусі Up, значить, бекенд запущений і слухає порт 2283. Однак відкривати цей порт безпосередньо в інтернет небезпечно і незручно (немає HTTPS).
rocket_launch
Quick pick
Looking for a server that just works?
Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.
View VPS plans
arrow_forward
7. Налаштування HTTPS через Caddy: Доступ із зовнішнього світу
Схема: 7. Налаштування HTTPS через Caddy: Доступ із зовнішнього світу
Для безпечного доступу через домен (наприклад, photos.yourdomain.com) ми будемо використовувати Caddy. Це сучасний веб-сервер, який автоматично отримує та оновлює SSL-сертифікати від Let's Encrypt.
Встановимо Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1G 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1G 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Створимо конфігураційний файл Caddyfile:
sudo nano /etc/caddy/Caddyfile
Додайте туди наступний блок (замініть домен на свій):
photos.yourdomain.com {
reverse_proxy localhost:2283
# Налаштування для завантаження великих файлів
request_body {
max_size 10GB
}
}
Перезапустіть Caddy:
sudo systemctl restart caddy
Тепер при переході за вашим доменом ви побачите екран привітання Immich, де зможете створити першого адміністратора.
8. Бекапи та обслуговування: Як не втратити сімейний архів
Схема: 8. Бекапи та обслуговування: Як не втратити сімейний архів
Self-hosting накладає на вас відповідальність за збереження даних. В Immich потрібно робити бекапи трьох речей: базу даних PostgreSQL, файли фотографій (Uploads) та файл .env.
Бекап бази даних
Створимо простий скрипт для щоденного дампу бази:
mkdir -p ~/immich-backups
nano ~/immich-backups/backup.sh
Текст скрипта:
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_DIR="/home/adminuser/immich-backups"
docker exec -t immich_postgres pg_dumpall -c -U postgres > $BACKUP_DIR/immich_db_$DATE.sql
# Видаляємо бекапи старше 30 днів
find $BACKUP_DIR -type f -name ".sql" -mtime +30 -delete
Зробіть скрипт виконуваним та додайте його в cron:
chmod +x ~/immich-backups/backup.sh
(crontab -l ; echo "0 3 /home/adminuser/immich-backups/backup.sh") | crontab -
Синхронізація файлів
Для самих фотографій рекомендується використовувати інструменти на кшталт Restic або Rclone, щоб відправляти їх в хмарне сховище (S3, Backblaze B2). Команда для Rclone може виглядати так:
rclone sync /home/adminuser/immich-data/photos remote:immich-backup-bucket
Оновлення Immich
Immich оновлюється часто. Для оновлення виконайте:
cd ~/immich-app
docker compose pull
docker compose up -d
Важливо: Завжди читайте Release Notes на GitHub перед оновленням, оскільки іноді потрібні ручні дії (Breaking Changes).
9. Troubleshooting + FAQ: Розв'язання типових проблем
Чому обличчя не розпізнаються одразу після завантаження?
Розпізнавання облич — це фонове завдання. Після завантаження фото воно потрапляє в чергу. Ви можете відстежувати прогрес в розділі Administration -> Job Settings. Якщо черга стоїть на місці, перевірте, чи запущений контейнер immich-machine-learning і чи вистачає йому оперативної пам'яті. На слабких CPU цей процес може займати значний час.
Який VPS-конфіг мінімально підійде для Immich?
Мінімальний поріг — 4 ГБ оперативної пам'яті та 2 ядра CPU. Однак на такій конфігурації інтерфейс може "підгальмовувати" під час індексації. Для комфортної роботи рекомендується 8 ГБ RAM. Якщо у вас величезна бібліотека (більше 100 000 фото), фокус зміщується на швидкість дискової підсистеми — NVMe буде в рази краще, ніж звичайні SSD.
Що обрати — VPS або dedicated для цієї задачі?
Для більшості користувачів достатньо потужного VPS. Це дає гнучкість: ви можете легко розширити обсяг диска або пам'яті. Dedicated-сервер варто обирати у двох випадках: якщо вам потрібна максимальна приватність (фізично виділене залізо) або якщо обсяг вашої бібліотеки обчислюється терабайтами, оскільки вартість зберігання на великих HDD в складі виділеного сервера зазвичай нижча, ніж вартість блокового сховища у хмарних провайдерів.
Помилка "Database is not ready" під час старту. Що робити?
Зазвичай це означає, що контейнер з PostgreSQL ще не встиг ініціалізуватися або впав через невірні права на папку з даними. Перевірте логи: docker compose logs postgres. Переконайтеся, що папка, вказана в .env, доступна користувачу, від якого запущено Docker.
Як перенести існуючу бібліотеку з Google Photos?
Використовуйте сервіс Google Takeout для вивантаження архіву. Після скачування скористайтеся утилітою Immich CLI. Вона дозволяє імпортувати папки зі збереженням структури та метаданих. Не варто просто копіювати файли в папку uploads, оскільки Immich повинен проіндексувати їх через API для коректної роботи бази даних.
Immich споживає занадто багато ресурсів CPU, сервер гріється/гальмує.
В налаштуваннях адміністратора (Job Settings) ви можете обмежити кількість потоків (concurrency) для задач машинного навчання та генерації прев'ю. Встановіть значення 1 або 2, щоб залишити ресурси для інших задач сервера.
rocket_launch
Quick pick
Looking for a server that just works?
Valebyte VPS — NVMe, 24/7 support, deploy in 60 seconds.
View VPS plans
arrow_forward
10. Висновки та наступні кроки
Ми успішно розгорнули Immich на VPS, забезпечивши безпеку через Caddy та автоматизувавши обслуговування. Тепер ваша медіатека знаходиться під вашим повним контролем, а функціонал розпізнавання об'єктів та облич працює без участі сторонніх корпорацій.
Що робити далі?
- Завантажте мобільний додаток Immich в App Store або Google Play та налаштуйте автоматичний бекап фотографій з вашого телефону.
- Вивчіть розділ "External Libraries" — він дозволяє підключити до Immich вже існуючі на сервері папки з фото без їх дублювання.
- Налаштуйте багатофакторну аутентифікацію (2FA) в профілі користувача для максимального захисту вашого архіву.
Пам'ятайте, що Immich активно розвивається. Регулярно перевіряйте оновлення та робіть бекапи перед кожним оновленням контейнерів. Тепер ваш особистий "Google Photos" готовий до роботи!