Automatizar Immich en Docker para que siempre arranque tras un apagón (Guía completa)

a golden docker logo on a black background

Automatizar Immich en Docker para que siempre arranque tras un apagón (Guía completa)

Cuando trabajamos con aplicaciones en contenedores, uno de los problemas más habituales es que, tras un corte de luz o un reinicio inesperado del servidor, los servicios no siempre arrancan en el orden correcto.

Esto es especialmente crítico en aplicaciones que dependen de bases de datos o servicios auxiliares, como Immich, que necesita que Redis y PostgreSQL estén completamente operativos antes de iniciar su propio servidor.

En esta guía explico cómo dejar Immich totalmente automatizado y resistente a fallos, utilizando tres partes fundamentales:

  1. Healthchecks en Docker Compose
  2. Un servicio systemd para gestionar el arranque automático
  3. Un timer systemd que vigila el estado de Immich y lo levanta si se cae

El resultado final es una instalación de Immich que se recupera sola ante apagones, reinicios o fallos puntuales de contenedores.

Mejorar el docker-compose con healthchecks y dependencias reales

El primer paso consiste en asegurarnos de que Immich no arranca hasta que Redis y PostgreSQL estén realmente listos. Para ello, añadimos healthchecks y configuramos depends_on con condiciones.

Ejemplo de configuración:

depends_on:
  redis:
    condition: service_healthy
  database:
    condition: service_healthy

Además, añadimos healthchecks explícitos para Immich Server, Redis y PostgreSQL. Esto garantiza que Docker no considere un servicio “listo” hasta que realmente lo esté.

Con esto evitamos el típico problema de Immich intentando conectarse a la base de datos antes de que esta haya terminado su recuperación tras un apagón.

Crear un servicio systemd para arrancar Immich automáticamente

Aunque Docker puede reiniciar contenedores, lo ideal es que el sistema operativo gestione el arranque del stack completo. Para ello creamos un servicio systemd:

Archivo: /etc/systemd/system/immich.service

[Unit]
Description=Immich Docker Compose Stack
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
WorkingDirectory=/ruta/a/immich
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Con esto, Immich se levanta automáticamente cada vez que el servidor arranca.

Añadir un timer systemd que vigile Immich cada 5 minutos

Para reforzar aún más la estabilidad, añadimos un sistema de vigilancia que comprueba periódicamente si Immich está activo. Si no lo está, lo arranca.

Servicio auxiliar: /etc/systemd/system/immich-check.service

[Unit]
Description=Comprueba si Immich está activo y lo levanta si está caído

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'if ! systemctl is-active --quiet immich; then systemctl start immich; fi'

Timer: /etc/systemd/system/immich.timer

[Unit]
Description=Comprobación periódica del servicio Immich

[Timer]
OnBootSec=2min
OnUnitActiveSec=5min
Unit=immich-check.service

[Install]
WantedBy=timers.target

Activación:

sudo systemctl daemon-reload
sudo systemctl enable immich
sudo systemctl enable immich.timer
sudo systemctl start immich.timer