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.
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 '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 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’.
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’.
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 ‘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.
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
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.
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
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.
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.
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.
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.
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.
A continuación se muestra el resultado después de crear una nueva carpeta y subir el archivo al servidor de Seafile.
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.