¿Cómo instalar Seafile Community Edition 13?

¿Cómo instalar Seafile Community Edition 13?
Photo by Yuriy Kovalev / Unsplash

Hace un par de meses he venido pensando en montar mi propia nube, en este post dejaré una guía de como hacer esto.

Configuración Docker

Lo primero es crear un directorio donde se almacenará la información de los volúmenes, la idea es que dentro de este directorio este todo lo relacionado con este servicio (base de datos, configuraciones, etc):

cd /tu/ruta/
mkdir seafile

Lo que hice fue seguir la guía oficial e ir probando, mi objetivo era subir la versión más simple posible. La manera oficial muestra que toca descargar varios archivos yaml pero yo preferí mejor tenerlo solo en uno y dejar sólo las variables necesarias.

De este ejemplo debes cambiar:

  • Ruta donde estarán los volúmenes
  • Las Contraseñas
  • Email y contraseña tu cuenta de admin
  • Zona horaria
  • Dominio o IP
  • JWT token, se puede crear ejecutando pwgen -s 40 1

services:
  db:
    image: mariadb:10.11
    container_name: seafile-mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=cambiame
      - MYSQL_LOG_CONSOLE=true
      - MARIADB_AUTO_UPGRADE=1
    volumes:
      - "/cambiame/seafile/db:/var/lib/mysql"
    networks:
      - seafile-net
    healthcheck:
      test:
        [
          "CMD",
          "/usr/local/bin/healthcheck.sh",
          "--connect",
          "--mariadbupgrade",
          "--innodb_initialized",
        ]
      interval: 20s
      start_period: 30s
      timeout: 5s
      retries: 10

  redis:
    image: redis
    container_name: seafile-redis
    restart: unless-stopped
    command:
      - /bin/sh
      - -c
      - redis-server --requirepass "cambiame"
    environment:
      - REDIS_PASSWORD=cambiame
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:13.0-latest
    container_name: seafile
    restart: unless-stopped
    ports:
      - "7024:80"
    volumes:
      - /cambiame/seafile/data:/shared
    environment:
      - SEAFILE_MYSQL_DB_HOST=db
      - SEAFILE_MYSQL_DB_PORT=3306
      - SEAFILE_MYSQL_DB_USER=seafile
      - SEAFILE_MYSQL_DB_PASSWORD=cambiame
      - INIT_SEAFILE_MYSQL_ROOT_PASSWORD=cambiame
      - SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
      - SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
      - SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
      - TIME_ZONE=cambiame
      - INIT_SEAFILE_ADMIN_EMAIL=cambiame
      - INIT_SEAFILE_ADMIN_PASSWORD=cambiame
      - SEAFILE_SERVER_HOSTNAME=cambiame
      - SEAFILE_SERVER_PROTOCOL=https
      - SITE_ROOT=/
      - NON_ROOT=false
      - JWT_PRIVATE_KEY=cambiame
      - SEAFILE_LOG_TO_STDOUT=false
      - CACHE_PROVIDER=redis
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=cambiame
      - ENABLE_NOTIFICATION_SERVER=false
      - INNER_NOTIFICATION_SERVER_URL=http://notification-server:8083
      - ENABLE_SEAFILE_AI=false
      - MD_FILE_COUNT_LIMIT=100000
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
    networks:
      - seafile-net

  # onlyoffice:
  #   image: onlyoffice/documentserver:8.1.0.1
  #   restart: unless-stopped
  #   container_name: seafile-onlyoffice
  #   ports:
  #     - "6233:80"
  #   environment:
  #     - JWT_ENABLED=true
  #     - JWT_SECRET=cambiame
  #   volumes:
  #     - /cambiame/seafile/onlyoffice/logs:/var/log/onlyoffice
  #     - /cambiame/seafile/onlyoffice/data:/var/www/onlyoffice/Data
  #     - /cambiame/seafile/onlyoffice/lib:/var/lib/onlyoffice


networks:
  seafile-net:
    name: seafile-net

seafile.yaml de ejemplo

OnlyOffice

Para habilitar OnlyOffice lo único que necesitas hacer es eliminar los comentarios del ejemplo anterior. Al ingresar al servidor deberías ver una pantalla similar a esta:

Luego de instalarlo, es necesario ir a la carpeta de configuración de Seafile y apuntar a tu dominio de office, ejemplo:

...
ENABLE_ONLYOFFICE = True
ONLYOFFICE_APIJS_URL = 'https://tu-dominio.com/web-apps/apps/api/documents/api.js'
ONLYOFFICE_JWT_SECRET = '...'

Archivo: /tu/directorio/data/seafile/conf/seahub_settings.py

Email

Para configurar el email debes añadir tu configuración al archivo seahub_settings.py

...
EMAIL_USE_TLS = True  # ó EMAIL_USE_SSL
EMAIL_HOST = 'smtp.dominio.com'
EMAIL_HOST_USER = '[email protected]'
EMAIL_HOST_PASSWORD = 'tupass'
EMAIL_PORT = 465
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER

Archivo: /tu/directorio/data/seafile/conf/seahub_settings.py

Seguridad

Si tu deseo es publicarlo a internet, sugeriría que consideres usar CloudFlare Zero para añadir una capa extra de seguridad en la instalación.

Troubleshooting

Si tienes inconvenientes con la configuración con caddy, te sugiero usar Nginx Proxy Manager. De tal forma que tengas dos dominios:

  • Dominio 1: tunube.tudominio.com
  • Dominio 2: tuoffice.tudominio.com

De esta forma, tu cloud (dominio 1) enviará consultas a tu office (dominio 2).

Conclusiones

  • La interfaz me parece rápida, estable y funcional
  • Hay ciertos bugs menores con estilos CSS en donde a veces no se puede ver lo que se escribe en algunos menús como cambiar el nombre de un archivo.
  • En la funcionalidad básica de markdown es necesario guardar manualmente, no tiene autoguardado
  • El cliente en MacOS funciona sin problemas
  • No hay forma de exportar todos los datos de un usuario, tocaría seleccionar y darle "download", me genera duda que pasaría si hay muchos archivos o si los archivos pesan mucho 🤔.
  • Los archivos no se guardan en texto plano, por lo que vi, se usa git para versionar.
  • Si creas librerías cifradas no podrás usar OnlyOffice.
  • Tanto el subdominio de tu nube como el dominio de onlyoffice, deben tener certificados SSL