Instalación de Seafile: Sincronización y Compartición de Archivos

Seafile es una plataforma de almacenamiento en la nube self-hosted con sincronización de archivos entre dispositivos, versiones, cifrado de extremo a extremo de bibliotecas y soporte para WebDAV y grupos colaborativos. Diseñado para alto rendimiento con grandes bibliotecas, Seafile es la alternativa privada a Dropbox o Google Drive más eficiente disponible para Linux. Esta guía cubre la instalación completa de Seafile Community Edition en Linux.

Requisitos Previos

  • Ubuntu 20.04+, Debian 11+ o CentOS 8+
  • Docker y Docker Compose instalados
  • Mínimo 2 GB de RAM (4 GB recomendados)
  • Almacenamiento para los archivos de usuario
  • Puerto 80 y 443 disponibles (o proxy inverso)
  • Dominio con DNS configurado (recomendado)

Instalación con Docker Compose

# Crear directorio de instalación
mkdir -p ~/seafile && cd ~/seafile

# Crear el archivo docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3'

services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=db_dev
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - ./mysql/db:/var/lib/mysql

  memcached:
    image: memcached:1.6.18
    container_name: seafile-memcached
    restart: unless-stopped
    entrypoint: memcached -m 256

  seafile:
    image: seafileltd/seafile-mc:10.0-latest
    container_name: seafile
    restart: unless-stopped
    ports:
      - "80:80"
      # - "443:443"  # Descomentar si no usas proxy inverso
    volumes:
      - ./seafile-data:/shared
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=db_dev
      - TIME_ZONE=Europe/Madrid
      - [email protected]
      - SEAFILE_ADMIN_PASSWORD=contrasena-admin-segura
      - SEAFILE_SERVER_LETSENCRYPT=false  # true si quieres LE automático
      - SEAFILE_SERVER_HOSTNAME=seafile.tu-dominio.com
    depends_on:
      - db
      - memcached
EOF

# Crear directorios para datos
mkdir -p ~/seafile/{mysql,seafile-data}

# Iniciar los servicios
docker compose up -d

# Ver el progreso de inicio (la primera vez tarda varios minutos)
docker compose logs -f seafile

Configuración Inicial

Acceder al panel web en http://TU-SERVIDOR o http://seafile.tu-dominio.com:

  1. Iniciar sesión con el email y contraseña de administrador configurados
  2. El panel de administración está en http://TU-SERVIDOR/sys/

Configuración básica del servidor:

# Acceder al archivo de configuración de Seafile
# Los archivos de configuración están en:
ls ~/seafile/seafile-data/seafile/conf/

# Editar configuración principal
docker exec -it seafile cat /opt/seafile/conf/seahub_settings.py

Configurar el almacenamiento de cuotas por usuario:

# Desde el panel de administración del sistema:
# Sistema > Configuración > Cuota de almacenamiento por defecto

# O via Django shell
docker exec -it seafile /opt/seafile/seafile-server-latest/seahub.sh python-env python3 seahub/manage.py set_user_quota --quota 5 --user [email protected]

Configuración del Cliente de Sincronización

Descargar el cliente de Seafile para el sistema operativo:

# Instalar el cliente de Seafile en Linux (Ubuntu/Debian)
sudo apt install -y apt-transport-https
echo "deb [arch=amd64] https://linux-clients.seafile.com/seafile-deb/$(lsb_release -cs)/ stable main" | \
  sudo tee /etc/apt/sources.list.d/seafile.list
wget https://linux-clients.seafile.com/seafile.asc | sudo apt-key add -
sudo apt update
sudo apt install -y seafile-gui

# O instalar el cliente de línea de comandos (seaf-cli)
sudo apt install -y seafile-cli

# Inicializar seaf-cli
seaf-cli init -d ~/Seafile

# Iniciar el daemon
seaf-cli start

# Conectar al servidor
seaf-cli config -k server_host -v https://seafile.tu-dominio.com
seaf-cli sync -l LIBRARY_ID -s https://seafile.tu-dominio.com -d ~/Seafile/mi-biblioteca -u [email protected] -p contrasena

Cifrado de Bibliotecas

Seafile soporta cifrado de extremo a extremo de bibliotecas individuales:

# Crear una biblioteca cifrada desde el panel web:
# Inicio > Crear biblioteca cifrada
# Introducir una contraseña de cifrado (¡NO SE PUEDE RECUPERAR SIN ESTA CONTRASEÑA!)

# El cifrado usa AES-256 en modo CBC
# Los archivos se cifran antes de subir al servidor
# El servidor no tiene acceso al contenido en texto claro

# Nota: Las bibliotecas cifradas NO soportan búsqueda de texto
# ni vista previa en el servidor

WebDAV

Seafile incluye soporte WebDAV para acceso desde cualquier cliente compatible:

# La URL WebDAV es:
# https://seafile.tu-dominio.com/seafdav/

# Montar WebDAV en Linux con davfs2
sudo apt install -y davfs2

# Crear punto de montaje
sudo mkdir -p /mnt/seafile

