Dealownia
Menu
sprawdzono – jak sprawdzamy oferty

Immich na własnym serwerze: zamiennik Zdjęć Google

Immich w Dockerze krok po kroku: wymagania, compose, dostęp z telefonu, kopie bazy i zdjęć, ile miejsca na Twoją galerię i porównanie z Google One i iCloud+.

Aplikacje na własnym serwerzezaktualizowano 8 min czytania

Redakcja serwisu Dealownia · ceny i fakty ze stron dostawców, jak sprawdzamy

Darmowe 15 GB w Google kończy się po kilku latach robienia zdjęć telefonem i wtedy zostaje abonament albo kasowanie. Immich to aplikacja do samodzielnego hostowania, która robi to samo co Zdjęcia Google: aplikacja na telefon wysyła zdjęcia w tle, a na serwerze masz oś czasu, albumy, udostępnianie i wyszukiwanie. Rachunek wygląda tak: zamiast abonamentu płacisz za dysk, prąd albo serwer – i za kopię zapasową, bo od teraz to Ty odpowiadasz za to, żeby zdjęcia nie zniknęły.

Wymagania według dokumentacji

Zasób Minimum Zalecane Uwagi
RAM 6 GB 8 GB na 4 GB Immich ruszy, jeśli wyłączysz uczenie maszynowe (wyszukiwanie i rozpoznawanie twarzy)
CPU 2 rdzenie 4 rdzenie
System Linux 64-bit (Ubuntu, Debian) inne systemy dokumentacja „zdecydowanie odradza”
Dysk na zdjęcia tyle, ile ma biblioteka + 10–20% system plików uniksowy (ext4, ZFS)
Dysk na bazę lokalny, najlepiej SSD nigdy udział sieciowy
Docker wtyczka Compose (docker compose) stare docker-compose nie jest obsługiwane

Z tych liczb wynika, gdzie Immich ma najwięcej sensu: na domowym mini PC albo NAS-ie z dużym dyskiem. Na VPS-ie RAM się znajdzie, ale setki gigabajtów dysku podnoszą cenę planu. Jeśli wybierasz sprzęt do domu, zajrzyj do poradnika mini PC do homelabu; plany VPS z większą pamięcią porównasz w rankingu VPS.

Ile miejsca na Twoją galerię

Nie ma jednej średniej wielkości zdjęcia – zależy od telefonu, formatu (HEIC, JPEG) i tego, ile nagrywasz filmów. Policz na własnych danych:

tekst
miejsce na bibliotekę = rozmiar galerii z telefonu (lub chmury) × 1,2
miejsce na kopię       = rozmiar galerii (miniatury i przekodowane filmy można pominąć)

Rozmiar galerii odczytasz w ustawieniach pamięci telefonu albo w panelu obecnej chmury. Współczynnik 1,2 bierze się z dokumentacji Immich: miniatury i przekodowane filmy powiększają bibliotekę o 10–20%.

Przykład rachunku (założenie, nie pomiar): 20 000 zdjęć po średnio 3 MB to 60 GB, z zapasem na miniatury ok. 72 GB. Do tego filmy – policz je osobno, bo to one zwykle decydują o rozmiarze galerii; telefon pokazuje ich łączny rozmiar w ustawieniach pamięci. Dodaj zapas na kilka lat przyrostu: sprawdź, o ile galeria urosła w ostatnim roku.

Immich czy abonament

Ceny ze stron producentów, sprawdzone 12.11.2026, płatność miesięczna:

Usługa Pojemność Cena miesięcznie
Google (bez abonamentu) 15 GB 0 zł
Google One Basic 100 GB 8,99 zł
Google AI Plus 2 TB 46,99 zł
Google AI Pro 5 TB 97,99 zł
iCloud+ 50 GB 4,99 zł
iCloud+ 200 GB 14,99 zł
iCloud+ 2 TB 49,99 zł
iCloud+ 6 TB 149,99 zł

Google podaje, że płatność roczna pozwala zaoszczędzić do 16%, a Apple – że każdy pakiet iCloud+ można bez dopłat udostępnić pięciu członkom rodziny. Na stronie Google w dniu sprawdzenia nie było osobnego planu 200 GB.

