Cómo instalar Seafile con Nginx en Ubuntu 18.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 MySQL. Instalaremos el servidor Seafile bajo el servidor web Nginx con HTTPS SSL Letsencrypt activado, utilizando la última versión de MySQL 5.8 en el sistema Ubuntu 18.04.

Requisitos previos

  • Ubuntu 18.04
  • Privilegios de root

¿Qué vamos a hacer?

  1. Instalar las dependencias de Seafile Python
  2. Instalar y configurar MySQL
  3. Descarga el Servidor Seafile para el sistema Linux
  4. Instalar el Servidor Seafile
  5. Instalar Nginx y Letsencrypt
  6. Configurar Nginx como proxy inverso para el servidor de Seafile
  7. Configurar el Servidor de Seafile
  8. Ejecutar Seafile Server como servicio
  9. Configurar el cortafuegos UFW
  10. Probar

Paso 1 – Instalar las dependencias de Seafile Python

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 2.7 para funcionar en el servidor.

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

sudo apt update

Ahora instala python 2.7 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 python -y
sudo apt install python2.7 libpython2.7 python-setuptools python-pil python-ldap python-urllib3 ffmpeg python-pip python-mysqldb python-memcache python-requests -y

Espera a que se instalen todas las dependencias.

Paso 2 – Instalar y configurar MySQL

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

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

sudo apt install mysql-server mysql-client -y

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

systemctl start mysql
systemctl enable mysql

El servidor MySQL está instalado en el sistema Ubuntu.

Ahora tenemos que configurar la contraseña de root de MySQL utilizando el comando ‘mysql_secure_installation’.

mysql_secure_installation

Ahora se te preguntará por la política de contraseñas de MySQL, 0 para LOW, 1 para MEDIUM y 2 para STRONG. Escribe el número ‘1’ para la política de contraseñas MEDIA, pulsa intro y luego escribe tu contraseña segura.

Instalar MySQL

Para los demás, sólo tienes que escribir «Y», como se muestra a continuación.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

La configuración de la contraseña raíz de MySQL se ha completado.

A continuación, crearemos una nueva base de datos para el servidor de Seafile. Crearemos 3 bases de datos para cada uno de los componentes 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 utilizando el comando cliente de MySQL.

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;

Crear base de datos para Seafile

Se ha instalado el servidor MySQL, 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 sistema 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 ‘mohammad’.

useradd -m -s /bin/bash mohammad

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

su - mohammad
wget https://download.seadrive.org/seafile-server_6.2.5_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_6.2.5_x86-64.tar.gz
mv seafile-server-6.2.5/ seafile-server/

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

Descargar las fuentes de Seafile

Paso 4 – Instalar el Servidor Seafile con MySQL

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

Accede con el usuario ‘mohammad’ y ve al directorio ‘seafile-server’.

su - mohammad
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’.

Instalar el servidor 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’

Utilizar la base de datos existente para el archivo marino

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

Confirmar la configuración del servidor seafile

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

Instalación del servidor Seafile completa

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 ‘mohammad’, ve al directorio ‘~/seafile-server-latest’.

su - mohammad
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.

Iniciar el archivo marino

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.

netstat -plntu

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

Comprobar los puertos

Ahora detén el servidor de seafile y seahub.

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

Detener a seafile y seahub

Paso 5 – Instalar y configurar Nginx con Letsencrypt

Para esta guía, el servidor de seafile se ejecutará bajo el servidor web Nginx con HTTPS activado. Y en este paso, instalaremos el servidor web Nginx y la herramienta Letsencrypt, y luego generaremos la clave SSL letsencrypt y DHPARAM para el nombre de dominio del servidor de seafile.

Instala el servidor web Nginx con el comando apt que aparece a continuación.

sudo apt install nginx -y

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

systemctl start nginx
systemctl enable nginx

Ahora instala la herramienta letsencrypt para generar certificados SSL letsencrypt.

sudo apt install letsencrypt -y

El servidor web Nginx y la herramienta letsencrypt han sido instalados.

A continuación, ve al directorio ‘/etc/nginx’ y crea un nuevo archivo de configuración ‘certbot.conf’ para letsencrypt.

cd /etc/nginx/
vim snippets/certbot.conf

Pega allí la siguiente configuración.

location /.well-known {
    alias /var/www/html/.well-known;
}

Guarda y sal.

Edita el archivo del host virtual por defecto.

vim sites-available/default

Añade la siguiente línea de inclusión en el corchete ‘servidor {…}’.

include snippets/certbot.conf;

Guarda y sal.

Prueba la configuración de nginx y reinicia el servidor web.

nginx -t
systemctl restart nginx

Configurar el servidor web nginx

Y ya estamos listos para generar un nuevo certificado SSL letsencrypt para el nombre de dominio del servidor seafile.

Genera los archivos del certificado SSL utilizando el comando ‘certbot’ como se muestra a continuación.

certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /var/www/html -d cloud.hakase-labs.io

Nota:

  • generaremos un nuevo certificado SSL y especificaremos el tamaño de la clave a ‘4096’.

Ahora obtendrás todos los archivos de certificados SSL ubicados en el directorio ‘/etc/letsencrypt/live’.

