Разворачиваем Immich в Docker
Immich - это аналог Google Фото, с возможностью синхронизации
1. docker-compose.yml
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:release
depends_on:
- redis
- database
ports:
- "2283:2283"
environment:
TZ: "Europe/Samara"
DB_HOSTNAME: "immich_postgres"
DB_USERNAME: "postgres"
DB_PASSWORD: "6508699"
DB_DATABASE_NAME: "immich"
REDIS_HOSTNAME: "immich_redis"
volumes:
- /home/sharedisk/Immich:/data
- /etc/localtime:/etc/localtime:ro
# External Library.
# В веб-интерфейсе Immich потом указывать путь /home/sharedisk/Photos
# Сначала лучше в режиме :ro
- /home/sharedisk/Shared/Фото:/home/sharedisk/Photos:ro
restart: unless-stopped
# На текущем сервере секцию НЕ использовать:
# immich-machine-learning требует x86-64-v2 начиная с Immich v2.6,
# а на Intel Atom D2500 контейнер падает.
#
# immich-machine-learning:
# container_name: immich_machine_learning
# image: ghcr.io/immich-app/immich-machine-learning:release
#
# environment:
# TZ: "Europe/Samara"
#
# volumes:
# - /home/rich650/docker_config_and_data/immich/model-cache:/cache
#
# restart: unless-stopped
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9
command: redis-server --loglevel warning
restart: unless-stopped
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
environment:
POSTGRES_PASSWORD: "6508699"
POSTGRES_USER: "postgres"
POSTGRES_DB: "immich"
POSTGRES_INITDB_ARGS: "--data-checksums"
# Если база будет лежать не на SSD, можно раскомментировать:
# DB_STORAGE_TYPE: "HDD"
volumes:
- /home/rich650/docker_config_and_data/immich/postgres:/var/lib/postgresql/data
shm_size: 128mb
restart: unless-stopped
immich-machine-learning на текущем Atom D2500 лучше не запускать: для amd64 Immich требует x86-64-v2 начиная с v2.6.
2. env файл
DB_DATA_LOCATION=/home/rich650/docker_config_and_data/immich/postgres
IMMICH_VERSION=release
TZ=Europe/Samara
DB_PASSWORD=6508699
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
3. Развертывание
- В Portainer открыть Stacks.
- Создать стек
immich. - Вставить
docker-compose.yml. - Применить стек.
- Проверить запуск контейнеров:
immich_serverimmich_postgresimmich_redis
После запуска открыть локально:
Сначала проверить локальный вход, потом уже настраивать внешний доступ через reverse proxy. Immich рекомендует Docker Compose как основной способ установки.
4. Nginx Proxy Manager
Immich должен открываться на корне домена или поддомена.
Правильный вариант:
Вариант вида https://site.ru/immich не поддерживается.
Proxy Host → Details
- Scheme:
http - Forward Hostname / IP: IP сервера с Immich
- Forward Port:
2283 - Websockets Support:
ON
Если в веб-интерфейсе Immich был статус Offline / Unknown, он обычно связан именно с WebSocket на reverse proxy.
Proxy Host → Advanced
proxy_request_buffering off;
client_body_buffer_size 1024k;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
Это нужно для больших загрузок и длинных запросов, особенно для видео с телефона. Immich для Nginx рекомендует большой client_max_body_size, proxy_request_buffering off и увеличенные timeout’ы.
5. External Library
В compose папка смонтирована так:
Значит в веб-интерфейсе Immich нужно указывать путь:
Важно: указывается путь внутри контейнера, а не путь хоста. External Library в Immich подключается именно через путь, видимый контейнеру.
Как добавить
- Войти под администратором.
- Открыть Administration → External Libraries.
- Создать библиотеку.
- Добавить путь:
- Запустить сканирование.
Если библиотека подключена как :ro, Immich не сможет писать sidecar-файлы и не сможет физически удалять оригиналы.
6. Логи
Просмотр логов:
docker logs -f --tail 200 immich_server
docker logs --tail 200 immich_postgres
docker logs -f --tail 200 immich_postgres
docker logs --tail 200 immich_redis
docker logs -f --tail 200 immich_redis
7. Если нужен machine learning позже
На текущем сервере локальный ML не использовать.
Если понадобится:
- поднять
immich-machine-learningна более новом сервере; - подключить его как remote machine learning.
Immich поддерживает вынесенный ML на отдельную машину.
8. Бэкап
Резервировать нужно обязательно:
Для Immich важен не только архив фото, но и база данных. Бэкапы БД по умолчанию складываются в каталог данных Immich, но они содержат только метаданные, не сами фото и видео.
9. Краткий troubleshooting
Offline / Unknown
Проверить:
Websockets Support = ONв Nginx Proxy Manager.
Android не загружает видео / SocketTimeoutException
Проверить:
- блок
Advancedв NPM; - что используются большие timeout’ы и
proxy_request_buffering off.
immich-machine-learning падает
Причина:
- CPU не поддерживает
x86-64-v2.
После изменения compose/env ничего не поменялось
Нужно:
- не просто restart контейнера,
- а Redeploy / recreate стека.