← Todas las plantillas · Multimedia
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.
¿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
- 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.
- Nuevo proyecto se abre en Immich. Rellenas lo que pide y haces clic en Crear proyecto: Correo electrónico, Contraseña de administrador.
- 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.
- 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:
Más en Multimedia
- OwncastVideo en tiempo real y chat en tu propia página
- NavidromeUn servidor de música que transmite tu propia colección
- RomMUna biblioteca y un reproductor en el navegador para tus juegos retro
- KomgaUn servidor y lector web para tus cómics, manga y libros electrónicos
- LycheeUna galería para subir, ordenar y compartir tus fotos
- AudiobookshelfTu propio servidor de audiolibros y podcasts: escucha en el navegador o en las apps, con el progreso guardado entre dispositivos