Immich: Руководство по самохостингу вместо Google Photos
Установите Immich — самохостинговую систему управления фотографиями, настройте облачную галерею, распознавание лиц и коллекции. Полное руководство.
Введение в Immich
Immich — это платформа с открытым исходным кодом для самохостинга фотографий и видео, разработанная на Node.js и TypeScript. Проект предоставляет функционал, сопоставимый с коммерческими облачными сервисами, но с полным контролем данных пользователя.
Требования к системе
Минимальные требования: процессор 2 ядра, RAM 4GB, диск 50GB SSD, сеть 100 Мбит/с. Оптимальная конфигурация: процессор 4+ ядер, RAM 8GB+, диск 500GB+ SSD, сеть 1 Гбит/с.
Подготовка системы
Установка Docker и Docker Compose, настройка пользователя, создание директории для Immich.
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker ${USER}
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
mkdir -p ~/immich
cd ~/immichУстановка через Docker Compose
Рекомендуемый метод установки Immich с использованием Docker Compose.
git clone https://github.com/immich-app/immich.git
cd immich
cp .env.example .env
# Отредактируйте файл .env с нужными параметрами
docker-compose up -dПервоначальная настройка
Создание учетной администратора, настройка базы данных и хранилища.
# Файл .env конфигурации
SERVER_PORT=3001
SERVER_URL=http://localhost:3001
DB_HOST_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=$(openssl rand -base64 32)
DB_DATABASE_NAME=immich
REDIS_HOST_PORT=6379
MACHINE_LEARNING_HOST_PORT=3003
MACHINE_LEARNING_ENABLED=true
UPLOAD_LOCATION=./uploadБазовое использование
Загрузка фотографий через веб-интерфейс и мобильное приложение, создание альбомов, поиск и фильтрация.
# Пример загрузки через веб-интерфейс
1. Войдите в Immich
2. Нажмите "Загрузить"
3. Выберите файлы
4. Настройте параметры
5. Нажмите "Загрузить"Продвинутые функции
Распознавание лиц, временные шкалы, карты, работа с геоданными.
# Запуск распознавания лиц
1. Перейдите в "Настройки" → "Машинное обучение"
2. Убедитесь, что "Включить машинное обучение" включено
3. Настройте параметры
4. Перейдите в "Инструменты" → "Обновить лица"
5. Нажмите "Начать"Мобильные приложения
Использование официальных мобильных приложений для iOS и Android с автоматической загрузкой фото и видео.
Интеграция с API
Использование RESTful API Immich для интеграции с другими сервисами.
# Пример аутентификации
curl -X POST http://localhost:3001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "password"}'
# Пример загрузки файла
curl -X POST http://localhost:3001/api/media/upload \
-H "Authorization: Bearer ваш_токен" \
-F "assetData=@/путь/к/файлу.jpg"Резервное копирование
Стратегии и инструменты для создания резервных копий данных Immich.
# Бэкап базы данных
docker-compose exec db pg_dump -U postgres immich > backup.sql
# Бэкап медиафайлов
tar -czf immich-media-backup.tar.gz ./uploadОптимизация производительности
Настройка производительности сервера, Docker и базы данных для работы с большими коллекциями фото.
# Оптимизация Docker
{
"storage-driver": "overlay2",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true
}
# Оптимизация базы данных
CREATE INDEX CONCURRENTLY idx_assets_created_at ON assets(created_at);Безопасность
Настройка SSL/TLS, базовые меры безопасности, мониторинг.
# Конфигурация Nginx для SSL
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Решение проблем
Распространенные проблемы с производительностью и хранением, методы их решения.
# Просмотр логов
docker-compose logs immich-server
docker-compose logs -f immich-server
# Диагностика базы данных
docker-compose exec db pg_isready
docker-compose exec db psql -U postgres -d immich -c "SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size FROM pg_tables WHERE schemaname = 'public' ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;"Immich: Полное руководство по самохостинговой альтернативе Google Photos
Введение в Immich
Immich — это платформа с открытым исходным кодом для самохостинга фотографий и видео, разработанная на Node.js и TypeScript. Проект предоставляет функционал, сопоставимый с коммерческими облачными сервисами, но с полным контролем данных пользователя.
Основные возможности:
- Эффективное хранение медиафайлов с поддержкой дедупликации
- Быстрый поиск по метаданным
- Распознавание лиц и объектов
- Временные шкалы и карты на основе геоданных
- Поддержка мобильных приложений для iOS и Android
- RESTful API для интеграции
- Веб-интерфейс для управления
Immich использует микросервисную архитектуру, что обеспечивает гибкость и масштабируемость.
Требования и подготовка системы
Минимальные требования к аппаратному обеспечению
Базовая конфигурация:
- Процессор: 2 ядра
- RAM: 4GB
- Диск: 50GB SSD
- Сеть: 100 Мбит/с
Оптимальная конфигурация:
- Процессор: 4+ ядер
- RAM: 8GB+
- Диск: 500GB+ SSD (или быстрая NVMe)
- Сеть: 1 Гбит/с
Требования к ПО
- ОС: Linux (рекомендуется Ubuntu 20.04/22.04, Debian 11)
- Docker: 20.10+
- Docker Compose: 1.29+
- PostgreSQL: 13+ (для внешней инсталляции)
- Redis: 6+ (для внешней инсталляции)
Подготовка системы
- Обновите систему:
sudo apt update && sudo apt upgrade -y
- Установите зависимости:
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
- Установите Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
- Добавьте пользователя в группу docker:
sudo usermod -aG docker ${USER}
- Установите Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- Создайте директорию для Immich:
mkdir -p ~/immich
cd ~/immich
Установка Immich различными методами
Установка через Docker Compose (рекомендуемый метод)
- Клонируйте репозиторий Immich:
git clone https://github.com/immich-app/immich.git
cd immich
- Создайте файл
.envна основе.env.example:
cp .env.example .env
- Отредактируйте файл
.env:
# Базовые настройки
SERVER_PORT=3001
SERVER_URL=http://localhost:3001
# База данных
DB_HOST_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=$(openssl rand -base64 32)
DB_DATABASE_NAME=immich
# Redis
REDIS_HOST_PORT=6379
# Машинное обучение
MACHINE_LEARNING_HOST_PORT=3003
MACHINE_LEARNING_ENABLED=true
MACHINE_LEARNING_LIBRARY_PATH=/models
# Хранилище
UPLOAD_LOCATION=./upload
- Запустите сервисы:
docker-compose up -d
-
Дождитесь полной инициализации (5-15 минут).
-
Откройте веб-интерфейс по адресу
http://localhost:3001и завершите настройку.
Установка через Kubernetes
- Установите Helm:
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
- Добавьте репозиторий Immich:
helm repo add immich https://immich-app.github.io/immich-charts/
helm repo update
- Установите Immich:
helm install immich immich/immich \
--set postgresql.postgresqlPassword=$(openssl rand -base64 32) \
--set auth.admin.email=admin@example.com \
--set auth.admin.password=$(openssl rand -base64 12)
- Проверьте статус:
kubectl get pods -n default
- Получите URL:
kubectl get svc -n default
Установка из исходного кода
- Установите Node.js и npm:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
- Установите PostgreSQL и Redis:
sudo apt install -y postgresql redis-server
- Настройте PostgreSQL:
sudo -u postgres createdb immich
sudo -u postgres psql -c "CREATE USER immich WITH PASSWORD '$(openssl rand -base64 32)';"
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE immich TO immich;"
- Клонируйте репозиторий:
git clone https://github.com/immich-app/immich.git
cd immich
- Установите зависимости:
npm install
- Создайте файл
.env:
cp .env.example .env
- Отредактируйте
.env:
# База данных
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=immich
DB_PASSWORD=$(openssl rand -base64 32)
DB_DATABASE_NAME=immich
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# Сервер
SERVER_PORT=3001
SERVER_URL=http://localhost:3001
- Запустите миграции:
npm run migration:run
- Соберите проект:
npm run build
- Запустите сервер:
npm start
Первоначальная настройка и конфигурация
Настройка администратора
- Откройте веб-интерфейс по адресу
http://localhost:3001 - Нажмите "Создать учетную запись"
- Заполните:
- Имя пользователя
- Пароль (минимум 8 символов)
- Подтверждение пароля
- Установите флажок "Сделать администратор"
- Нажмите "Создать учетную запись"
Конфигурация базы данных
- Откройте файл
.env:
nano ~/immich/.env
- Настройте параметры:
# PostgreSQL
DB_HOST=db
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=ваш_пароль
DB_DATABASE_NAME=immich
# Для внешней базы данных
# DB_HOST=внешний_хост
# DB_PORT=5432
# DB_USERNAME=immich_user
# DB_PASSWORD=сильный_пароль
# DB_DATABASE_NAME=immich_prod
- Перезапустите сервисы:
docker-compose down && docker-compose up -d
Настройка хранилища
- В
.envнастройте параметры:
# Локальное хранилище
UPLOAD_LOCATION=./upload
# S3-совместимое хранилище
# TYPE=s3
# AWS_ACCESS_KEY_ID=ваш_ключ
# AWS_SECRET_ACCESS_KEY=ваш_секретный_ключ
# AWS_REGION=ваш_регион
# AWS_S3_BUCKET=ваш_бакет
# AWS_S3_ENDPOINT=ваш_эндпоинт
- Для локального хранения:
mkdir -p ~/immich/upload
chmod 755 ~/immich/upload
- Перезапустите сервисы:
docker-compose down && docker-compose up -d
Базовое использование: загрузка и организация фотографий
Загрузка фотографий через веб-интерфейс
- Войдите в Immich
- Нажмите "Загрузить" в правом верхнем углу
- Выберите "Загрузить файлы"
- Выберите медиафайлы
- Настройте параметры:
- Создать альбом (опционально)
- Сохранить метаданные
- Не загружать дубликаты
- Нажмите "Загрузить"
Загрузка через мобильное приложение
-
Скачайте приложение:
- iOS: App Store
- Android: Google Play
-
Запустите приложение и выберите "Создать новый сервер"
-
Введите адрес сервера (например,
http://192.168.1.100:3001) -
Введите учетные данные
-
Настройте параметры загрузки:
- Только через Wi-Fi
- Качество изображений (оригинал/сжатый)
- Автоматическая загрузка видео
Организация альбомов
- Перейдите в "Альбомы"
- Нажмите "Создать альбом"
- Дайте имя и добавьте описание
- Выберите фотографии
- Нажмите "Создать"
Поиск и фильтрация
-
Используйте панель поиска
-
Выберите параметры:
- По тексту (названия, описания, метки)
- По дате (диапазон)
- По типу файлов
- По размеру файла
- По EXIF-данным
-
Используйте расширенные фильтры:
- Нажмите "Фильтры"
- Выберите критерии
- Нажмите "Применить"
Продвинутые функции: распознавание лиц, временная шкала, карта
Настройка распознавания лиц
-
Войдите как администратор
-
Перейдите в "Настройки" → "Машинное обучение"
-
Убедитесь, что "Включить машинное обучение" включено
-
Настройте параметры:
- Точность распознавания
- Минимальный размер лица
- Автоматическое группирование
-
Запустите распознавание:
- Перейдите в "Инструменты" → "Обновить лица"
- Нажмите "Начать"
- Дождитесь завершения
Создание и просмотр временной шкалы
- Immich автоматически создает временную шкалу
- Для просмотра:
- Откройте "Библиотеку"
- Выберите "Временная шкала"
- Навигируйтесь по годам, месяцам и дням
Использование карт
-
Immich автоматически отображает фото с геоданными
-
Для просмотра:
- Откройте "Библиотеку"
- Выберите "Карта"
- Навигируйтесь по карте
-
Для добавления геолокации:
- Выберите фотографию
- Нажмите "Редактировать"
- Перейдите на вкладку "Карта"
- Перетащите маркер или введите координаты
- Сохраните
Мобильные приложения и веб-интерфейс
Официальные мобильные приложения
Основные функции:
- Автоматическая загрузка новых фото
- Просмотр и поиск медиафайлов
- Создание альбомов и меток
- Доступ к временным шкалам и картам
- Кэширование для офлайн-работы
Настройка приложения:
- Введите адрес сервера
- Укажите учетные данные
- Настройте параметры загрузки:
- Только через Wi-Fi
- Качество изображений
- Автоматическая загрузка видео
Функции веб-интерфейса
Основные разделы:
- Библиотека: Просмотр всех медиафайлов с фильтрами
- Альбомы: Управление альбомами
- Люди: Просмотр распознанных лиц
- Места: Просмотр фото на карте
- Поиск: Расширенный поиск
Инструменты редактирования:
- Обрезка
- Коррекция яркости и контрастности
- Поворот и отражение
- Применение фильтров
Интеграция с другими сервисами и API
Использование API Immich
- Документация доступна по адресу
http://ваш-сервер:3001/docs - Основные эндпоинты:
/api/media- управление медиафайлами/api/albums- работа с альбомами/api/users- управление пользователями/api/search- поиск
Пример аутентификации:
curl -X POST http://localhost:3001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "password"}'
Пример загрузки файла:
curl -X POST http://localhost:3001/api/media/upload \
-H "Authorization: Bearer ваш_токен" \
-F "assetData=@/путь/к/файлу.jpg"
Интеграция с Nextcloud
- Установите плагин Immich для Nextcloud
- В настройках Nextcloud:
- Укажите URL Immich-сервера
- Введите API-ключ Immich
- Настройте параметры синхронизации
Webhooks
- В "Настройках" → "Вебхуки"
- Создайте вебхук:
- URL для уведомлений
- Выберите события
- Настройте формат данных
Пример уведомления:
{
"event": "asset.created",
"assetId": "uuid-файла",
"userId": "id-пользователя",
"timestamp": "2023-01-01T00:00:00.000Z"
}
Резервное копирование и восстановление данных
Стратегии резервного копирования
Методы:
- Полное резервное копирование
- Инкрементальное
- Дифференциальное
Частота:
- Ежедневное для изменений
- Еженедельное для полного бэкапа
- После обновлений системы
Инструменты для резервного копирования
Ручное резервное копирование:
# База данных
docker-compose exec db pg_dump -U postgres immich > backup.sql
# Медиафайлы
tar -czf immich-media-backup.tar.gz ./upload
Скрипт автоматического бэкапа:
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_DIR="/путь/к/резервным/копиям"
mkdir -p $BACKUP_DIR/$DATE
# Бэкап базы данных
docker-compose exec -T db pg_dump -U postgres immich > $BACKUP_DIR/$DATE/database.sql
# Бэкап медиафайлов
docker run --rm -v immich_upload:/source -v $BACKUP_DIR/$DATE:/backup alpine tar czf /backup/media.tar.gz -C /source .
# Очистка старых бэкапов
find $BACKUP_DIR -type d -mtime +30 -exec rm -rf {} \;
Восстановление системы
Восстановление базы данных:
docker-compose down
docker-compose run -d --rm -v $BACKUP_DIR/latest/database.sql:/backup/database.sql postgres psql -U postgres -d immich -f /backup/database.sql
docker-compose up -d
Восстановление медиафайлов:
tar -xzf $BACKUP_DIR/latest/media.tar.gz -C /путь/к/директории/immich
chown -R 1000:1000 /путь/к/директории/immich/upload
Оптимизация производительности и безопасность
Оптимизация производительности
Оптимизация сервера:
- Увеличьте RAM до 8GB+
- Используйте SSD для базы данных и медиафайлов
- Настройте Redis кэширование
Оптимизация Docker:
sudo nano /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"live-restore": true
}
sudo systemctl restart docker
Оптимизация базы данных:
docker-compose exec db psql -U postgres -d immich -c "VACUUM ANALYZE;"
CREATE INDEX CONCURRENTLY idx_assets_created_at ON assets(created_at);
CREATE INDEX CONCURRENTLY idx_assets_file_extension ON assets(fileExtension);
Настройка безопасности
Базовая безопасность:
- Используйте сложные пароли
- Ограничьте доступ по SSH
- Регулярно обновляйте систему
Настройка SSL/TLS:
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name your-domain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
location / {
proxy_pass http://localhost:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
sudo apt install certbot
sudo certbot --nginx -d your-domain.com
Мониторинг:
docker-compose logs immich-server
docker-compose logs -f immich-server
Проблемы и их решения
Распространенные проблемы
Проблемы с производительностью:
- Симптомы: медленная загрузка, долгая обработка фото
- Решения:
- Увеличьте RAM
- Используйте SSD
- Оптимизируйте Docker
- Уменьшите количество одновременных задач
Проблемы с хранением:
- Симптомы: ошибки при загрузке, нет места
- Решения:
- Расширьте дисковое пространство
- Настройте дедупликацию
- Используйте внешнее хранилище
- Включите сжатие
Решение проблем с производительностью
Оптимизация конфигурации:
# В .env
MAX_WORKERS=4
THUMBNAIL_SIZE=144
VIDEO_CONCURRENCY=1
docker-compose down && docker-compose up -d
Очистка:
docker-compose exec immich-server npm run cleanup
docker-compose exec redis redis-cli FLUSHDB
Отладка
Просмотр логов:
docker-compose logs
docker-compose logs immich-server
docker-compose logs db
Диагностика базы данных:
docker-compose exec db pg_isready
docker-compose exec db psql -U postgres -d immich -c "SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size FROM pg_tables WHERE schemaname = 'public' ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;"
Альтернативы Immich и сравнение
Обзор альтернатив
| Функция | Immich | PhotoPrism | Lychee | Piwigo | Nextcloud Photos |
|---|---|---|---|---|---|
| Распознавание лиц | ✓ | ✓ | ✓ | ✓ | ✓ |
| Геотеги | ✓ | ✓ | ✓ | ✓ | ✓ |
| Временная шкала | ✓ | ✓ | ✓ | ✓ | ✓ |
| Карты | ✓ | ✓ | ✓ | ✓ | ✓ |
| Видео | ✓ | ✓ | ✓ | ✓ | ✓ |
| Плагины | ✓ | ✓ | - | ✓ | ✓ |
| API | ✓ | ✓ | - | ✓ | ✓ |
| Мобильное приложение | ✓ | ✓ | ✓ | - | ✓ |
| Требования к ресурсам | Средние | Высокие | Низкие | Средние | Высокие |
Выбор решения
Выбирайте Immich, если:
- Нужен современный интерфейс
- Есть умеренно мощное железо
- Важна мобильная интеграция
- Нужен функциональный API
- Цените быструю разработку
Выбирайте PhotoPrism, если:
- У вас мощный сервер
- Нужна лучшая организация фото
- Важна приватность
- Готовы платить за премиум
Выбирайте Lychee, если:
- Ограниченные ресурсы
- Нужен простой и быстрый сервис
- Маленькая коллекция фото
- Предпочитаете минимализм
Заключение и будущее развитие
Итоги руководства
Immich предоставляет мощную платформу для самохостинга фотографий с современным интерфейсом и丰富的 функциональностью. В этом руководстве рассмотрены:
- Установка и настройка различными методами
- Базовые и продвинутые функции управления медиафайлами
- Интеграция с другими сервисами
- Оптимизация производительности и безопасность
- Решение распространенных проблем
- Сравнение с альтернативами
Immich предлагает отличное соотношение функциональности и требований к ресурсам, что делает его привлекательной альтернатив Google Photos.
Будущее развитие Immich
Ожидаемые улучшения:
- Улучшенное распознавание объектов
- Поддержка RAW-форматов
- Дополнительные форматы видео
- Расширенное редактирование
- Оптимизация для больших коллекций
- Улучшенный поиск
- Расширенные интеграции
Сообщество и поддержка
Официальные ресурсы:
- GitHub: https://github.com/immich-app/immich
- Документация: https://immich.app/docs
- Discord: https://immich.app/discord
Immich - надежный выбор для самохостинга фотографий с активным сообществом и постоянным развитием.