Cómo instalar Seafile con Nginx en Ubuntu 20.04 LTS

Seafile es un sistema de alojamiento de archivos y almacenamiento en la nube de código abierto con funciones avanzadas como la sincronización desde múltiples plataformas (sistema multiplataforma), la protección de la privacidad con la encriptación de archivos incorporada y la compatibilidad con la autenticación de dos factores (TFA), el control de versiones, el bloqueo de archivos, la edición en línea y muchas más. Seafile está escrito en lenguaje de programación C y Python, y ofrece características similares a las de Dropbox, mega.co.nz y otros.

En este tutorial, te mostraré paso a paso cómo instalar y configurar un servidor Seafile con el servidor web Nginx y la base de datos MariaDB. Instalaremos el servidor Seafile bajo el servidor web Nginx con Letsencrypt SSL HTTPS activado, utilizando la última MariaDB en el sistema Ubuntu 20.04.

Requisitos previos

  • Ubuntu 20.04
  • Privilegios de root

¿Qué vamos a hacer?

  • Instalar las dependencias de Seafile Python
  • Instalar y configurar MariaDB
  • Descarga el Servidor Seafile para el Servidor Linux
  • Instalar el Servidor Seafile con MariaDB
  • Configurar Seafile con nombre de dominio
  • Ejecutar Seafile como un servicio Systemd
  • Generar SSL Letsencrypt y DHPARAM
  • Instalar y configurar Nginx como proxy inverso
  • Configurar el Firewall
  • Probar

Paso 1 – Instalar las dependencias de Python de Seafile

El primer paso que debemos dar antes de instalar el servidor de Seafile en el sistema es instalar sus dependencias. Seafile es una aplicación basada en python, y requiere python 3.x para funcionar en el servidor.

Antes de instalar cualquier paquete, tenemos que actualizar el repositorio de Ubuntu.

sudo apt update

Ahora instala python 3.x con todas las dependencias necesarias para la instalación del servidor de Seafile utilizando los comandos apt que aparecen a continuación.

sudo apt install python3 libpython3.8 python3-setuptools python3-pil python3-ldap python3-urllib3 ffmpeg python3-pip python3-mysqldb python3-memcache python3-requests libmemcached-dev

Después, instala los paquetes python adicionales desde el repositorio PyPI utilizando el comando pip que aparece a continuación.

pip3 install --timeout=3600 Pillow pylibmc captcha jinja2 sqlalchemy psd-tools django-pylibmc django-simple-captcha python3-ldap

Como resultado, se han instalado todas las dependencias de los paquetes para Seafile.

Paso 2 – Instalar y configurar MariaDB

Seafile ofrece soporte para SQLite y el servidor de bases de datos MariaDB. Para esta guía, utilizaremos el servidor de bases de datos MariaDB para nuestra instalación. Instalaremos el servidor de Seafile utilizando la última versión de MariaDB.

Instala el servidor MariaDB utilizando el comando apt que aparece a continuación.

sudo apt install mariadb-server -y

Una vez completada la instalación, inicia el servicio MariaDB y habilítalo para que se inicie siempre al arrancar el sistema.

systemctl start mariadb
systemctl enable mariadb

El servidor MariaDB está instalado en el sistema Ubuntu, compruébalo con el siguiente comando.

systemctl status mariadb

El servicio MariaDB está en funcionamiento.

Instalar el servidor de bases de datos MariaDB

A continuación, tenemos que configurar la contraseña de root de MariaDB mediante el comando ‘mysql_secure_installation’.

mysql_secure_installation

Ahora se te preguntará por la configuración de MariaDB, y escribe tu contraseña raíz fuerte para MariaDB.

Enter current password for root (enter for none): Press Enter
Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y

A continuación, crearemos una nueva base de datos para el servidor de Seafile. Crearemos 3 bases de datos para cada componente de Seafile y crearemos un nuevo usuario de base de datos. Crearemos un nuevo usuario llamado ‘seafile’ y tendrá todos los privilegios para las 3 bases de datos ‘ccnet-db’, ‘seafile-db’, y ‘seahub-db’.

Accede al shell de MySQL con el siguiente comando.

mysql -u root -p

Ahora crea nuevas bases de datos ‘ccnet-db’, ‘seafile-db’, ‘seahub-db’, y crea un nuevo usuario ‘seafile’. A continuación, concede los 3 privilegios de la base de datos al usuario ‘seafile’.

Ejecuta las siguientes consultas de MySQL.

create database `ccnet-db` character set = 'utf8';
create database `seafile-db` character set = 'utf8';
create database `seahub-db` character set = 'utf8';

create user 'seafile'@'localhost' identified by '[email protected]';

GRANT ALL PRIVILEGES ON `ccnet-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seafile-db`.* to `seafile`@localhost;
GRANT ALL PRIVILEGES ON `seahub-db`.* to `seafile`@localhost;