Własny Immich wygrywa przy dużej bibliotece (setki GB i więcej), gdy masz już domowy serwer albo NAS i dyski. Jeśli galeria mieści się w 100–200 GB, a serwer i dyski trzeba by dopiero kupić, abonament za 8,99–14,99 zł miesięcznie trudno przebić – zwłaszcza że do kosztu Immich doliczasz:

Wersję z wynajętym serwerem zamiast domowego policzysz w kalkulatorze self-hosting czy abonament: Immich wymaga według dokumentacji co najmniej 6 GB RAM, więc VPS musi być spory.

Krok 1. Katalog i pliki

Zakładamy serwer z Debianem albo Ubuntu, Dockerem i wtyczką Compose, jak w poradniku od zera. Pliki pobierasz z najnowszego wydania – dokumentacja ostrzega, że docker-compose.yml z gałęzi głównej może nie pasować do wydanej wersji.

bash
sudo mkdir -p /opt/apps/immich && sudo chown deploy:deploy /opt/apps/immich
cd /opt/apps/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
chmod 600 .env

12.11.2026 najnowszym wydaniem było v3.4.1.

Krok 2. Ustawienia w .env

Otwórz nano .env i ustaw:

  • UPLOAD_LOCATION – katalog na dysku z miejscem na całą bibliotekę, np. /srv/immich/library.
  • DB_DATA_LOCATION – katalog bazy na lokalnym dysku, najlepiej SSD, np. /srv/immich/postgres. Dokumentacja wyklucza udziały sieciowe.
  • DB_PASSWORD – zmień domyślne postgres na długie hasło z samych liter i cyfr (A-Za-z0-9), tak zaleca dokumentacja. Baza nie jest wystawiona na zewnątrz, ale domyślne hasło to zły nawyk.
  • IMMICH_VERSION – w pliku jest v3, czyli najnowsza wersja z linii 3. Możesz przypiąć konkretną wersję, np. v3.4.1, i aktualizować świadomie.
  • TZ – odkomentuj i wpisz Europe/Warsaw.

Hasło wygenerujesz poleceniem openssl rand -hex 24 (sam zapis szesnastkowy spełnia wymóg liter i cyfr).

Krok 3. Port tylko tam, gdzie trzeba

W pobranym pliku serwis immich-server publikuje port 2283:2283, czyli na wszystkich interfejsach. Opublikowane porty Dockera omijają ufw, więc zdecyduj od razu:

  • Serwer w domu, dostęp z zewnątrz przez VPN (Tailscale albo WireGuard – opis w poradniku Tailscale czy WireGuard). Zostaw 2283:2283, ale nie przekierowuj tego portu na routerze. Telefon łączy się przez VPN.
  • VPS albo dostęp przez domenę z HTTPS. Zmień wpis na "127.0.0.1:2283:2283" i postaw przed Immich nginx (krok 5). Port 2283 nie jest wtedy widoczny z internetu.

Krok 4. Uruchomienie i konto administratora

bash
docker compose up -d
docker compose ps

Pierwsze uruchomienie pobiera obrazy kontenerów, więc chwilę trwa. Według dokumentacji pierwszy zarejestrowany użytkownik zostaje administratorem, dlatego załóż konto od razu – w sieci domowej pod http://ADRES-SERWERA:2283, na VPS-ie przez tunel ssh -N -L 2283:127.0.0.1:2283 deploy@203.0.113.10 i http://localhost:2283. Konta dla domowników dodasz w Administration → Users.

Jeśli serwer ma tylko 4 GB RAM, dokumentacja dopuszcza pracę Immich pod warunkiem wyłączenia uczenia maszynowego. Stracisz wtedy wyszukiwanie po treści zdjęć i rozpoznawanie twarzy.

Krok 5. Domena i HTTPS (opcjonalnie)

Immich musi działać w katalogu głównym domeny albo subdomeny, np. zdjecia.example.pl – podścieżka typu example.pl/immich nie jest obsługiwana. Plik /etc/nginx/sites-available/zdjecia.example.pl na wzór przykładu z dokumentacji Immich:

