Immich je self-hosted správca fotiek a videí — rozhranie podobné Google Photos, automatická záloha z mobilu cez Android aj iOS appku, rozpoznávanie tvárí, mapa a časová os. Všetko beží na tvojom hardvéri, dáta zostávajú u teba. Tu je postup ako to celé rozbehnúť.
Čo potrebuješ
Docker a Portainer nainštalované na tvojom zariadení — Synology NAS, Linux server alebo Windows PC s Docker Desktop. Na Synology: UID a GID tvojho DSM používateľa (zistíš v Portainer → Users, alebo cez SSH príkazom id [username]). Dostatok miesta na disku — samotné Docker obrazy zaberajú ~4 GB.
1. Vytvor priečinky
Synology NAS (File Station) — v /volume1/docker/ vytvor priečinok immich, v ňom šesť podpriečinkov: cache, db, matplotlib, micro, redis, upload.
Linux (SSH):
mkdir -p ~/docker/immich/{cache,db,matplotlib,micro,redis,upload}
Windows (Prieskumník) — vytvor C:\docker\immich\ a v ňom podpriečinky: cache, db, matplotlib, micro, redis, upload.
2. Docker Compose stack
V Portainer: Stacks → Add stack → Web editor. Vyber svoju platformu a skopíruj stack:
services:
immich-redis:
image: redis
container_name: Immich-REDIS
hostname: immich-redis
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD-SHELL", "redis-cli ping || exit 1"]
user: 1026:100
environment:
- TZ=Europe/Bratislava
volumes:
- /volume1/docker/immich/redis:/data:rw
restart: on-failure:5
immich-db:
image: ghcr.io/immich-app/postgres:16-vectorchord0.4.3-pgvectors0.2.0
container_name: Immich-DB
hostname: immich-db
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD", "pg_isready", "-q", "-d", "immich", "-U", "immichuser"]
interval: 10s
timeout: 5s
retries: 5
shm_size: 128mb
volumes:
- /volume1/docker/immich/db:/var/lib/postgresql/data:rw
environment:
- TZ=Europe/Bratislava
- POSTGRES_DB=immich
- POSTGRES_USER=immichuser
- POSTGRES_PASSWORD=zmenHeslo123
restart: on-failure:5
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: Immich-SERVER
hostname: immich-server
user: 1026:100
security_opt:
- no-new-privileges:true
environment:
- TZ=Europe/Bratislava
- DB_HOSTNAME=immich-db
- DB_USERNAME=immichuser
- DB_PASSWORD=zmenHeslo123
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=immich-redis
- JWT_SECRET=zmenNaVlastnyToken
ports:
- 8212:2283
volumes:
- /volume1/docker/immich/upload:/usr/src/app/upload:rw
restart: on-failure:5
depends_on:
immich-redis:
condition: service_healthy
immich-db:
condition: service_started
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release
container_name: Immich-LEARNING
hostname: immich-machine-learning
user: 1026:100
security_opt:
- no-new-privileges:true
environment:
- TZ=Europe/Bratislava
- DB_HOSTNAME=immich-db
- DB_USERNAME=immichuser
- DB_PASSWORD=zmenHeslo123
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=immich-redis
- MPLCONFIGDIR=/matplotlib
volumes:
- /volume1/docker/immich/upload:/usr/src/app/upload:rw
- /volume1/docker/immich/cache:/cache:rw
- /volume1/docker/immich/matplotlib:/matplotlib:rw
restart: on-failure:5
depends_on:
immich-db:
condition: service_started
V stacku je nastavené user: 1026:100 — toto sú príklady. Zmeň ich na svoje skutočné hodnoty. UID a GID svojho DSM používateľa zistíš v Portainer → Users, alebo cez SSH príkazom id [meno_používateľa]. Na Windows a Linux variantoch nie je user: potrebný.
PostgreSQL databáza na Windows vyžaduje Docker named volume (pgdata) namiesto bind mount — bind mount na Windows spôsobuje problémy s oprávneniami súborového systému. Named volume je deklarovaný v sekcii volumes: na konci stacku.
Zmeň heslo v DB_PASSWORD a POSTGRES_PASSWORD na vlastné. Klikni Deploy the stack a počkaj na správu "Success Stack successfully deployed".
3. JWT Secret
Pred nasadením stacku nahraď hodnotu zmenNaVlastnyToken pri JWT_SECRET vlastným bezpečným tokenom. Použi náš Token Generator — nastav dĺžku na 128 znakov.
JWT Secret slúži na podpisovanie prihlasovacích tokenov. Ak použiješ predvolený alebo slabý secret, útočník môže sfalšovať session. Vygeneruj unikátny náhodný reťazec — raz nastavený sa nemení (zmena odhlási všetkých používateľov).
4. Prvé spustenie
Po úspešnom deploy počkaj 2 minúty — Immich sa inicializuje a sťahuje ML modely. Potom otvor v prehliadači http://[IP-tvojho-servera]:8212 a klikni Getting Started.
Ak chceš mať Immich dostupný aj z internetu, nastav FQDN (plne kvalifikované doménové meno) v Administration → System Settings → Server → Server external domain — napr. https://photos.tvojadomena.sk. Odporúčaný spôsob ako doménu bezpečne sprístupniť bez otvárania portov na routeri je cez Cloudflare Tunnel.
Immich sa ešte inicializuje — prvé spustenie trvá 1–3 minúty. Obnoví stránku po chvíli. Ak problém pretrváva, skontroluj logy kontajnera Immich-SERVER v Portainer.
5. Setup Wizard krok za krokom
Vytvor admin účet — zadaj email a heslo, klikni Sign Up. Potom sa prihlás a prejdi úvodným wizardom:
Theme — vyber farebnú tému rozhrania
Language — vyber jazyk rozhrania
Server Privacy — zapni Map (zobrazenie fotiek na mape podľa GPS) a Version Check (upozornenia na nové verzie)
User Privacy — nastav predvolené súkromie pre nových používateľov
Storage Template — definuje ako budú fotky ukladané na disk (voliteľné, predvolené nastavenie je funkčné)
Backups — nastav automatické zálohy databázy
Mobile App — zobrazia sa inštrukcie na prepojenie s mobilnou appkou
6. Mobilná appka
Stiahni Immich z Google Play alebo App Store. Po inštalácii zadaj adresu svojho servera — http://[IP]:8212 — a prihlasovacie údaje. V nastaveniach appky zapni automatickú zálohu (Backup) a vyber ktoré albumy zo zariadenia sa majú synchronizovať.
Ak chceš zálohovať fotky aj mimo domácej siete, spáruj Immich s Cloudflare Tunnel. Appka bude fungovať cez vlastnú doménu kdekoľvek — bez otvárania portov na routeri.
Troubleshooting
Fotky sa nevedia uložiť alebo kontajner padá — skontroluj user: UID:GID v stacku. Hodnoty musia zodpovedať skutočnému DSM používateľovi ktorý vlastní priečinok /volume1/docker/immich/.
Immich-LEARNING vyžaduje viac RAM — odporúčané minimum je 4 GB voľnej pamäte. Na slabšom NAS môže byť pomalý alebo nestabilný. Logy skontroluj v Portainer → Containers → Immich-LEARNING → Logs.