---
title: "Immich con Docker Compose y hosting en un clic"
description: "Autoaloja Immich, la alternativa de código abierto a Google Photos: backup del teléfono, cronología, álbumes, reconocimiento facial y búsqueda inteligente."
---

[← Todas las plantillas](https://pethost.dev/es/templates/) · [Multimedia](https://pethost.dev/es/templates/media/)

# Despliega Immich en un clic

Tus fotos y videos, con backup desde tu teléfono, búsqueda inteligente, reconocimiento facial y álbumes

Una alternativa autoalojada a Google Photos e iCloud Photos.

[Desplegar en Pethost](https://console.pethost.dev/?template=immich)

## ¿Qué es Immich?

Immich es una biblioteca de fotos y videos autoalojada que la gente usa en lugar de Google Photos o iCloud Photos. Sus apps para iPhone y Android hacen backup de la galería del teléfono en segundo plano, y la página web y las apps lo muestran todo en una sola cronología, con álbumes, favoritos, el “Archivo”, un mapa de dónde se tomó cada foto y “Recuerdos” del mismo día en años anteriores.

El machine learning, que funciona dentro de Immich sin enviar nada a un servicio en la nube, encuentra a las personas de tus fotos y agrupa sus rostros, lee el texto de las imágenes y hace posible la búsqueda inteligente, que encuentra una foto a partir de palabras como “perro en una playa”. Immich conserva archivos RAW, Live Photos y fotos en movimiento, comparte álbumes o enlaces con quien quieras y, con “Compartir con compañeros”, deja que otra persona vea tu biblioteca. Cada persona del servidor tiene su propia cuenta.

Esta plantilla ejecuta el servidor de Immich, su machine learning, Valkey y su PostgreSQL con las extensiones vectoriales que necesita, con su biblioteca en un volumen. El administrador se crea con el correo y la contraseña que indicas antes de que Immich responda a nadie, y los enlaces compartidos llevan la dirección del proyecto. Immich pide al menos 6 GB de memoria y 2 núcleos, por lo que cabe en el plan Grow; tus fotos ocupan el disco, así que vigila cuánto ocupa a medida que crece la biblioteca.

## Hosting de Immich en Pethost

1. Inicias sesión en Pethost con una passkey, GitHub o Google. ¿Aún no tienes máquina? Eliges un plan, y el enlace espera hasta que esté lista.
2. Nuevo proyecto se abre en Immich. Rellenas lo que pide y haces clic en Crear proyecto: **Correo electrónico**, **Contraseña de administrador**.
3. En un par de minutos Immich está en marcha en su propia dirección con HTTPS. Sus secretos se generan al azar, y sus datos entran en el backup de cada noche.
4. Es un proyecto como cualquier otro: tú o tu agente lo pueden cambiar, volver a una versión anterior o restaurar.

## Preguntas sobre Immich

**¿Immich es gratis?**

Sí. Immich es de código abierto bajo la licencia AGPL-3.0, y sus creadores dicen que todas sus funciones son gratis para siempre, sin nada detrás de un muro de pago. Para apoyar el proyecto, puedes comprarlo para ti o para un servidor, y eso no desbloquea nada más.

**¿Cómo hago backup de las fotos de mi teléfono en Immich?**

Instala la app de Immich desde la App Store o Google Play, indica la dirección de tu Immich como su “Enlace del punto de acceso (endpoint) del servidor”, inicia sesión y activa la “Copia de seguridad” para los álbumes que elijas. La app sube las fotos y los videos nuevos en segundo plano, y se salta lo que ya está allí.

**¿Immich reconoce rostros?**

Sí. Su machine learning, que funciona dentro de Immich y no envía tus fotos a ningún sitio, detecta los rostros de cada foto y los agrupa en “Personas”, a las que tú pones nombre. También lee el texto de las imágenes, y su búsqueda inteligente encuentra fotos por lo que aparece en ellas.

**¿Cuánta memoria y disco necesita Immich?**

Immich pide al menos 6 GB de memoria y 2 núcleos, y aquí usa unos 1,5 GB en reposo, unos 2,5 GB mientras el machine learning procesa fotos nuevas y más en la primera subida, cuando descarga sus modelos. El disco guarda tus originales más las miniaturas y los videos transcodificados, así que calcula más espacio que el tamaño de la propia biblioteca.

**¿Immich es seguro para la única copia de mis fotos?**

El propio Immich recomienda un backup 3-2-1 de las fotos que te importan: tres copias, en dos tipos de almacenamiento, una de ellas en otro lugar. Pethost hace un backup cada noche de los volúmenes del proyecto, e Immich además hace dumps de su base de datos por sí solo; guarda también los originales en otra parte.

**¿Cuánta memoria y disco necesita Immich?**

Immich usa unos 1,5 GB de memoria en reposo con su base de datos y el machine learning, unos 2,5 GB mientras procesa fotos nuevas y más en la primera subida, cuando descarga sus modelos; el disco es tu biblioteca más sus miniaturas y videos. En Pethost le basta el plan Grow, y queda sitio para otras apps a su lado.

## El archivo Docker Compose de Immich

La plantilla es este compose.yaml y las variables que se escriben en el .env del proyecto al crearlo. Pethost ejecuta el archivo tal como está escrito.

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

**Volúmenes, en el backup de cada noche:** 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)[Verla en GitHub](https://github.com/pethost-dev/templates/tree/main/immich)

## [Más en Multimedia](https://pethost.dev/es/templates/media/)

- [**Owncast**Video en tiempo real y chat en tu propia página](https://pethost.dev/es/templates/owncast/)
- [**Navidrome**Un servidor de música que transmite tu propia colección](https://pethost.dev/es/templates/navidrome/)
- [**RomM**Una biblioteca y un reproductor en el navegador para tus juegos retro](https://pethost.dev/es/templates/romm/)
- [**Komga**Un servidor y lector web para tus cómics, manga y libros electrónicos](https://pethost.dev/es/templates/komga/)
- [**Lychee**Una galería para subir, ordenar y compartir tus fotos](https://pethost.dev/es/templates/lychee/)
- [**Audiobookshelf**Tu propio servidor de audiolibros y podcasts: escucha en el navegador o en las apps, con el progreso guardado entre dispositivos](https://pethost.dev/es/templates/audiobookshelf/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Plantillas](https://pethost.dev/es/templates/)
- [Sobre nosotros](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/es/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Términos](https://pethost.dev/terms/)
- [Privacidad](https://pethost.dev/privacy/)
- [Reembolsos](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bases de datos

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

Comparativas

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/es/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/es/blog/coolify-cloud-vs-dokploy-cloud/)
- [Precios de Railway vs Render vs Fly.io](https://pethost.dev/es/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hosting gestionado para Docker Compose](https://pethost.dev/es/blog/managed-docker-compose-hosting/)

Alternativas

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