Self-hosted Google Photos: Immich в Homelab

Immich — самохостинг для фото и видео: пошаговый гайд по установке в Docker, настройке внешнего доступа и активации ИИ‑функций в вашем Homelab.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор14 января 2026 г.

Prepare the Directory

Create a dedicated directory for Immich to keep all configuration and data paths organized. This simplifies management, updates, and removal.

mkdir ~/immich && cd ~/immich

Download Configuration Files

Download the official docker-compose.yml file and the example environment file. The example file contains all available configuration variables.

curl -L https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml -o docker-compose.yml
curl -L https://github.com/immich-app/immich/releases/latest/download/example.env -o .env

Configure the Environment File (.env)

Edit the .env file to customize critical variables. You MUST set UPLOAD_LOCATION to the path where your photos and videos will be stored (ideally on a large, separate drive). You should also change DB_PASSWORD from the default 'postgres' for security.

nano .env

# Example .env configuration:
# Path to your external media storage
UPLOAD_LOCATION=/path/to/your/media/storage

# URL used for accessing the server from your network
IMMICH_SERVER_URL=http://192.168.1.100:2283

# Database credentials (change the default password!)
DB_PASSWORD=your_strong_password
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

# Path for database files (defaults to ./postgres)
DB_DATA_LOCATION=./postgres

Start the Containers

Launch the Immich stack in detached mode. Docker Compose will pull the necessary images and start all services (server, machine learning, database, redis).

docker compose up -d

Verify Service Status

Check that all containers are up and running healthy. This confirms the installation was successful.

docker compose ps

Initial Web Setup

Open your web browser and navigate to the server's IP address on port 2283 (e.g., http://192.168.1.100:2283). Follow the on-screen wizard to create your first administrator account and configure your initial library.

Import Existing Photos (External Library)

To avoid duplicating large amounts of data, mount your existing photo folder as an external library. Edit the docker-compose.yml to add the volume mount, then create the library in the web interface under Administration -> Libraries. Note: This step is optional if you are starting fresh.

services:
  immich-server:
    volumes:
      # ... existing volumes
      - /path/to/your/existing/photos:/usr/src/app/external_library:ro

Secure External Access

By default, Immich is only accessible on your local network. For secure access from the internet, set up a reverse proxy with SSL. A simple option is Caddy or Nginx Proxy Manager. Never expose Immich directly to the internet without HTTPS.

# Example Caddyfile configuration
your-domain.com {
    reverse_proxy localhost:2283
}

Configure Regular Backups

Your data is critical. Set up a backup strategy for both the UPLOAD_LOCATION (your media) and the DB_DATA_LOCATION (your database containing metadata, albums, and face recognition data). Use tools like rsync or restic to automate this process.

# Example backup script snippet
rsync -av /path/to/your/media/ /mnt/backup_drive/media/
rsync -av /path/to/your/immich/postgres/ /mnt/backup_drive/immich_db/

Отлично. Как senior infrastructure engineer и технический писатель, я подготовлю подробный, структурированный и практический гайд по развертыванию Immich.


How to self-host Immich: Полный гайд по развертыванию высокопроизводительного менеджера фото и видео

Введение

Популярные облачные сервисы для хранения фото и видео предлагают удобство, но это удобство имеет свою цену: вы платите не только деньгами по подписке, но и своими данными. Политики конфиденциальности часто допускают анализ контента, а зависимость от стороннего провайдера оставляет вас уязвимыми к изменению условий, блокировке аккаунта или прекращению поддержки. "Интернет не забывает", и однажды загруженное фото может стать достоянием публики без вашего ведома.

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

Этот гайд проведет вас через все этапы: от выбора оборудования до настройки резервного копирования и расширенных функций.

1. Предварительные требования (Hardware & Software)

Успех развертывания и стабильная работа Immich напрямую зависят от вашего "железа". Самое важное здесь — понимать, что Immich использует машинное обучение (ML) для анализа фотографий (распознавание лиц, генерация миниатюр, определение объектов).

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

  • CPU: 2-ядерный процессор x86-64 (например, Intel Core i3 8-го поколения или аналогичный AMD).
  • RAM: 4 ГБ. При этом вам нужно быть готовым к тому, что большая часть будет занята самой системой и ML-процессами.
  • Storage: Не менее 10 ГБ свободного места для системы и контейнеров, плюс достаточно места для ваших фотографий и видео.

