SeaFile es un servidor de archivos similiar a NextCloud.
Debes de tener ya apuntando un registro DNS tipo A (o AAAA) a tu dominio o subdominio que vayas a usar con SeaFile, para este ejemplo he usado: "seafile.cuates.net". Si no tienes dominio, puedo ayudarte con un subdominio.
Para este proceso he usado Ubuntu Server 22.04 LTS. También asumo que tienes conocimientos básicos de la terminal Linux con cualquier shell. Aquí uso el editor "vim" para editar los archivos, pero puedes usar cualquier editor de texto plano que te guste y este instalado en tu servidor.
Si activas el registro abierto en tu instancia y quieres recibir las notificaciones por correo, necesitas un servicio SMTP activo y funcionando.
Asumo que es un servidor limpio recién instalado y actualizado.
apt update apt upgrade apt autoremove
Asegurate de tener correctamente configurado tu host.
hostnamectl set-hostname seafile.cuates.net
Tu zona horaria.
timedatectl set-timezone America/Mexico_City
Y tus locales
localectl set-locale LANG=en_US.UTF-8 LANGUAGE="en_US:en"
Como "root", agregar el usuario "seafile".
adduser seafile
Y agrégalo al grupo "sudo".
usermod -aG sudo seafile
Cambiate a este nuevo usuario.
su seafile
Estos requerimientos con "sudo".
sudo apt install python-is-python3 python3-pip libmemcached-dev memcached python3-dev default-libmysqlclient-dev build-essential
Actualizamos "pip".
sudo pip install --upgrade pip wheel
Estos requerimientos ya son sin "sudo".
pip install --user pillow pylibmc captcha jinja2 sqlalchemy django-pylibmc django-simple-captcha python3-ldap mysqlclient lxml
Instalar con "sudo".
sudo apt install mariadb-server
Ejecutar el asistente para mejorar la seguridad de MariaDB
sudo mysql_secure_installation
Asegurate de que la contraseña para el "root" de MariaDB esta bien.
sudo mysql -u root -p
Creamos el directorio de instalación.
sudo mkdir /opt/seafile
Lo cambiamos de dueño.
sudo chown -R seafile:seafile /opt/seafile
Nos movemos a el.
cd /opt/seafile
Descargamos la última versión.
wget https://s3.eu-central-1.amazonaws.com/download.seadrive.org/seafile-server_9.0.9_x86-64.tar.gz
Extraemos.
tar -xzf seafile-server_9.0.9_x86-64.tar.gz
Creamos un directorio para guardar el archivo descargado.
mkdir installed
Y lo movemos.
mv seafile-server_9.0.9_x86-64.tar.gz installed/
Entramos al directorio.
cd seafile-server-9.0.9
Iniciamos el asistente de instalación de SeaFile.
./setup-seafile-mysql.sh --------------------------------- This is your configuration --------------------------------- server name: seafilecuates server ip/domain: seafile.cuates.net seafile data dir: /opt/seafile/seafile-data fileserver port: 8082 database: create new ccnet database: ccnet-db seafile database: seafile-db seahub database: seahub-db database user: seafile --------------------------------- Press ENTER to continue, or Ctrl-C to abort --------------------------------- ... ----------------------------------------------------------------- Your seafile server configuration has been finished successfully. -----------------------------------------------------------------
No continúes si "no ves" este último mensaje.
Iniciamos "seafile" para comprobar que todo esta bien.
./seafile.sh start
Si todo esta bien, debes de ver un mensaje similar a:
Starting seafile server, please wait ...
Iniciamos "seahub".
./seahub.sh start
Como es la primera vez, te solicitará una cuenta de correo que será la cuenta adminstración de la instancia. También te pedirá una contraseña, no uses la misma de tu correo, usa una diferente.
Starting seahub at port 8000 ... ---------------------------------------- It's the first time you start the seafile server. Now let's create the admin account ---------------------------------------- What is the email for the admin account? [ admin email ] admin@correo.com What is the password for the admin account? [ admin password ] Enter the password again: [ admin password again ] ---------------------------------------- Successfully created seafile admin ---------------------------------------- Seahub is started Done.
Si todo esta bien, es decir, si ves correctamente los mensajes anteriores, detenemos los servicios.
./seahub.sh stop Stopping seahub ... Done. ./seafile.sh stop Stopping seafile server ... Done.
Instalar
sudo apt install certbot
Registrar un correo. Utiliza un correo válido, recibirás las notificaciones para cuando estén por vencerse los certificados.
sudo certbot register --agree-tos -m YOUR_EMAIL
Solicitamos los certificados para nuestro dominio. Reemplaza DOMAIN por el dominio o subdominio que estés usando.
sudo certbot certonly --standalone --preferred-challenges http-01 -d DOMAIN
Si todo esta bien, debes de ver un mensaje similar a:
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/DOMAIN/fullchain.pem Key is saved at: /etc/letsencrypt/live/DOMAIN/privkey.pem This certificate expires on 2023-02-13. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background.
Toma nota de las rutas completas de tus nuevos certificados.
/etc/letsencrypt/live/DOMAIN/fullchain.pem /etc/letsencrypt/live/DOMAIN/privkey.pem
Crear archivo "ssl-dhparams.pem"
sudo openssl dhparam -dsaparam -out /etc/letsencrypt/ssl-dhparams.pem 4096
Crear el archivo "options-ssl-nginx.conf"
sudo vim /etc/letsencrypt/options-ssl-nginx.conf
Con el siguiente contenido:
ssl_session_cache shared:le_nginx_SSL:10m; ssl_session_timeout 1440m; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA38"; add_header Strict-Transport-Security "max-age=63072000; preload"; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header Permissions-Policy interest-cohort=();
Crear el archivo "certbot.conf"
sudo vim /etc/letsencrypt/certbot.conf
Con el siguiente contenido. Asegurate de reemplazar DOMAIN por tu dominio.
ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
Instalar.
sudo apt install nginx
Reemplazar el contenido del archivo "nginx.conf"
sudo vim /etc/nginx/nginx.conf
Por:
user www-data; worker_processes auto; worker_rlimit_nofile 20480; pid /run/nginx.pid; error_log /var/log/nginx/error.log warn; events { worker_connections 5120; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_tokens off; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/sites-enabled/*.conf; disable_symlinks off; }
Configurar el dominio en el archivo "DOMAIN.conf", no olvides reemplazar DOMAIN por tu dominio o subdominio.
sudo vim /etc/nginx/sites-available/DOMAIN.conf
Con el siguiente contenido.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name seafile.cuates.net; charset utf-8; include /etc/letsencrypt/certbot.conf; proxy_set_header X-Forwarded-For $remote_addr; server_tokens off; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; client_max_body_size 0; 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_set_header X-Forwarded-Proto https; proxy_read_timeout 1200s; } location /seafhttp { rewrite ^/seafhttp(.*)$ $1 break; proxy_pass http://127.0.0.1:8082; 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 /opt/seafile/seafile-server-latest/seahub; } }
Creamos un enlace simbólico al archivo anterior.
sudo ln -s /etc/nginx/sites-available/seafile.cuates.net.conf /etc/nginx/sites-enabled/
Probamos la configuración.
sudo nginx -t
Debes de ver el mensaje siguiente:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
No continues si obtienes cualquier error.
Entramos al directorio.
cd /opt/seafile/conf
Editamos el archivo "ccnet.conf"
vim ccnet.conf
En la sección "General" agregamos:
[General] SERVICE_URL = https://seafile.cuates.net
Editamos el archivo "seahub_settings.py"
vim seahub_settings.py
Asegurate de cambiar:
SERVICE_URL = "http://DOMAIN/"
Por:
SERVICE_URL = "https://DOMAIN/"
Y agregas al final del archivo.
FILE_SERVER_ROOT = 'https://seafile.cuates.net/seafhttp' ENABLE_SETTINGS_VIA_WEB = False ALLOWED_HOSTS = ['seafile.cuates.net'] TIME_ZONE = 'America/Mexico_City' LANGUAGE_CODE = 'es' LANGUAGES = ( ('en', 'English'), ('es', 'Español'), ) SITE_NAME = 'Seafile puros Cuates' SITE_TITLE = SITE_NAME REST_FRAMEWORK = { 'DEFAULT_THROTTLE_RATES': { 'ping': '600/minute', 'anon': '5/minute', 'user': '300/minute', }, 'UNICODE_JSON': False, } EMAIL_USE_SSL = True EMAIL_HOST = 'mail.gandi.net' EMAIL_HOST_USER = 'no-responder@correo.email' EMAIL_PORT = 465 EMAIL_USE_LOCALTIME = True EMAIL_HOST_PASSWORD = 'SUPER_SECRET_PASSWORD' DEFAULT_FROM_EMAIL = EMAIL_HOST_USER SERVER_EMAIL = EMAIL_HOST_USER ENABLE_SIGNUP = True ACTIVATE_AFTER_REGISTRATION = False NOTIFY_ADMIN_AFTER_REGISTRATION = True LOGIN_ATTEMPT_LIMIT = 3 FREEZE_USER_ON_LOGIN_FAILED = True USER_PASSWORD_MIN_LENGTH = 10 USER_STRONG_PASSWORD_REQUIRED = True FORCE_PASSWORD_CHANGE = True SESSION_EXPIRE_AT_BROWSER_CLOSE = True SHARE_LINK_EMAIL_LANGUAGE = 'es-ES' CACHES = { 'default': { 'BACKEND': 'django_pylibmc.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211', }, } TEXT_PREVIEW_EXT = """ac, am, bat, c, cc, cmake, cpp, cs, css, diff, el, gmi, h, html, htm, java, js, json, less, make, org, php, pl, properties, py, rb, scala, script, sh, sql, txt, text, tex, vi, vim, xhtml, xml, log, csv, groovy, rst, patch, go"""
Editamos el archivo "seafile.conf"
vim seafile.conf
En la sección "fileserver" comenta las dos líneas:
#[fileserver] #port = 8082
Y agrega al final del archivo después de la sección "[database]":
[quota] default = 10 [history] keep_days = 30 [zip] windows_encoding = iso-8859-1 [fileserver] use_go_fileserver = true
Creamos el archivo "seafile.service"
sudo vim /etc/systemd/system/seafile.service
Con el siguiente contenido:
[Unit] Description=Seafile After=network.target mysql.service [Service] Type=forking ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop LimitNOFILE=infinity User=seafile Group=www-data [Install] WantedBy=multi-user.target
Creamos el archivo "seahub.service"
sudo vim /etc/systemd/system/seahub.service
Con el siguiente contenido.
[Unit] Description=Seahub After=network.target seafile.service [Service] Environment="LC_ALL=en_US.UTF-8" Type=forking ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop User=seafile Group=www-data [Install] WantedBy=multi-user.target
Activamos para que inicien al reiniciar el servidor.
sudo systemctl enable seafile sudo systemctl enable seahub
Iniciamos los servicios.
sudo systemctl start seafile sudo systemctl start seahub
Verifica que los dos estén activos y funcionando.
sudo systemctl status seafile sudo systemctl status seahub
Reiniciamos "nginx"
sudo systemctl restart nginx
Instalamos "ufw", puede que ya este instalado.
sudo apt install ufw
Abrimos los puertos necesarios, reemplaza SSH_PORT por el puerto que hayas configurado en tu acceso SSH, no es recomendable dejar el 22 predeterminado.
sudo ufw allow SSH_PORT/tcp sudo ufw allow 443/tcp
Asegurate de que el puerto SSH sea el correcto "antes" de activar el firewall, si no es el correcto, puedes perder el acceso a tu servidor.
Lo activamos.
sudo ufw enable
En este momento, ya deberías tener acceso desde tu dominio o subdominio configurado con las credenciales administrativas configuradas anteriormente.
Ya puedes también, instalar un cliente para sincronizar en tu sistema operativo.
Si este tutorial te ha sido útil considera hacer un aprecio al mismo:
En Junas (G1)
A5DdXxCKPw3QKWVdDVs7CzkNugNUW1sHu5zDJFWxCU2h
En Euros:
IBAN: BE60 9671 0556 5870 SWIFT / BIC: TRWIBEB1XXX
Gracias