Skip to main content

Разворачиваем Immich в Docker

Immich - это аналог Google Фото, с возможностью синхронизации

1. docker-compose.yml

services:
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 файл

UPLOAD_LOCATION=/home/sharedisk/Immich
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. Развертывание

  1. В Portainer открыть Stacks.
  2. Создать стек immich.
  3. Вставить docker-compose.yml.
  4. Применить стек.
  5. Проверить запуск контейнеров:
    • immich_server
    • immich_postgres
    • immich_redis

После запуска открыть локально:

http://IP_сервера:2283

Сначала проверить локальный вход, потом уже настраивать внешний доступ через reverse proxy. Immich рекомендует Docker Compose как основной способ установки.


4. Nginx Proxy Manager

Immich должен открываться на корне домена или поддомена.
Правильный вариант:

https://immich.rich650.ru/

Вариант вида 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

client_max_body_size 50000M;
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 папка смонтирована так:

- /home/sharedisk/Shared/Фото:/home/sharedisk/Photos:ro

Значит в веб-интерфейсе Immich нужно указывать путь:

/home/sharedisk/Photos

Важно: указывается путь внутри контейнера, а не путь хоста. External Library в Immich подключается именно через путь, видимый контейнеру.

Как добавить

  1. Войти под администратором.
  2. Открыть Administration → External Libraries.
  3. Создать библиотеку.
  4. Добавить путь:
/home/sharedisk/Photos

  1. Запустить сканирование.

Если библиотека подключена как :ro, Immich не сможет писать sidecar-файлы и не сможет физически удалять оригиналы.


6. Логи

Просмотр логов:

docker logs --tail 200 immich_server
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. Бэкап

Резервировать нужно обязательно:

  • /home/sharedisk/Immich
  • /home/rich650/docker_config_and_data/immich/postgres
  • /home/sharedisk/Shared/Фото

Для 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 стека.