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:
- Healthchecks en Docker Compose
- Un servicio systemd para gestionar el arranque automático
- 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_healthyAdemá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

