---
title: "Immich com Docker Compose e hospedagem em um clique"
description: "Auto-hospede o Immich, a alternativa open source ao Google Photos: backup do celular, linha do tempo, álbuns, reconhecimento facial e busca inteligente."
---

[← Todos os templates](https://pethost.dev/pt/templates/) · [Mídia](https://pethost.dev/pt/templates/media/)

# Faça deploy de Immich em um clique

Suas fotos e vídeos, com backup do celular, busca inteligente, reconhecimento de rostos e álbuns

Uma alternativa auto-hospedada para Google Photos e iCloud Photos.

[Fazer deploy no Pethost](https://console.pethost.dev/?template=immich)

## O que é Immich?

O Immich é uma biblioteca de fotos e vídeos auto-hospedada que as pessoas usam no lugar do Google Photos ou do iCloud Photos. Os apps para iPhone e Android fazem backup das fotos da câmera em segundo plano, e a página web e os apps mostram tudo numa só linha do tempo, com álbuns, favoritos, fotos arquivadas, um mapa de onde cada foto foi tirada e memórias do mesmo dia em anos anteriores.

O aprendizado de máquina, que roda dentro do Immich sem mandar nada para um serviço na nuvem, encontra as pessoas nas suas fotos e agrupa os rostos delas, lê texto em imagens e faz funcionar a busca inteligente, que encontra uma foto a partir de palavras como “cachorro na praia”. O Immich guarda arquivos RAW, Live Photos e fotos com movimento, compartilha álbuns ou links com qualquer pessoa e, pelo “Compartilhamento com Parceiro”, deixa outra pessoa ver a sua biblioteca. Cada pessoa no servidor tem a própria conta.

Este template roda o servidor do Immich, o aprendizado de máquina dele, o Valkey e o PostgreSQL dele com as extensões vetoriais de que precisa, com a biblioteca num volume. O administrador é criado com o e-mail e a senha que você informa antes de o Immich responder a qualquer pessoa, e os links compartilhados recebem o endereço do projeto. O Immich pede pelo menos 6 GB de memória e 2 núcleos, então cabe no plano Grow; suas fotos ocupam o disco, por isso acompanhe o tamanho dele conforme a biblioteca cresce.

## Hospedagem de Immich no Pethost

1. Você entra no Pethost com uma passkey, GitHub ou Google. Ainda não tem máquina? Você escolhe um plano, e o link espera até ela ficar pronta.
2. Novo projeto abre em Immich. Você preenche o que ele pede e clica em Criar projeto: **E-mail**, **Senha do administrador**.
3. Em um ou dois minutos Immich está no ar no próprio endereço com HTTPS. Os segredos são gerados ao acaso, e os dados vão para o backup noturno.
4. É um projeto como qualquer outro: você ou seu agente podem alterá-lo, fazer rollback ou restaurá-lo.

## Perguntas sobre Immich

**O Immich é gratuito?**

Sim. O Immich é de código aberto sob a licença AGPL-3.0, e os criadores dizem que todos os recursos são gratuitos para sempre, sem nada atrás de paywall. Para apoiar o projeto, você pode comprá-lo para uso próprio ou para um servidor, o que não libera nada a mais.

**Como faço backup das fotos do celular no Immich?**

Instale o app do Immich pela App Store ou pelo Google Play, informe o endereço do seu Immich como “URL do servidor”, entre e ative o “Backup” para os álbuns que escolher. O app envia fotos e vídeos novos em segundo plano e pula o que já está lá.

**O Immich reconhece rostos?**

Sim. O aprendizado de máquina dele, que roda dentro do Immich e não manda suas fotos para lugar nenhum, detecta os rostos em cada foto e os agrupa em “Pessoas”, que você nomeia. Ele também lê texto em imagens, e a busca inteligente encontra fotos pelo que aparece nelas.

**De quanta memória e disco o Immich precisa?**

O Immich pede pelo menos 6 GB de memória e 2 núcleos, e aqui ocupa cerca de 1,5 GB em repouso, cerca de 2,5 GB enquanto o aprendizado de máquina processa fotos novas e mais no primeiro upload, quando baixa os modelos. O disco guarda seus originais mais as miniaturas e os vídeos transcodificados, então conte com mais espaço que o tamanho da própria biblioteca.

**O Immich é seguro para a única cópia das minhas fotos?**

O próprio Immich recomenda manter um backup 3-2-1 das fotos que importam para você: três cópias, em dois tipos de armazenamento, uma delas em outro lugar. O Pethost faz backup dos volumes do projeto toda noite, e o Immich também faz dumps do próprio banco de dados sozinho; mantenha os originais em mais algum lugar também.

**De quanta memória e disco Immich precisa?**

O Immich ocupa cerca de 1,5 GB de memória em repouso com o banco de dados e o aprendizado de máquina, cerca de 2,5 GB enquanto processa fotos novas e mais no primeiro upload, quando baixa os modelos; o disco é a sua biblioteca mais as miniaturas e os vídeos dela. No Pethost, o plano Grow basta, com espaço para outros apps ao lado.

## Arquivo Docker Compose de Immich

O template é este compose.yaml e as variáveis gravadas no .env do projeto quando ele é criado. O Pethost roda o arquivo exatamente como está escrito.

**Containers:** 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).

**Volumes, no backup noturno:** 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)[Ver no GitHub](https://github.com/pethost-dev/templates/tree/main/immich)

## [Mais em Mídia](https://pethost.dev/pt/templates/media/)

- [**Owncast**Vídeo ao vivo e chat em uma página só sua](https://pethost.dev/pt/templates/owncast/)
- [**Navidrome**Um servidor de música que faz streaming da sua própria coleção](https://pethost.dev/pt/templates/navidrome/)
- [**RomM**Uma biblioteca e um player no navegador para os seus jogos retrô](https://pethost.dev/pt/templates/romm/)
- [**Komga**Um servidor e leitor web para seus quadrinhos, mangás e e-books](https://pethost.dev/pt/templates/komga/)
- [**Lychee**Uma galeria para enviar, organizar e compartilhar suas fotos](https://pethost.dev/pt/templates/lychee/)
- [**Audiobookshelf**Seu próprio servidor de audiolivros e podcasts: ouça no navegador ou nos apps, com o progresso guardado entre dispositivos](https://pethost.dev/pt/templates/audiobookshelf/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Templates](https://pethost.dev/pt/templates/)
- [Sobre nós](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/pt/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Termos](https://pethost.dev/terms/)
- [Privacidade](https://pethost.dev/privacy/)
- [Reembolsos](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bancos de dados

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

Comparativos

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/pt/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/pt/blog/coolify-cloud-vs-dokploy-cloud/)
- [Preços Railway vs Render vs Fly.io](https://pethost.dev/pt/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hospedagem gerenciada de Docker Compose](https://pethost.dev/pt/blog/managed-docker-compose-hosting/)

Alternativas

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