Рекомендуемые спецификации (для комфорта и скорости)

  • CPU: 4+ ядерный процессор (Intel Core i5/i7 8-го поколения или новее, Ryzen 5/7). ML-задачи сильно загружают процессор. Наличие встроенного GPU (Intel Quick Sync, AMD VCE) может значительно ускорить кодирование видео и генерацию превью.
  • RAM: 8 ГБ — абсолютный минимум для комфортной работы. 16 ГБ и более настоятельно рекомендуется, если вы планируете обрабатывать большие медиатеки (50,000+ фото/видео).
  • Storage:
    • SSD/NVMe для ОС и контейнеров (рекомендуется для скорости отклика базы данных и самого приложения).
    • Отдельный большой диск (HDD/RAID) для хранения самой медиатеки (фото и видео). Immich позволяет указать путь к этой папке, чтобы не дублировать данные на основном диске.

Программное обеспечение

  • Операционная система: Linux-дистрибутив (Ubuntu 22.04 LTS / 24.04 LTS, Debian 11/12, Fedora) является наиболее предпочтительным и протестированным вариантом.
  • Docker и Docker Compose: Immich полностью контейнеризован и не может быть установлен иначе. Установка Docker Engine и Docker Compose Plugin обязательна.

NOTE: Мы не будем рассматривать установку Docker в этом гайде. Если она у вас не установлена, следуйте официальной документации для вашего дистрибутива: https://docs.docker.com/engine/install/.

2. Быстрый старт: Установка Immich

Процесс установки стандартизирован и сводится к подготовке директории, настройке переменных окружения и запуску контейнеров.

Шаг 1: Подготовка директории и файлов

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

# Создаем директорию и переходим в нее
mkdir ~/immich && cd ~/immich

Шаг 2: Загрузка файлов Docker Compose и переменных окружения

Immich использует два основных файла для своей конфигурации: docker-compose.yml и .env.

# Скачиваем официальный docker-compose.yml
curl -L https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml -o docker-compose.yml

# Скачиваем официальный .env.example и переименовываем его в .env
curl -L https://github.com/immich-app/immich/releases/latest/download/example.env -o .env

Шаг 3: Настройка файла .env

Это самый важный шаг. Откройте файл .env в любом текстовом редакторе (например, nano или vim).

nano .env

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

# Путь для хранения загруженных медиафайлов (фото и видео).
# Рекомендуется указать путь к вашему большому диску/сетевой папке.
UPLOAD_LOCATION=/path/to/your/external/media/drive

# URL, по которому вы будете доступны внутри сети.
# Если вы не меняли порты, используйте IP-адрес вашего сервера.
# Например: IMMICH_SERVER_URL=http://192.168.1.100:2283
IMMICH_SERVER_URL=http://localhost:2283

# Пароль для базы данных. ОБЯЗАТЕЛЬНО измените стандартный на свой.
DB_PASSWORD=postgres

# Пользователь базы данных.
DB_USERNAME=postgres

# Имя базы данных.
DB_DATABASE_NAME=immich

# Путь для хранения данных базы данных.
DB_DATA_LOCATION=./postgres

WARNING: Не оставляйте стандартный пароль postgres в DB_PASSWORD. Это критически важно для безопасности вашей инсталляции, особенно если вы планируете открывать доступ из интернета.

Шаг 4: Запуск контейнеров

Теперь, когда все настроено, можно запустить Immich. Docker Compose автоматически скачает все необходимые образы и запустит контейнеры.

# Запуск в detached-режиме (в фоне)
docker compose up -d

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

docker compose ps

В выводе вы должны увидеть, что все сервисы (immich-server, immich-machine-learning, immich-redis, immich-postgres) находятся в состоянии Up или Up (healthy).

3. Первоначальная настройка

Теперь, когда сервер запущен, самое время настроить его через веб-интерфейс.

  1. Откройте браузер и перейдите по адресу вашего сервера и порта 2283 (или другого, если вы его меняли в .env): http://<IP-адрес-вашего-сервера>:2283

  2. Мастер настройки. Вы увидите приветственный экран. Нажмите "Get Started".

  3. Создание администратора. Первый создаваемый пользователь автоматически получит права администратора. Придумайте надежный логин и пароль.

  4. Настройка библиотеки. Система спросит, как вы планируете загружать фото. На этом этапе вы можете выбрать "Upload a new library" (Загрузить новую библиотеку) или пропустить этот шаг, если хотите настроить доступ к уже существующей папке позже (см. раздел 6).