Crear un certificado SSL con Let's encrypt

Y para mayor seguridad, generaremos la clave Diffie-Hellman con tamaño 4096 utilizando el comando OpenSSL.

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

Ya se han generado todos los certificados necesarios.

Paso 6 – Configurar Nginx como proxy inverso para el servidor Seafile

Ve al directorio de configuración ‘/etc/nginx’ y crea un nuevo archivo de host virtual ‘seafile’ usando vim.

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

Pega allí la siguiente configuración.

 server {
        listen       80;
        server_name  cloud.hakase-labs.io;
        rewrite ^ https://$http_host$request_uri? permanent;
        server_tokens off;
    }
    server {
        listen 443 ssl http2;
        server_name cloud.hakase-labs.io;
        
        ssl on;
        ssl_certificate /etc/letsencrypt/live/cloud.hakase-labs.io/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/cloud.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 /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/mohammad/seafile-server-latest/seahub;
        }
    }

Guarda y sal.

Activa el host virtual seafile y prueba la configuración.

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

Asegúrate de que no hay ningún error y reinicia el servicio nginx.

systemctl restart nginx

La configuración de nginx como proxy inverso para el servidor de seafile se ha completado.

Nginx como proxy inverso para seafile

Paso 7 – Configurar el servidor de seafile

Para ejecutar el servidor seafile bajo el nombre de dominio del servidor web Nginx, necesitamos editar la configuración por defecto de ‘seafile’ para el ‘servicio ccnet’, ‘servidor seafile’ y ‘servidor seahub’.

Accede con el usuario ‘mohammad’ y ve al directorio ‘conf/’.

su - mohammad
cd conf/

Edita el archivo de configuración del servicio ccnet ‘ccnet.conf’.

vim ccnet.conf

En la línea ‘SERVICE_URL’, cambia el valor al nombre de dominio con HTTPS como se indica a continuación.

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

Guarda y sal.

Ahora edita el archivo ‘seafile.conf’ para la configuración del servidor seafile.

vim seafile.conf

Añade la línea ‘host’ con el valor a ‘127.0.0.1’ localhost como abajo.

[fileserver]
host = 127.0.0.1
port = 8082

Guarda y sal.

Y por último, editaremos el archivo ‘seahub_settings.py’.

vim seahub_settings.py

En la línea ‘FILE_SERVER_ROOT’, cambia el valor al nombre del dominio con HTTPS.

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

Guarda y sal.

Configurar el servidor de Seafile

Paso 8 – Ejecutar el Servidor Seafile como un servicio

En este tutorial, ejecutaremos el servidor de seafile como un servicio en el sistema Ubuntu 18.04. Crearemos un nuevo script de servicio para seafile y seahub.

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

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

Pega allí el siguiente script de servicio de seafile.

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

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

[Install]
WantedBy=multi-user.target

Guarda y sal.

Ahora crea el archivo de servicio de seahub ‘seahub.service’.

vim seahub.service

Pega allí el siguiente script de servicio de seahub.

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

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

[Install]
WantedBy=multi-user.target

Guarda y sal.

Nota:

  • Cambia la ruta de los scripts seafile.sh y seahub.sh.

Ahora vuelve a cargar el sistema systemd.

systemctl daemon-reload

E inicia el servicio seafile y seahub.

systemctl start seafile
systemctl start seahub

Activa estos servicios para que se lancen cada vez que se inicie el sistema.

systemctl enable seafile
systemctl enable seahub

Configurar la unidad systemd de Seafile

Los servicios seafile y seahub están en funcionamiento – compruébalo con los comandos siguientes.

systemctl status seafile
systemctl status seahub

netstat -plntu

Seafile iniciado por systemd

Paso 8 – Configurar el cortafuegos UFW

Se recomienda siempre activar el cortafuegos en cualquier sistema. Para el sistema ubuntu, activaremos el cortafuegos UFW y añadiremos los puertos SSH, HTTP y HTTPS en él.

Añade el puerto ‘ssh’ y activa el cortafuegos UFW.

ufw allow ssh
ufw enable

Escribe ‘y’ para activar el cortafuegos.

Ahora añade los servicios HTTP y HTTPS.

ufw allow http
ufw allow https

Comprueba la lista de reglas del cortafuegos.

ufw status numbered

Y tendrás tres servicios SSH, HTTP y HTTPS en la lista.

Configurar el cortafuegos UFW

Paso 9 – Prueba

Abre tu navegador web y escribe la instalación de la URL del servidor seafile. La mía es

http://cloud.hakase-labs.io/

Y serás redirigido a la página de inicio de sesión de la conexión segura HTTPS.

Inicio de sesión en Seafile

Escribe el correo electrónico del administrador ‘[email protected]’ y la contraseña ‘mypassword’, y haz clic en el botón ‘Log in’.

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

Panel de control de Seafile

Adicional – sube una imagen y visualízala en el panel de control de seafile.

Subir el archivo con Seafile

La instalación y configuración del servidor seafile con el servidor web Nginx y Letsencrypt en Ubuntu 18.04 se ha completado con éxito.

Referencia

También te podría gustar...