Solución de problemas
Esta página cubre los problemas comunes que puedes encontrar al autoalojar solyto y cómo resolverlos.
Consultar los registros
Sección titulada «Consultar los registros»El primer paso para depurar cualquier problema es consultar los registros de los contenedores:
# Todos los serviciosdocker compose logs
# Un servicio concretodocker compose logs apidocker compose logs appdocker compose logs nginx
# Seguir los registros en tiempo realdocker compose logs -f apiLos registros son tu mejor aliado. La mayoría de los errores se explican en la salida.
El contenedor no arranca
Sección titulada «El contenedor no arranca»Síntomas: docker compose ps muestra un servicio reiniciándose o detenido.
Comprobaciones:
- Consulta los registros del servicio que falla:
docker compose logs <servicio> - Verifica que
.envtenga todas las variables obligatorias — consulta Configuración - Verifica que todos los archivos de secretos obligatorios existan en
./secrets/— consulta Secretos de Docker - Comprueba que Docker tenga suficientes recursos (memoria, espacio en disco)
Causa común: archivo de secreto que falta o está vacío. Compruébalo con:
ls -la secrets/Errores de conexión a la base de datos
Sección titulada «Errores de conexión a la base de datos»Síntomas: la API devuelve errores 500, los registros muestran SQLSTATE o Connection refused.
Comprobaciones:
- ¿La base de datos está en ejecución?
docker compose ps mariadbydocker compose ps postgres - Comprueba que las credenciales coincidan entre
.envy los archivos de secretos:Ventana de terminal cat secrets/db_usercat secrets/db_password - Asegúrate de que
DB_HOST=mariadbyDAV_DB_HOST=postgres(nombres de servicio de Docker) - Espera — MariaDB y PostgreSQL pueden tardar unos segundos en estar listos en el primer arranque. El contenedor de la API reintentará automáticamente.
Restablecer las credenciales de la base de datos (si están corruptas):
# Regenera el archivo de secretoopenssl rand -hex 32 > secrets/db_passworddocker compose up -d mariadb# Espera a que MariaDB arranque, luego reinicia la APIdocker compose restart api queueProblemas con el certificado TLS
Sección titulada «Problemas con el certificado TLS»Síntomas: el navegador muestra una advertencia de seguridad, errores de certificado de Traefik.
Comprobaciones:
- Verifica que tus dominios resuelvan a la IP del servidor:
dig api.example.com - Asegúrate de que los puertos 80 y 443 estén abiertos y no bloqueados por un cortafuegos
- Comprueba que
ACME_EMAILesté configurado en.env - Verifica que el volumen
traefik_acmeexista y tenga permisos de escritura
Forzar la renovación del certificado:
docker compose downdocker volume rm <project>_traefik_acmedocker compose up -dSustituye <project> por tu PROJECT_NAME. Traefik solicitará nuevos certificados al arrancar.
Problemas de permisos con storage/
Sección titulada «Problemas de permisos con storage/»Síntomas: las subidas de archivos fallan, los registros muestran Permission denied en storage/.
Solución:
chown -R www-data:www-data storage/chmod -R 775 storage/El directorio storage/ se comparte entre api, dav, queue, nginx e imgproxy mediante un bind mount. Todos ellos necesitan acceso de escritura.
CalDAV/CardDAV no funciona
Sección titulada «CalDAV/CardDAV no funciona»Síntomas: la sincronización de calendario o contactos falla en aplicaciones externas (DAVx5, Apple Calendar, etc.).
Comprobaciones:
- Verifica que el servicio
davesté en ejecución:docker compose ps dav - Asegúrate de que
DAV_DOMAINesté configurado y resolviendo correctamente - Comprueba que la URL CalDAV/CardDAV que usa tu aplicación externa coincida con
https://dav.example.com - Consulta los registros del servicio
dav:docker compose logs dav - Verifica que PostgreSQL esté en ejecución:
docker compose ps postgres - Asegúrate de que los secretos
dav_db_userydav_db_passwordsean correctos
Problema común: el dominio DAV debe ser distinto del dominio de la API. Se ejecutan como servicios independientes detrás de Traefik.
La cola no procesa tareas
Sección titulada «La cola no procesa tareas»Síntomas: las tareas asíncronas no se completan (notificaciones, tareas en segundo plano).
Comprobaciones:
- ¿El trabajador de la cola está en ejecución?
docker compose ps queue - Consulta los registros de la cola:
docker compose logs queue - Verifica que Redis esté en ejecución:
docker compose ps redis - Comprueba la conectividad con Redis:
docker compose exec api so tinkery luego prueba un comando de Redis
Reiniciar el trabajador de la cola:
docker compose restart queueLas imágenes no cargan
Sección titulada «Las imágenes no cargan»Síntomas: las imágenes de perfil subidas u otros medios devuelven 404 o aparecen rotos.
Comprobaciones:
- Si usas
IMAGE_DRIVER=intervention(por defecto), no se necesita ningún servicio adicional - Si usas
IMAGE_DRIVER=imgproxy, asegúrate de que el servicioimgproxyesté en ejecución y de que los secretosimgproxy_key/imgproxy_saltestén configurados - Comprueba que
storage/app/public/existe y tiene permisos de escritura - Consulta los registros de nginx:
docker compose logs nginx
Fallos en la comprobación de estado
Sección titulada «Fallos en la comprobación de estado»El servicio nginx tiene una comprobación de estado en /api/v1/health. Si está fallando:
- Pruébala manualmente:
curl -s https://api.example.com/api/v1/health - Si la API no responde, consulta los registros del contenedor
api - Si la base de datos está caída, la comprobación de estado fallará — resuelve primero el problema de la base de datos
Obtener ayuda
Sección titulada «Obtener ayuda»Si no puedes resolver un problema:
- Busca en las incidencias existentes del repositorio selfhosted
- Envía una nueva incidencia con tus registros (elimina antes cualquier secreto)
- Consulta el tablón de Dev Requests si usas solyto.app