← Volver al blog
Tutorial · 10 min

Instalar Seafile en Synology NAS con Docker: guía completa

Instalar Seafile en Synology NAS con Docker: guía completa

Introducción: tu propia nube privada en tu NAS

Un NAS Synology es mucho más que un disco de red: es un servidor completo que puede alojar servicios cloud privados. Uno de los más útiles es Seafile, una plataforma de almacenamiento y sincronización de archivos de código abierto, alternativa a ownCloud y Nextcloud, pero más rápida y eficiente en el manejo de grandes volúmenes de datos.

En esta guía te explicamos cómo instalar Seafile en un Synology NAS usando Docker, paso a paso, incluyendo los errores que puedes encontrarte y cómo solucionarlos.

¿Por qué Seafile y no otra alternativa?

  • Sincronización eficiente: Seafile solo sincroniza los bloques modificados, no el archivo entero. Ideal para archivos grandes.
  • Rendimiento superior: Está escrito en C y Python, mucho más rápido que las alternativas PHP (Nextcloud, ownCloud) con bases de datos más pesadas.
  • Bajo consumo de recursos: Perfecto para NAS con poca RAM o CPU limitada.
  • Librerías, permisos granulares y enlaces de compartición: Todo lo que una empresa necesita.
  • Multiplataforma: Clientes para, Linux, Android e iOS.

Arquitectura de la instalación

Seafile se despliega con tres contenedores Docker conectados entre sí:

�──────────────────────────────────────────┐
│  Synology NAS (Docker)                    │
│                                          │
│  ┌──────────┐  ┌──────────�  �────────┐ │
│  │ seafile  │──│   db     │  │memcached│ │
│  │ (Python) │  │(MariaDB) │  │        │ │
│  │ :8080    │  │ :3306    │  │ :11211 │ │
│  └──────────┘  └──────────�  └────────┘ │
│       │                                  │
│       └── /shared → volumen NAS          │
└──────────────────────────────────────────┘
  • db: MariaDB 10.11 — almacena metadatos, usuarios, permisos y la estructura de repositorios.
  • memcached: Caché en memoria para mejorar el rendimiento de las consultas a la base de datos.
  • seafile: El contenedor principal con seahub (interfaz web), seaf-server (motor de sincronización) y ccnet (protocolo interno).

Paso 1: Preparar el directorio y credenciales

Primero crearás la estructura de directorios en el NAS y definirás las contraseñas que usarás. Todas las configuraciones se almacenan en /volume1/docker/seafile/.

/volume1/docker/seafile/
├── docker-compose.yaml    ← definición de servicios
├── data/                   ← montado como /shared
│   ├── seafile/            ← repositorios, blobs
│   ├── seahub-data/        ← avatares, thumbnails
│   └── logs/               ← logs de todo
├── db/                     ← montado como /var/lib/mysql
└── memcached/              (sin volumen)

Credenciales necesarias:

  • Contraseña raíz de MariaDB (mín. 8 caracteres)
  • Contraseña de administrador de Seafile
  • Email del administrador

Paso 2: Crear el docker-compose.yaml

El archivo de orquestación define los tres servicios. Presta especial atención a las variables de entorno y los mapeos de volumen:

version: "3"
services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=tu_pass_mysql
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /volume1/docker/seafile/mysql:/var/lib/mysql

  memcached:
    image: memcached:1.6
    container_name: seafile-memcached

  seafile:
    image: seafileltd/seafile-mc:latest
    container_name: seafile
    ports:
      - "8080:80"
      - "8082:8082"
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=tu_pass_mysql
      - SEAFILE_ADMIN_EMAIL=admin@tudominio.com
      - SEAFILE_ADMIN_PASSWORD=tu_pass_admin
      - SEAFILE_SERVER_HOSTNAME=tu-dominio.ddns.net
    volumes:
      - /volume1/docker/seafile/data:/shared
    depends_on:
      - db
      - memcached

⚠️ Error común: NO añadir user: "1000:1000"

La imagen de espera internamente un usuario específico para procesos. Forzar un UID externo rompe el mecanismo de validación de start.py, que verifica que el propietario del directorio de datos coincida con el usuario que ejecuta los procesos. Si lo haces, Seafile no arrancará y obtendrás un error 502.

Paso 3: Levantar y verificar los servicios

Desde el directorio de trabajo, levanta todos los contenedores:

cd /volume1/docker/seafile
docker compose up -d

# Verificar que todos estén corriendo
docker compose ps

Deberías ver los tres contenedores en estado Up. Ahora comprueba que el servicio web responde:

# Desde el NAS mismo:
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080

# Respuesta esperada: 302 (redirige a /accounts/login/)

Un 302 significa que Seafile está funcionando correctamente. Si obtienes 502, el contenedor seaf-server no ha arrancado. Revisa los logs con:

