---
title: "Immich: Docker Compose i hosting jednym kliknięciem"
description: "Hostuj Immich u siebie: alternatywa open source dla Google Photos. Backup z telefonu, oś czasu, albumy, rozpoznawanie twarzy i inteligentne wyszukiwanie."
---

[← Wszystkie szablony](https://pethost.dev/pl/templates/) · [Multimedia](https://pethost.dev/pl/templates/media/)

# Wdróż Immich jednym kliknięciem

Twoje zdjęcia i filmy, z backupem prosto z telefonu, inteligentnym wyszukiwaniem, rozpoznawaniem twarzy i albumami

Alternatywa dla Google Photos i iCloud Photos, hostowana u siebie.

[Wdróż na Pethost](https://console.pethost.dev/?template=immich)

## Czym jest Immich?

Immich to hostowana u siebie biblioteka zdjęć i filmów, której ludzie używają zamiast Google Photos albo iCloud Photos. Jego aplikacje na iPhone’a i Androida robią w tle backup zdjęć z aparatu, a strona internetowa i aplikacje pokazują wszystko na jednej osi czasu, z albumami, ulubionymi, archiwum, mapą miejsc, w których zrobiono każde zdjęcie, i wspomnieniami z tego samego dnia w poprzednich latach.

Uczenie maszynowe, które działa w samym Immich i niczego nie wysyła do usług w chmurze, znajduje osoby na zdjęciach i grupuje ich twarze, czyta tekst na obrazach i napędza inteligentne wyszukiwanie, które znajduje zdjęcie po słowach takich jak „pies na plaży”. Immich przechowuje pliki RAW, Live Photos i zdjęcia ruchome, udostępnia albumy albo linki komu chcesz, a dzięki funkcji „Dzielenie z partnerami” druga osoba może oglądać twoją bibliotekę. Każda osoba na serwerze ma własne konto.

Ten szablon uruchamia serwer Immich, jego uczenie maszynowe, Valkey i jego PostgreSQL z potrzebnymi rozszerzeniami wektorowymi, a bibliotekę trzyma na wolumenie. Administrator powstaje z e-maila i hasła, które podajesz, zanim Immich komukolwiek odpowie, a udostępnione linki dostają adres projektu. Immich wymaga co najmniej 6 GB pamięci i 2 rdzeni, dlatego mieści się w planie Grow; zdjęcia zajmują dysk, więc pilnuj, ile zostało na nim miejsca, gdy biblioteka rośnie.

## Hosting Immich na Pethost

1. Logujesz się do Pethost kluczem dostępu, przez GitHub albo Google. Nie masz jeszcze maszyny? Wybierasz plan, a link czeka, aż będzie gotowa.
2. Okno „Nowy projekt” otwiera się na aplikacji Immich. Wypełniasz to, o co prosi, i klikasz „Utwórz projekt”: **E-mail**, **Hasło administratora**.
3. Za minutę czy dwie aplikacja Immich działa pod własnym adresem z HTTPS. Jej sekrety są tworzone losowo, a dane trafiają do nocnego backupu.
4. To projekt jak każdy inny: ty albo twój agent możecie go zmienić, cofnąć do wcześniejszej wersji albo przywrócić.

## Pytania o Immich

**Czy Immich jest darmowy?**

Tak. Immich to open source na licencji AGPL-3.0, a jego twórcy mówią, że wszystkie funkcje są darmowe na zawsze i nic nie jest ukryte za paywallem. Możesz go kupić dla siebie albo dla serwera, żeby wesprzeć projekt, ale niczego więcej to nie odblokowuje.

**Jak zrobić backup zdjęć z telefonu do Immich?**

Zainstaluj aplikację Immich z App Store albo Google Play, podaj adres swojego Immich jako „URL Serwera”, zaloguj się i włącz kopię zapasową dla wybranych albumów. Aplikacja wgrywa nowe zdjęcia i filmy w tle i pomija to, co już jest na serwerze.

**Czy Immich rozpoznaje twarze?**

Tak. Jego uczenie maszynowe, które działa w samym Immich i nigdzie nie wysyła twoich zdjęć, wykrywa twarze na każdym zdjęciu i grupuje je w zakładce „Osoby”, gdzie nadajesz im imiona. Czyta też tekst na obrazach, a inteligentne wyszukiwanie znajduje zdjęcia po tym, co na nich jest.

**Ile pamięci i miejsca na dysku potrzebuje Immich?**

Immich wymaga co najmniej 6 GB pamięci i 2 rdzeni, a tutaj zajmuje około 1,5 GB w spoczynku, około 2,5 GB, gdy uczenie maszynowe przetwarza nowe zdjęcia, a przy pierwszym wgraniu, gdy pobiera swoje modele, jeszcze więcej. Na dysku są oryginały plus miniatury i transkodowane filmy, więc zaplanuj więcej miejsca, niż zajmuje sama biblioteka.

**Czy Immich jest bezpieczny dla jedynej kopii moich zdjęć?**

Sam Immich zaleca backup 3-2-1 zdjęć, na których ci zależy: trzy kopie na dwóch rodzajach nośników, w tym jedna w innym miejscu. Pethost robi backup wolumenów projektu co noc, a Immich sam robi też dumpy swojej bazy danych; trzymaj oryginały również gdzie indziej.

**Ile pamięci i miejsca na dysku potrzebuje Immich?**

Immich w spoczynku zajmuje razem z bazą danych i uczeniem maszynowym około 1,5 GB pamięci, podczas przetwarzania nowych zdjęć około 2,5 GB, a przy pierwszym wgraniu, gdy pobiera swoje modele, jeszcze więcej; dysk to twoja biblioteka plus jej miniatury i filmy. Na Pethost wystarczy mu plan Grow, z miejscem na inne aplikacje obok.

## Immich: plik Docker Compose

Szablon to ten compose.yaml i zmienne zapisywane do .env projektu przy jego tworzeniu. Pethost uruchamia plik dokładnie tak, jak jest napisany.

**Kontenery:** immich-server (ghcr.io/immich-app/immich-server:v3), immich-machine-learning (ghcr.io/immich-app/immich-machine-learning:v3), redis (valkey/valkey:9), database (ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0).

**Wolumeny, w nocnym backupie:** library, db, model-cache.

```
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:v3
    restart: unless-stopped
    environment:
      DB_HOSTNAME: database
      DB_USERNAME: postgres
      DB_PASSWORD: ${DB_PASSWORD}
      DB_DATABASE_NAME: immich
      REDIS_HOSTNAME: redis
      TZ: ${TZ:-Etc/UTC}
      URL: ${URL}
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # A new Immich makes whoever opens it first its administrator. So its first start runs it on
    # port 2284, which nobody reaches, signs the administrator up there with the email and password
    # given, and sets the address shared links use; only then does Immich answer on 2283.
    command:
      - |
        set -e
        if [ ! -f /data/.pethost-admin ]; then
          # In a process group of its own, so that its workers stop with it.
          IMMICH_PORT=2284 setsid start.sh &
          setup=$$!
          SETUP_PID=$$setup node -e '
            const base = "http://127.0.0.1:2284/api";
            const { URL: url, ADMIN_EMAIL: email, ADMIN_PASSWORD: password } = process.env;
            const json = { "content-type": "application/json" };
            const call = async (path, options) => {
              const response = await fetch(base + path, options);
              if (!response.ok) throw new Error(path + ": " + response.status + " " + (await response.text()));
              return response.json();
            };
            const setUp = async () => {
              const { isInitialized } = await call("/server/config");
              if (isInitialized) return;
              const name = email.split("@")[0];
              await call("/auth/admin-sign-up", { method: "POST", headers: json, body: JSON.stringify({ email, password, name }) });
              const { accessToken } = await call("/auth/login", { method: "POST", headers: json, body: JSON.stringify({ email, password }) });
              const headers = { ...json, authorization: "Bearer " + accessToken };
              const config = await call("/system-config", { headers });
              config.server.externalDomain = url;
              await call("/system-config", { method: "PUT", headers, body: JSON.stringify(config) });
            };
            (async () => {
              let failure;
              for (let i = 0; i < 300; i++) {
                // Immich stops if it cannot start: the container starts again and so does this.
                try {
                  process.kill(Number(process.env.SETUP_PID), 0);
                } catch {
                  process.exit(1);
                }
                try {
                  return await setUp();
                } catch (error) {
                  failure = error;
                  await new Promise((done) => setTimeout(done, 1000));
                }
              }
              console.error(failure);
              process.exit(1);
            })();
          '
          kill -- -$$setup
          wait $$setup || true
          while kill -0 -- -$$setup 2>/dev/null; do sleep 1; done
          touch /data/.pethost-admin
        fi
        unset ADMIN_PASSWORD
        exec start.sh
    volumes:
      - library:/data
    depends_on:
      redis:
        condition: service_started
      database:
        condition: service_healthy
    # Its first start makes the database and the administrator before it answers on 2283.
    healthcheck:
      test: ["CMD-SHELL", "immich-healthcheck"]
      interval: 30s
      start_period: 10m
      start_interval: 5s

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:v3
    restart: unless-stopped
    volumes:
      - model-cache:/cache

  redis:
    image: valkey/valkey:9
    restart: unless-stopped
    healthcheck:
      test: redis-cli ping | grep -q PONG || exit 1

  database:
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: immich
      POSTGRES_INITDB_ARGS: --data-checksums
    shm_size: 128mb
    volumes:
      - db:/var/lib/postgresql/data

volumes:
  library:
  db:
  model-cache:
```

[compose.yaml](https://pethost.dev/templates/immich/compose.yaml)[Zobacz na GitHubie](https://github.com/pethost-dev/templates/tree/main/immich)

## [Więcej w kategorii Multimedia](https://pethost.dev/pl/templates/media/)

- [**Owncast**Wideo na żywo i czat na twojej własnej stronie](https://pethost.dev/pl/templates/owncast/)
- [**Navidrome**Serwer muzyczny, który streamuje twoją własną kolekcję](https://pethost.dev/pl/templates/navidrome/)
- [**RomM**Biblioteka i odtwarzacz w przeglądarce dla twoich gier retro](https://pethost.dev/pl/templates/romm/)
- [**Komga**Serwer i czytnik w przeglądarce dla twoich komiksów, mang i e-booków](https://pethost.dev/pl/templates/komga/)
- [**Lychee**Galeria do wgrywania, porządkowania i udostępniania zdjęć](https://pethost.dev/pl/templates/lychee/)
- [**Audiobookshelf**Własny serwer audiobooków i podcastów: słuchaj w przeglądarce lub w aplikacjach, z postępem zapamiętanym na wszystkich urządzeniach](https://pethost.dev/pl/templates/audiobookshelf/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Szablony](https://pethost.dev/pl/templates/)
- [O nas](https://pethost.dev/about/)
- [Dokumentacja](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/pl/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Regulamin](https://pethost.dev/terms/)
- [Prywatność](https://pethost.dev/privacy/)
- [Zwroty](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bazy danych

- [Postgres](https://pethost.dev/pl/postgres/)

Porównania

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/pl/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/pl/blog/coolify-cloud-vs-dokploy-cloud/)
- [Cennik Railway vs Render vs Fly.io](https://pethost.dev/pl/blog/railway-vs-render-vs-fly-io-pricing/)
- [Zarządzany hosting Docker Compose](https://pethost.dev/pl/blog/managed-docker-compose-hosting/)

Alternatywy

- [Alternatywy dla Railway](https://pethost.dev/pl/blog/railway-alternatives/)
- [Alternatywy dla Heroku](https://pethost.dev/pl/blog/heroku-alternatives/)
- [Alternatywy dla Dokploy](https://pethost.dev/pl/blog/dokploy-alternatives/)
- [Alternatywy dla Coolify](https://pethost.dev/pl/blog/coolify-alternatives/)
- [Alternatywy dla Render](https://pethost.dev/pl/blog/render-alternatives/)
- [Alternatywy dla Sliplane](https://pethost.dev/pl/blog/sliplane-alternatives/)