После завершения мастера вы попадете на главный экран Immich. Поздравляю, ваш собственный фотохостинг готов!

4. Конфигурация доступа

По умолчанию Immich доступен только внутри вашей локальной сети. Для полноценного использования нужен доступ извне.

Локальный доступ

Это просто. Достаточно использовать IP-адрес вашего сервера в локальной сети. Например: http://192.168.1.100:2283.

Внешний доступ (Интернет)

WARNING: Открытый доступ к сервисам из интернета без надлежащей защиты — это огромная уязвимость. Никогда не разворачивайте подобные сервисы без HTTPS (SSL-сертификата) и надежной аутентификации.

Вот три популярных способа безопасно открыть Immich:

Вариант 1: Caddy (Проще всего для HTTPS)

Caddy — это современный веб-сервер с автоматическим получением и обновлением SSL-сертификатов Let's Encrypt.

  1. Установите Caddy.
  2. Отредактируйте файл /etc/caddy/Caddyfile:
    your-domain.com {
        reverse_proxy localhost:2283
    }
    
  3. Перезапустите Caddy: sudo systemctl restart caddy. Caddy сам получит сертификат и обеспечит HTTPS.

Вариант 2: Cloudflare Tunnel (Без открытых портов)

Идеальный вариант для новичков. Создает безопасный туннель из вашей локальной сети в облако Cloudflare, не требуя открытия портов на роутере.

  1. Зарегистрируйтесь на Cloudflare (бесплатно).
  2. Настройте свой домен.
  3. В панели управления Cloudflare перейдите в Zero Trust -> Networks -> Tunnels.
  4. Создайте новый туннель, установите cloudflared на ваш сервер и подключите его, следуя инструкциям в интерфейсе.
  5. В настройках туннеля добавьте public hostname и укажите localhost:2283 в качестве сервиса.
  6. В настройках вашего домена в Cloudflare (DNS) убедитесь, что CNAME запись для вашего субдомена направлена на туннель.

Вариант 3: Nginx Reverse Proxy (Классический вариант)