# Montar el servidor Seafile via WebDAV
sudo mount -t davfs https://seafile.tu-dominio.com/seafdav/ /mnt/seafile
# Introducir usuario y contraseña cuando se pida

# Montaje permanente en /etc/fstab
echo "https://seafile.tu-dominio.com/seafdav/ /mnt/seafile davfs user,uid=$(id -u),gid=$(id -g) 0 0" | sudo tee -a /etc/fstab

# Guardar credenciales WebDAV
echo "https://seafile.tu-dominio.com/seafdav/ [email protected] contrasena" | sudo tee -a /etc/davfs2/secrets

Gestión de Usuarios y Grupos

# Crear usuarios desde el panel de administración
# Admin > Sistema > Usuarios > Agregar usuario

# Crear grupos para colaboración
# El panel de grupos está en: Inicio > Crear grupo

# Compartir biblioteca con grupo
# Clic en la biblioteca > Compartir > Compartir con grupo

# Gestión de usuarios via CLI (Django manage.py)
docker exec -it seafile /opt/seafile/seafile-server-latest/seahub.sh python-env \
  python3 seahub/manage.py createadmin [email protected] --password=contrasena2

# Listar usuarios
docker exec -it seafile /opt/seafile/seafile-server-latest/seahub.sh python-env \
  python3 seahub/manage.py listuser

# Desactivar un usuario
docker exec -it seafile /opt/seafile/seafile-server-latest/seahub.sh python-env \
  python3 seahub/manage.py disableuser [email protected]

Versionado de Archivos

# Seafile guarda el historial de versiones de los archivos automáticamente
# Para ver el historial de un archivo:
# Clic en el archivo > Historial de versiones

# Configurar cuántas versiones mantener (en seahub_settings.py):
# KEEP_REVISIONS_OF_DAY = 7  # Mantener versiones del últimos 7 días

# Para gestionar el historial de versiones desde el panel admin:
# Sistema > Gestión de archivos eliminados/historial

# Ver el espacio usado por versiones anteriores
docker exec -it seafile df -h /opt/seafile/seafile-data/

Integración LDAP

Configurar autenticación con LDAP/Active Directory:

# Editar la configuración de Seafile
docker exec -it seafile nano /opt/seafile/conf/seahub_settings.py
# Agregar configuración LDAP al final de seahub_settings.py
ENABLE_LDAP = True
LDAP_SERVER_URL = 'ldap://tu-servidor-ldap:389'
LDAP_BASE_DN = 'ou=users,dc=tu-dominio,dc=com'
LDAP_ADMIN_DN = 'cn=admin,dc=tu-dominio,dc=com'
LDAP_ADMIN_PASSWORD = 'contrasena-ldap'
LDAP_LOGIN_ATTR = 'mail'
LDAP_USERNAME_ATTR = 'uid'
LDAP_FILTER = 'memberOf=cn=seafile-users,ou=groups,dc=tu-dominio,dc=com'
# Reiniciar Seafile para aplicar la configuración LDAP
docker compose restart seafile

Proxy Inverso con Nginx

# Configuración de Nginx para Seafile con SSL
sudo tee /etc/nginx/sites-available/seafile << 'EOF'
server {
    listen 80;
    server_name seafile.tu-dominio.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name seafile.tu-dominio.com;

    ssl_certificate /etc/letsencrypt/live/seafile.tu-dominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/seafile.tu-dominio.com/privkey.pem;

    # Tamaño máximo de archivo (ajustar según necesidad)
    client_max_body_size 10G;
    proxy_request_buffering off;

    location / {
        proxy_pass http://127.0.0.1:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_read_timeout 36000s;
        proxy_connect_timeout 36000s;
        proxy_send_timeout 36000s;
        send_timeout 36000s;
    }
}
EOF

sudo ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Actualizar SEAFILE_SERVER_HOSTNAME en docker-compose.yml y reiniciar
docker compose down && docker compose up -d

Solución de Problemas

Seafile no inicia:

# Ver logs del contenedor
docker compose logs seafile --tail 50

# Verificar que la base de datos está accesible
docker compose logs db --tail 20

# Comprobar los logs internos de Seafile
docker exec seafile cat /opt/seafile/logs/seahub.log | tail -30
docker exec seafile cat /opt/seafile/logs/seafile.log | tail -30

El cliente no puede sincronizar:

# Verificar la URL del servidor (debe incluir http:// o https://)
# Comprobar que el puerto está accesible
curl -I https://seafile.tu-dominio.com

# Ver los logs del daemon del cliente
cat ~/.ccnet/logs/seafile.log | tail -30

Problemas de cuota de espacio:

# Ver el espacio usado por usuario desde el panel admin
# Sistema > Usuarios > filtrar por cuota

# Aumentar la cuota global
# Sistema > Configuración > Cuota de almacenamiento por defecto (en GB)

Conclusión

Seafile ofrece una sincronización de archivos eficiente y segura con menor overhead que Nextcloud para cargas de trabajo que priorizan la transferencia de archivos. Su cifrado de extremo a extremo de bibliotecas individuales y soporte para WebDAV lo hace versátil para entornos donde la privacidad de los datos es crítica, tanto para uso personal como empresarial.