Crea una nueva base de datos y un nuevo usuario para Seafile

Se ha instalado el servidor MariaDB, se ha configurado la contraseña de root y se ha creado la base de datos para la instalación de seafile.

Paso 3 – Descargar el servidor Seafile para el servidor Linux

En este tutorial, el servidor de seafile se ejecutará como un servicio en el sistema systemd, y se ejecutará bajo un usuario no root.

Crea un nuevo usuario llamado ‘ryujin’.

useradd -m -s /bin/bash ryujin

Ahora entra en el usuario ‘ryujin’ y descarga la última versión del servidor seafile utilizando wget.

su - ryujin
wget -q https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_7.1.3_x86-64.tar.gz

Extrae el archivo ‘seafile-server.tar.gz’ y cambia el nombre del directorio principal por el de ‘seafile-server’.

tar -xf seafile-server_7.1.3_x86-64.tar.gz
mv seafile-server-*/ seafile-server/

El código fuente del servidor de seafile se ha descargado en el directorio ‘/home/ryujin/seafile-server’.

Descargar Seafile 7.1

Paso 4 – Instalar el Servidor Seafile con MariaDB

En este paso, instalaremos el servidor de seafile utilizando el script de instalación de MariaDB proporcionado por Seafile.

Entra como usuario ‘ryujin’ y ve al directorio ‘seafile-server’.

su - ryujin
cd seafile-server/

Ahora ejecuta el script ‘setup-seafile-mysql.sh’.

./setup-seafile-mysql.sh

El script de instalación realizará la comprobación del módulo python. Asegúrate de que todas las dependencias están instaladas y luego pulsa Enter.

Ahora estarás en la configuración de Seafile.

  • nombre del servidor: introduce el nombre de tu servidor de Seafile, por ejemplo «hakase-cloud».
  • nombre de dominio del servidor: introduce el nombre de dominio de tu servidor de seafile ‘cloud.hakase-labs.io’.
  • directorio de datos de seafile: deja la configuración por defecto y pulsa intro.
  • puerto del servidor de archivos de seafile: déjalo en el puerto por defecto ‘8082’.

Configuración de la instalación de Seafile

Ahora, la configuración de la base de datos. Se te pedirán 2 opciones: dejar que el script cree la base de datos por ti, o utilizar una base de datos existente.

Elige la opción ‘2’ para utilizar la configuración de la base de datos existente.

  • host de la base de datos: por defecto localhost
  • puerto de la base de datos: por defecto en el puerto normal de mysql ‘3306’
  • el usuario de la base de datos es ‘seafile’ con la contraseña ‘[email protected]
  • base de datos ccnet ‘ccnet-db’
  • base de datos seafile: ‘seafile-db’
  • base de datos seahub: ‘seahub-db’

Configuración de la base de datos para Seafile

Ahora vuelve a pulsar intro para confirmar la configuración de nuestro servidor de seafile.

Resumen de la configuración de Seafile

Y cuando la instalación se haya completado, obtendrás el resultado que se muestra a continuación.

Instalación de Seafile en Ubuntu 20.04

La instalación y configuración del servidor de seafile se ha completado con éxito. Y el servidor de archivos seafile se ejecutará en el puerto ‘8082’, el servicio seahub se ejecutará en el puerto ‘8000’.

A continuación, vamos a probar a ejecutar el servidor de archivos marinos y el servidor de seahub utilizando el script de inicio.

Como usuario ‘ryujin’, ve al directorio ‘~/seafile-server-latest’.

su - ryujin
cd ~/seafile-server-latest/

Ahora inicia el servidor de seafile ejecutando el siguiente comando.

./seafile.sh start

A continuación, ejecuta el servidor seahub.

./seahub.sh start

La primera vez que ejecutes el script de inicio ‘seahub.sh’, se te pedirá que crees un usuario y una contraseña de administrador para el servidor seafile.

Escribe tu correo electrónico y contraseña de administrador, y pulsa Intro.

Seafile Crear usuario administrador

Y el usuario y la contraseña de administrador han sido creados – ahora comprueba los puertos de servicio de seafile y seahub ‘8082’ y ‘8080’ utilizando el comando netstat.

ss -plnt4

Y verás que el servidor de seafile y el de seahub están funcionando en el sistema Ubuntu 20.04.

Ahora detén el servidor de seafile y seahub.

./seafile.sh stop
./seahub.sh stop

Detener el servicio de Seafile y Seahub

Paso 5 – Configurar Seafile con nombre de dominio

Para este tutorial, ejecutaremos el Seafile con nuestro nombre de dominio ‘seafile.hakase-labs.io’. Para ello, tenemos que editar algunas de las configuraciones de Seafile.