docker exec seafile tail -30 /opt/seafile/logs/seafile.log
docker exec seafile tail -30 /opt/seafile/logs/seahub.log

Paso 4: Configuración inicial

Accede a la interfaz web desde tu navegador: http://IP-DE-TU-NAS:8080. Inicia sesión con el email y la contraseña que configuraste en SEAFILE_ADMIN_EMAIL y SEAFILE_ADMIN_PASSWORD.

Una vez dentro, ve a Administración → Configuración y revisa estos parámetros clave:

  • SERVICE_URL: Debe ser la URL desde la que accedes (interna o externa, según prefieras).
  • FILE_SERVER_ROOT: Debe incluir el puerto correcto y el prefijo /seafhttp.
  • SSL: Si usas HTTPS externo, activa SECURE_PROXY_SSL_HEADER en seahub_settings.py.

Problema común: Error CSRF (403 Forbidden)

Si al intentar iniciar sesión obtienes un error como:

Forbidden (Origin checking failed - https://tudominio.com
does not match any trusted origins.)

La solución es añadir todas las variantes de tu dominio al archivo seahub_settings.py:

CSRF_TRUSTED_ORIGINS = [
    "https://tudominio.com",
    "https://tudominio.com:8080",
    "http://192.168.1.168:8080",
    "http://tudominio.com",
    "http://tudominio.com:8080"
]

Después de modificar, reinicia el contenedor: docker restart seafile

Tip:

Muchos navegadores envían el Origin sin puerto aunque uses :8080 en la URL. Añade siempre ambas variantes (con y sin puerto) para evitar sorpresas.

Problema: No se pueden crear archivos

Si el servicio web responde pero no puedes subir o crear repositorios, el problema suele ser que seaf-server no arrancó correctamente por un conflicto de permisos. El síntoma típico es que nginx devuelve 502 Bad Gateway.

Causa raíz: Dentro del contenedor, el script start.py verifica que el propietario del directorio /shared/seafile/seafile-data coincida con el usuario que está ejecutando los procesos. Si tocaste los permisos del volumen en el NAS (por ejemplo, con chown), esta validación falla.

Solución: No tocar los permisos del volumen desde el NAS. Dejar que Docker y la imagen gestionen los propietarios internamente. Si ya lo tocaste, simplemente ejecuta dentro del contenedor:

# Dentro del contenedor seafile:
chown -R root:root /shared/seafile/seafile-data
chown -R root:root /shared/seafile/seahub-data

# Luego reinicia:
docker restart seafile

Comandos de diagnóstico

Guarda estos comandos para cualquier incidencia.

# Ver todos los contenedores
docker ps --format "table {{.Names}}	{{.Status}}	{{.Ports}}"

# Ver si seaf-server está corriendo
docker exec seafile ps aux | grep seaf-server

# Probar respuesta HTTP
curl -s -o /dev/null -w "%{http_code}" http://localhost:8080

# Verificar escritura en el volumen
docker exec seafile touch /shared/seafile/seafile-data/test
docker exec seafile rm /shared/seafile/seafile-data/test

# Obtener contraseña de BD (si se olvida)
docker exec seafile-mysql printenv MYSQL_ROOT_PASSWORD

# Ver logs en tiempo real
docker exec seafile tail -f /opt/seafile/logs/seafile.log

HTTPS y acceso externo

Para acceder desde fuera de tu red local tienes dos opciones:

  • Synology Reverse Proxy: Si tu NAS tiene el paquete Application Portal, puedes crear un proxy inverso con SSL automático (válido para puertos estándar 80/443).
  • Nginx externo: Un contenedor o servidor nginx que haga de reverse proxy con certificados Let's Encrypt.
  • VPN (WireGuard): La opción más segura — accedes a tu NAS como si estuvieras en local, sin exponer el servicio a internet. Recomendado para uso personal y equipos pequeños.

OnlyOffice: edición en línea en Seafile Community

Una diferencia importante entre la versión Community y Pro de Seafile es la integración con OnlyOffice para edición de documentos en línea.

  • Pro: Incluye Oficina integrado de fábrica, sin configuración adicional.
  • Community: No lo incluye, pero puedes añadirlo instalando un contenedor Docker separado de OnlyOffice Document Server y configurando JWT tokens para autenticación.

En nuestra guía Integración OnlyOffice + Seafile con Docker te explicamos paso a paso cómo configurar el Document Server, el proxy inverso y la validación JWT para que puedas editar documentos directamente desde la interfaz de Seafile.

¿Necesitas ayuda con tu Seafile?

En Dysfortic instalamos y configuramos soluciones de almacenamiento en la nube para empresas. Contacta con nosotros y te ayudamos a montar tu propia nube privada.