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?
- Instalar las dependencias de Seafile Python
- Instalar y configurar MySQL
- Descarga el Servidor Seafile para el sistema Linux
- Instalar el Servidor Seafile
- Instalar Nginx y Letsencrypt
- Configurar Nginx como proxy inverso para el servidor de Seafile
- Configurar el Servidor de Seafile
- Ejecutar Seafile Server como servicio
- Configurar el cortafuegos UFW
- 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.
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 'Hakase-Seafile01@';
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;
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’.
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’.
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 ‘Hakase-Seafile01@’
- base de datos ccnet ‘ccnet-db’
- base de datos seafile: ‘seafile-db’
- base de datos seahub: ‘seahub-db’
Ahora vuelve a pulsar intro para confirmar la configuración de nuestro servidor de seafile.
Y cuando la instalación se haya completado, obtendrás el resultado que se muestra a continuación.
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.
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.
Ahora detén el servidor de seafile y seahub.
./seafile.sh stop
./seahub.sh stop
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
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’.
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.
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.
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
Los servicios seafile y seahub están en funcionamiento – compruébalo con los comandos siguientes.
systemctl status seafile
systemctl status seahub
netstat -plntu
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.
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.
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.
Adicional – sube una imagen y visualízala en el panel de control de 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.