Entra con el usuario ‘ryujin’ y ve al directorio ‘conf’.

su - ryujin
cd conf/

Edita la configuración ‘ccnet.conf’ con el editor vim.

vim ccnet.conf

en la opción ‘SERVICE_URL’, cambia el valor con el nombre del dominio, y asegúrate de cambiar el protocolo HTTP por defecto por el protocolo seguro HTTPS como se indica a continuación.

SERVICE_URL = https://seafile.hakase-labs.io

Guarda y cierra.

A continuación, edita la configuración ‘seafile.conf’.

vim seafile.conf

En la sección ‘[fileserver]’, especifica la dirección IP del ‘host’ para el servicio seafile. El servicio seafile se ejecutará en la dirección local como se indica a continuación.

[fileserver]
host = 127.0.0.1
port = 8082

Guarda y cierra.

A continuación, edita el archivo ‘seahub_settings.py’ utilizando el editor vim.

vim seahub_settings.py

Añade la opción ‘FILE_SERVER_ROOT’ como se indica a continuación al final de la línea.

FILE_SERVER_ROOT = 'https://seafile.hakase-labs.io/seafhttp'

Guarda y cierra.

Configurar el nombre de dominio de Seafile

Y la configuración de Seafile se ha completado, se ejecutará bajo el nombre de dominio ‘seafile.hakase-labs.io’.

Paso 6 – Ejecutar Seafile como un servicio Systemd

Después de configurar Seafile con el nombre de dominio, vamos a configurar seafile y seahub como un servicio systemd.

Ve al directorio ‘/etc/systemd/system’ y crea un nuevo archivo de servicio para seafile llamado ‘seafile.service’.

cd /etc/systemd/system/
vim seafile.service

Pega en él la siguiente configuración.

[Unit]
Description=Seafile
After=network.target mysql.service nginx.service

[Service]
Type=forking
ExecStart=/home/ryujin/seafile-server-latest/seafile.sh start
ExecStop=/home/ryujin/seafile-server-latest/seafile.sh stop
User=ryujin
Group=ryujin

[Install]
WantedBy=multi-user.target

Guarda y cierra.

A continuación, crea el archivo de servicio de seahub llamado «seahub.service».

vim seahub.service

Pega en él la siguiente configuración.