nginx
# immich: kontener na 127.0.0.1:2283 (/opt/apps/immich)
server {
    listen 80;
    listen [::]:80;
    server_name zdjecia.example.pl;

    client_max_body_size 50000M;
    proxy_request_buffering off;
    client_body_buffer_size 1024k;

    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    proxy_http_version 1.1;
    proxy_redirect     off;
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    send_timeout       600s;

    location / {
        proxy_pass http://127.0.0.1:2283;
        proxy_set_header Upgrade    $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location = /.well-known/immich {
        proxy_pass http://127.0.0.1:2283;
    }
}
bash
sudo ln -s /etc/nginx/sites-available/zdjecia.example.pl /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d zdjecia.example.pl
  • client_max_body_size 50000M pozwala wysłać duże filmy; dokumentacja sugeruje zmniejszyć tę wartość, jeśli nie potrzebujesz aż tyle.
  • proxy_request_buffering off według dokumentacji zmniejsza zużycie pamięci przez proxy i przyspiesza wysyłanie.
  • Blok /.well-known/immich dokumentacja zaleca przy certyfikatach HTTP-01, bo bez niego aplikacja mobilna może mieć problemy z połączeniem.
  • Ten plik ma własne nagłówki proxy_set_header, więc nie dołączaj do niego wspólnego snippetu z poradnika o reverse proxy – nagłówki by się zdublowały.

Immich jest wtedy publicznie dostępny pod adresem z logowaniem. Ustaw wszystkim kontom silne hasła.

Krok 6. Telefon

Zainstaluj aplikację Immich (App Store, Google Play, F-Droid), zaloguj się adresem serwera – tym samym co w przeglądarce – i na ekranie kopii (ikona chmury) wybierz albumy oraz włącz kopię. Pierwsze wysyłanie dużej galerii trwa długo; zostaw telefon na Wi-Fi i ładowarce.

Krok 7. Kopie – bez tego nie usuwaj zdjęć z telefonu

Dokumentacja zaleca strategię 3-2-1 i kopię zarówno plików, jak i bazy. Baza zawiera ścieżki i metadane, a jej kopia nie zawiera zdjęć.

Co kopiować z UPLOAD_LOCATION:

  • konieczne: library, upload, profile;
  • również: backups – tam Immich sam zapisuje zrzuty bazy (domyślnie codziennie o 2:00, ostatnie 14; zmienisz to w Administration → Settings → Database Dump Settings), a odtwarzanie ich oczekuje;
  • można pominąć: thumbs i encoded-video – po odtworzeniu wygenerujesz je ponownie zadaniami w panelu.

Kolejność: jeśli nie zatrzymujesz serwera na czas kopii, dokumentacja każe kopiować najpierw bazę, potem pliki. Najgorszy przypadek to wtedy pliki, o których baza nie wie, a nie wpisy bez plików.

Kopię poza domem albo poza serwerem zrobisz restikiem według poradnika o kopiach – wskaż w nim katalogi z listy wyżej. Przykład wykluczeń dla restic:

tekst
--exclude /srv/immich/library/thumbs --exclude /srv/immich/library/encoded-video

Odtworzenie według dokumentacji wymaga całkiem świeżej instalacji (serwer nie może być wcześniej uruchomiony) i zgodnej wersji Immich – najprościej tej samej. Sprawdź je raz na jakiś czas na innej maszynie, zanim będzie potrzebne naprawdę.

Aktualizacje

Przed aktualizacją przeczytaj informacje o wydaniu – Immich bywa zmieniany w sposób wymagający ręcznych kroków (np. proces kopii i odtwarzania zmienił się w wersji 2.5.0). Potem:

bash
cd /opt/apps/immich
docker compose pull && docker compose up -d

Najczęstsze problemy

  • unknown shorthand flag: 'd' in -d. Masz starego Dockera bez wtyczki Compose. Zainstaluj Docker Engine z oficjalnych pakietów.
  • Kontener uczenia maszynowego zabija serwer brakiem pamięci. Za mało RAM – wyłącz uczenie maszynowe albo dołóż pamięci.
  • Aplikacja mobilna nie łączy się przez domenę. Brak bloku /.well-known/immich, brak HTTPS albo telefon łączy się adresem z sieci domowej spoza niej.
  • Wysyłanie dużych filmów przerywa się. Za mały client_max_body_size albo limit czasu w innym proxy przed nginx (np. CDN).
  • Baza nie startuje po przeniesieniu na NAS. Baza na udziale sieciowym nie jest obsługiwana – przenieś DB_DATA_LOCATION na lokalny dysk.

Źródła

Sprawdzone 12.11.2026:

Powiązane poradniki