Если у вас уже есть Nginx или вы предпочитаете полный контроль.

  1. Установите Nginx.
  2. Создайте конфигурационный файл в /etc/nginx/sites-available/immich:
    server {
        listen 80;
        server_name your-domain.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name your-domain.com;
    
        # Пути к вашим SSL сертификатам (например, от Certbot)
        ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
        location / {
            proxy_pass http://localhost:2283;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            # Важно для WebSocket, который используется Immich для живых обновлений
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    
  3. Получите SSL-сертификат (например, с помощью Certbot: sudo certbot --nginx -d your-domain.com).
  4. Включите конфиг и перезагрузите Nginx.

5. Импорт существующей медиатеки (External Library)

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

Как настроить:

  1. Монтирование папки. Отредактируйте ваш docker-compose.yml. Найдите секцию volumes: для сервиса immich-server и добавьте вашу папку с медиа.

    services:
      immich-server:
        volumes:
          # ... другие тома
          - /путь/к/вашей/старой/библиотеке:/usr/src/app/external_library:ro # :ro - read-only, для безопасности
    

    После этого перезапустите контейнеры: docker compose up -d.

  2. Добавление библиотеки в интерфейсе.

    • Зайдите в веб-интерфейс под администратором.
    • Перейдите в Administration -> Libraries (Администрирование -> Библиотеки).
    • Нажмите Create External Library (Создать внешнюю библиотеку).
    • В поле пути укажите путь, как он виден внутри контейнера. Если вы замонтировали как /home/user/photos:/usr/src/app/external_library, то в настройках библиотеки нужно указать /usr/src/app/external_library.
    • Настройте правила сканирования (например, сканировать только по расписанию) и нажмите "Сохранить".

Теперь Immich начнет сканирование. Это может занять много времени на первой итерации.

6. Ключевые функции и "фишки"

Immich — это не просто галерея, а мощный инструмент для работы с медиа.

  • ИИ-распознавание:
    • Лица: Автоматически находит и группирует лица людей. Требует хорошей производительности CPU (или GPU).
    • Теги (Smart Search): Анализирует содержимое фото (например, "собака", "пляж", "горы"). Позволяет искать по описанию, а не только по метаданным.
  • Картографирование: Автоматически строит карту мира, отмечая точки, где были сделаны ваши фотографии (если в EXIF-данных есть геолокация).
  • Поиск дубликатов: Находит похожие или идентичные фотографии, чтобы вы могли легко очистить библиотеку от мусора.
  • Live Photos / Motion Photos: Поддерживает анимированные фото от Apple и Samsung. Можно просмотреть короткое видео, зажав палец на фото.
  • Режим архивного хранения (Archival Storage): Позволяет перемещать старые или редко нужные фото в более дешевое хранилище (например, на медленный HDD), оставляя их доступными для просмотра. При открытии такого фото оно будет "разархивировано" на лету.

7. Резервное копирование и восстановление

Никогда не забывайте о бэкапах. Ваша конфигурация и метаданные (описания, теги, информация о лицах) хранятся в базе данных.

Что бэкапить:

  1. Папка с загрузками (UPLOAD_LOCATION из .env). Это ваши оригинальные фото и видео. Если они у вас уже лежат на другом диске (внешняя библиотека), то этот путь не нужно бэкапить.
  2. Папка с данными базы данных (DB_DATA_LOCATION из .env или ./postgres по умолчанию). Это критически важно. Без этого бэкапа вы потеряете всю организацию (альбомы, теги, лица).

Простая стратегия бэкапа с помощью rsync

Создайте скрипт backup_immich.sh:

#!/bin/bash

# Датируем папку бэкапа
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_DIR="/path/to/your/backups/immich_${DATE}"

# Создаем директорию
mkdir -p ${BACKUP_DIR}

# Копируем папку с данными постгреса (метаданные)
# Важно остановить контейнеры для консистентности, или использовать pg_dump
# Для простоты rsync (может привести к битым данным, если БД активна)
docker compose stop postgres
rsync -av --delete /путь/к/вашему/immich/postgres/ ${BACKUP_DIR}/postgres/
docker compose start postgres

# Копируем папку с загрузками (медиа)
rsync -av --delete /путь/к/вашему/UPLOAD_LOCATION/ ${BACKUP_DIR}/media/

# (Опционально) Архивируем и удаляем старые бэкапы старше 7 дней...
# tar -czf ${BACKUP_DIR}.tar.gz ${BACKUP_DIR}
# rm -rf ${BACKUP_DIR}
# find /path/to/your/backups -name "immich_*" -mtime +7 -exec rm -rf {} \;

echo "Backup completed: ${BACKUP_DIR}"

Для восстановления достаточно остановить сервисы, удалить старые папки postgres и media, скопировать туда данные из бэкапа и запустить сервисы заново.

8. Заключение и FAQ

Развертывание собственного облака для фотографий с Immich — это отличный проект для homelab. Вы получаете независимость, полный контроль, приватность и мощный инструмент, который не уступает, а во многих аспектах и превосходит коммерческие аналоги.

FAQ (Частые вопросы)

  • Q: Насколько производительным будет Immich на моем Raspberry Pi?

    • A: Запустить можно, но процесс машинного обучения (особенно распознавание лиц) будет очень медленным. В первые дни после загрузки большой библиотеки Pi будет загружен на 100% CPU. Для комфортного использования рекомендуется x86-64 сервер с 4+ ядрами и 8+ ГБ RAM.
  • Q: Как обновлять Immich до новой версии?

    • A: Immich активно развивается, и обновления выходят часто. Процесс прост:
      1. Зайдите в папку с docker-compose.yml.
      2. Выполните docker compose pull (это скачает новые образы).
      3. Выполните docker compose up -d (Docker Compose автоматически пересоздаст контейнеры с новыми образами).
      4. При обновлении всегда проверяйте Release Notes на предмет критических изменений, которые могут потребовать ручного вмешательства (например, изменения в .env).
  • Q: Что делать, если я случайно удалю фото через веб-интерфейс?

    • A: Если вы используете стандартную библиотеку (загрузки), Immich перемещает удаленные файлы в корзину. Они будут храниться там 30 дней, после чего удаляются окончательно. Если же вы работаете с внешней библиотекой (read-only), удаление из интерфейса Immich не затронет оригинальные файлы на диске.
  • Q: Можно ли использовать Immich с существующей структурой папок?

    • A: Да, именно для этого и предназначена функция "Внешней библиотеки". Immich не требует переноса или переименования ваших файлов.
Поделиться:TelegramX / TwitterVK