[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
ExecStart=/home/ryujin/seafile-server-latest/seahub.sh start
ExecStop=/home/ryujin/seafile-server-latest/seahub.sh stop
User=ryujin
Group=ryujin

[Install]
WantedBy=multi-user.target

Guarda y cierra.

Ya se han creado los archivos de servicio seafile y seahub.

A continuación, vuelve a cargar el gestor systemd y asegúrate de que no hay ningún error.

systemctl daemon-reload

Ahora inicia el servicio seafile y añádelo al arranque del sistema.

systemctl start seafile
systemctl enable seafile

Después, inicia y habilita el servicio seahub.

systemctl start seahub
systemctl enable seahub

Configurar Seafile y Seahub como servicio Systemd

El servicio seafile y seahub están en funcionamiento, compruébalo con el siguiente comando.

systemctl status seafile seahub

A continuación se muestra el resultado que obtendrás.

Configurar Seafile y Seahub como servicio Systemd

Como resultado, se ha completado la configuración de Seafile y Seahub como servicio systemd.

Paso 7 – Generar Letsencrypt SSL y DHPARAM

En este paso, generaremos el certificado SSL Letsencrypt y DHPARAM. Utilizaremos la herramienta certbot para generar el SSL Letsencrypt y usaremos el comando openssl para generar el certificado dhparam.

Para generar el SSL Letsencrypt, asegúrate de que tienes el nombre de dominio real y apuntado a la dirección IP de tu servidor.

Instala la herramienta certbot en el sistema Ubuntu utilizando el comando apt que aparece a continuación.

sudo apt install certbot

Después, genera el Letsencrypt SSL para el nombre de dominio ‘seafile.hakase-labs.io’ utilizando el comando certbot como se indica a continuación.

certbot certonly --agree-tos --no-eff-email --email [email protected] -d seafile.hakase-labs.io

Una vez completado todo el proceso, tu certificado estará disponible en el directorio ‘/etc/letsencrypt/live/seafile.hakase-labs.io’.

A continuación, genera el certificado DHPARAM utilizando el comando openssl como se indica a continuación.

openssl dhparam -out /etc/nginx/dhparam.pem 2048

El certificado DHAPRAM se generará y estará disponible en el directorio ‘/etc/nginx/dhparam.pem’.

Como resultado, se ha generado el certificado SSL Letsencrypt para el nombre de dominio Seafile y el certificado DHPARAM.

Paso 8 – Instalar y configurar Nginx como proxy inverso

En este paso, instalaremos y configuraremos Nginx como proxy inverso para el servicio de Seafile. El servidor web Nginx se ejecutará bajo el protocolo seguro HTTPS con el certificado SSL Letsencrypt y DHPARAM generado encima.

Instala Nginx en el servidor Ubuntu 20.04 utilizando el comando apt que aparece a continuación.

sudo apt install nginx -y

Una vez completada la instalación, inicia el servicio Nginx y añádelo al arranque del sistema.

systemctl start nginx
systemctl enable nginx

Y el servicio Nginx está en marcha en el sistema Ubuntu.

A continuación, ve al directorio ‘/etc/nginx/sites-available’ y crea una nueva configuración de virtualhost ‘seafile’ utilizando el editor vim.

cd /etc/nginx/sites-available/
vim seafile

Pega en él la siguiente configuración.

server {
        listen       80;
        server_name  seafile.hakase-labs.io;
        rewrite ^ https://$http_host$request_uri? permanent;
        server_tokens off;
    }
    server {
        listen 443 ssl http2;
        server_name seafile.hakase-labs.io;
        
        ssl_certificate /etc/letsencrypt/live/seafile.hakase-labs.io/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/seafile.hakase-labs.io/privkey.pem;
        ssl_session_timeout 5m;
        ssl_session_cache shared:SSL:5m;

        ssl_dhparam /etc/nginx/dhparam.pem;

        #SSL Security
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
        ssl_ecdh_curve secp384r1;
        ssl_prefer_server_ciphers on;
        server_tokens off;
        ssl_session_tickets off;

        proxy_set_header X-Forwarded-For $remote_addr;

        location / {
            proxy_pass         http://127.0.0.1:8000;
            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-Host $server_name;
            proxy_read_timeout  1200s;

            # used for view/edit office file via Office Online Server
            client_max_body_size 0;

            access_log      /var/log/nginx/seahub.access.log;
            error_log       /var/log/nginx/seahub.error.log;
        }

        location /seafdav {
            proxy_pass         http://127.0.0.1:8080/seafdav;
            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-Host $server_name;
            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_read_timeout  1200s;
            client_max_body_size 0;

            access_log      /var/log/nginx/seafdav.access.log;
            error_log       /var/log/nginx/seafdav.error.log;
        }

        location /seafhttp {
            rewrite ^/seafhttp(.*)$ $1 break;
            proxy_pass http://127.0.0.1:8082;
            client_max_body_size 0;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout  36000s;
            proxy_read_timeout  36000s;
            proxy_send_timeout  36000s;
            send_timeout  36000s;
        }
        location /media {
            root /home/ryujin/seafile-server-latest/seahub;
        }
    }

Guarda y cierra.

A continuación, activa la configuración de virtualhost para seafile y prueba la configuración de Nginx.

ln -s /etc/nginx/sites-available/seafile /etc/nginx/sites-enabled/
nginx -t

Asegúrate de que no hay ningún error, y luego reinicia el servicio Nginx.

systemctl restart nginx

Como resultado, la instalación y configuración de Nginx como proxy inverso para Seafile se ha completado con éxito.

Instalar y configurar Nginx como proxy inverso para Seafile

Paso 9 – Configurar el cortafuegos

Para este tutorial, ejecutaremos Seafile con el cortafuegos UFW activado. Y tenemos que añadir los servicios SSH, HTTP y HTTPS a la configuración del cortafuegos UFW.

Añade los servicios SSH, HTTP y HTTPS al cortafuegos UFW con el siguiente comando.

for svc in ssh http https
do
ufw allow $svc
done

Ahora activa el cortafuegos UFW y comprueba el estado de la configuración.

ufw enable
ufw status numbered

Y obtendrás el resultado que se indica a continuación.

UFW Permitir SSH HTTP y HTTPS

El cortafuegos UFW está activado y se han añadido los servicios SSH, HTTP y HTTPS.

Ahora estamos listos para usar el Seafile.

Paso 10 – Prueba

Abre tu navegador web y escribe el nombre del dominio de instalación de Seafile en la barra de direcciones.

https://seafile.hakase-labs.io/

Ahora serás redirigido a la conexión segura HTTPS y obtendrás la página de inicio de sesión de Seafile como se indica a continuación.

Página de inicio de sesión de Seafile

Escribe la contraseña de usuario de Seafile que acabas de crear en la parte superior y haz clic en el botón «Iniciar sesión».

Ahora obtendrás el panel de control de Seafile como se muestra a continuación.

Panel de control de Seafile

A continuación se muestra el resultado después de crear una nueva carpeta y subir el archivo al servidor de Seafile.

Archivo Seafile Subida con éxito

Como resultado, la instalación y configuración de Seafile con el servidor web Nginx y la base de datos MariaDB en Ubuntu 20.04 se ha completado con éxito.

Referencia

También te podría gustar...