Загружаем изображение…
Immich - альтернатива Google Photos
Фото на телефоне заканчиваются одинаково: память кончается, облако просит подписку, а «просто посмотреть семейный архив» превращается в передачу личных данных третьей стороне. Immich — self-hosted система хранения и каталогизации фото и видео. Ваше оборудование, ваш сервер, ваши правила. По ощущению — та же облачная галерея, только поиск по лицам и сценам считается дома, а не на чужой машине.
Ветка на момент написания — 3.x. Ставил 3.2.4 поверх 3.1.
Как это устроено
Immich — не один контейнер, а четыре. Лучше знать это до первой поломки:
- immich-server — веб-интерфейс, API, вся логика;
- immich-machine-learning — нейросети: распознавание лиц, семантический поиск, текст на снимках;
- database — PostgreSQL с расширением под векторный поиск;
- redis — очередь задач. Миниатюры, транскодинг видео и скан библиотек уходят в очередь и не считаются в момент вашего запроса.
Порт по умолчанию — 2283. Состояние живёт в двух местах: каталог хранилища (library, upload, thumbs, encoded-video, backups, profile) и каталог данных базы. Удалить одно без другого — получить базу без файлов или файлы без базы.
Установка
Каталог проекта и два файла. Все пути в примерах условные — подставьте свои.
.env:
``
UPLOADLOCATION=/srv/immich/storage
DBDATALOCATION=/srv/immich/db
DBHOSTNAME=database
DBPORT=5432
DBUSERNAME=immich
DBDATABASENAME=immich
DBPASSWORD=
REDISHOSTNAME=redis
REDISPORT=6379
TZ=Europe/Moscow
`
Внимание: этот файл хранит пароль базы открытым текстом. Доступ к каталогу проекта ограничьте, в систему контроля версий он попадать не должен.
docker-compose.yml — сокращённо, показаны сервер и машинное обучение с монтированиями (полный шаблон берётся из официальной документации):
`yaml
services:
immich-server:
containername: immichserver
image: ghcr.io/immich-app/immich-server:${IMMICHVERSION:-release}
ports:
- "2283:2283"
volumes:
- ${UPLOADLOCATION}:/data
- /srv/photos/existing-archive:/mnt/archive:ro
envfile: .env
dependson:
database:
condition: servicehealthy
redis:
condition: servicehealthy
immich-machine-learning:
containername: immichmachinelearning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICHVERSION:-release}
volumes:
- ${UPLOADLOCATION}:/usr/src/app/upload
- /srv/photos/existing-archive:/mnt/archive:ro
envfile: .env
redis:
containername: immichredis
image: docker.io/redis:6.2-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
restart: always
database:
containername: immichpostgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0
environment:
POSTGRESPASSWORD:
POSTGRESUSER: ${DBUSERNAME}
POSTGRESDB: ${DBDATABASENAME}
volumes:
- ${DBDATALOCATION}:/var/lib/postgresql/data
envfile: .env
healthcheck:
test: ["CMD-SHELL", "pgisready -U $${POSTGRESUSER} -d $${POSTGRESDB}"]
interval: 5s
timeout: 3s
retries: 30
restart: always
`
Обратите внимание на :ro во втором монтировании — об этом ниже.
Запуск:
`bash
docker compose pull
docker compose up -d
`
Первый заход на http://<адрес-сервера>:2283 — мастер попросит создать аккаунт администратора.
…
https://esin48.ru/blog/post.php?post=2026-10-02-immich-alternativa-google-photos
#полезное
Просмотры: 87