Cómo instalar FileRun utilizando Docker

FileRun es una aplicación web autoalojada para sincronizar y compartir archivos. Puede ejecutarse en cualquier servidor, incluyendo Linux, Windows, NAS, etc. Se puede acceder a los archivos desde la web y el móvil mediante una aplicación PWA. Es compatible con Nextcloud, por lo que puedes utilizar sus aplicaciones de escritorio y móvil para acceder a tus archivos. También puedes acceder a los archivos utilizando el protocolo WebDAV. FileRun también puede utilizarse como sustituto de Google Fotos y es compatible con plugins de oficina y de imagen.

FileRun está disponible como versión gratuita, que admite hasta 10 cuentas, y como versión empresarial, si quieres más funciones y cuentas. En este tutorial, aprenderás a instalar FileRun utilizando un entorno Docker en tu servidor Linux. También configuraremos Elasticsearch para que admita búsquedas de texto completo.

Requisitos previos

  • Un servidor Linux con un mínimo de 2 núcleos de CPU y 2 GB de RAM. Este tutorial funcionará en todas las distribuciones de Linux.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio completo (FQDN) que apunte al servidor. Para nuestros propósitos, utilizaremos filerun.example.com como nombre de dominio.
  • Asegúrate de que todo está actualizado.
    ## Ubuntu/Debian
    $ sudo apt update && sudo apt upgrade
    
    ## CentOS/Fedora/Rocky Linux/AlmaLinux
    $ sudo dnf update
    
  • Instala los paquetes de utilidades básicas. Es posible que algunos ya estén instalados.
    ## Ubuntu/Debian
    $ sudo apt install wget curl nano unzip -y
    
    ## CentOS/Rocky Linux/AlmaLinux
    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Paso 1 – Configurar el cortafuegos

Cent OS/Rocky Linux/Alma Linux

Deberías tener instalado el cortafuegos Firewalld. Comprueba el estado del cortafuegos.

$ sudo firewall-cmd --state
running

Abre los puertos 80, 9443 y 443. Portainer utiliza el puerto 9443 para exponer su interfaz de usuario web a través de HTTPS. Nginx Proxy Manager utiliza el puerto 81 para su UI.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Recarga el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Los sistemas Ubuntu y Debian utilizan ufw (Uncomplicated Firewall) por defecto.

Comprueba si el cortafuegos se está ejecutando.

$ sudo ufw status

Si lo está, abre los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Abre el puerto SSH si el cortafuegos no se está ejecutando.

$ sudo ufw allow "OpenSSH"

Habilita el cortafuegos si no se está ejecutando.

$ sudo ufw enable

Si se está ejecutando, vuelve a cargarlo para aplicar los cambios.

$ sudo ufw reload

Paso 2 – Instala Docker y Docker Compose

Ejecuta el siguiente comando para instalar Docker.

CentOS/Rocky Linux/Alma Linux

$ sudo dnf install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Es posible que obtengas el siguiente error al intentar instalar Docker.

ror: 
 Problem: problem with installed package buildah-1:1.26.2-1.el9_0.x86_64
  - package buildah-1:1.26.2-1.el9_0.x86_64 requires runc >= 1.0.0-26, but none of the providers can be installed
  - package containerd.io-1.6.9-3.1.el9.x86_64 conflicts with runc provided by runc-4:1.1.3-2.el9_0.x86_64
  - package containerd.io-1.6.9-3.1.el9.x86_64 obsoletes runc provided by runc-4:1.1.3-2.el9_0.x86_64
  - cannot install the best candidate for the job

Utiliza el siguiente comando si te aparece el error anterior.

$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin --allowerasing

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Habilita e inicia el servicio Docker.

$ sudo systemctl start docker --now

Añade tu nombre de usuario al grupo Docker.

$ sudo usermod -aG docker $USER

Sal del sistema y vuelve a entrar para aplicar el cambio.

Paso 3 – Crear la Configuración Docker de FileRun

Crea un directorio para la Configuración Docker de Filerun.

$ mkdir dockerfilerun

Cambia al directorio.

$ cd ~/dockerfilerun

Crea y abre el archivo Docker compose para editarlo.

$ nano docker-compose.yml

Pega en él el siguiente código.

version: '3.8'

services:
  db:
    image: mariadb:10.5
    container_name: filerun_mariadb
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: your_filerun_username
      MYSQL_PASSWORD: your_filerun_password
      MYSQL_DATABASE: your_filerun_database
    volumes:
      - ./db:/var/lib/mysql

  web:
    image: filerun/filerun
    container_name: filerun_web
    environment:
      FR_DB_HOST: db
      FR_DB_PORT: 3306
      FR_DB_NAME: your_filerun_database
      FR_DB_USER: your_filerun_username
      FR_DB_PASS: your_filerun_password
      APACHE_RUN_USER: www-data
      APACHE_RUN_USER_ID: 33
      APACHE_RUN_GROUP: www-data
      APACHE_RUN_GROUP_ID: 33
    depends_on:
      - db
    links:
      - db
      - tika
      - elasticsearch
    ports:
      - "8080:80"
    volumes:
      - ./html:/var/www/html
      - ./user-files:/user-files

  tika:
    image: apache/tika
    container_name: filerun_tika

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.23
    container_name: filerun_search
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65535
        hard: 65535
    mem_limit: 1g
    volumes:
      - ./esearch:/usr/share/elasticsearch/data

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Repasemos el archivo de composición.

  • En primer lugar, extraemos la imagen docker MariaDB para almacenar los datos. Introduce una contraseña de root, un nombre de usuario MySQL, una contraseña MySQL y el nombre de la base de datos para FileRun. Hacemos una copia de seguridad de la base de datos montándola en el directorio ~/dockerfilerun/db.
  • A continuación, tiramos del contenedor FileRun, que se conecta a la imagen MariaDB utilizando las mismas credenciales de la base de datos. También ejecuta el servidor interno Apache y expone FileRun a través del puerto 80. También montamos un directorio público en el host en el directorio ~/dockerfilerun/html y los correspondientes archivos subidos por el usuario en el directorio ~/dockerfilerun/user-files.
  • A continuación, tiramos del contenedor Apache Tika, que ayuda a Filerun a leer los metadatos de los archivos.
  • Y, por último, tiramos del contenedor Elasticsearch, que ayuda a ejecutar una búsqueda de texto completo en el contenido cargado en FileRun. Por el momento, FIleRun sólo es compatible con Elasticsearch 6.8.x. Puedes utilizar las variables de entorno para controlar el límite de memoria con respecto a la memoria disponible en tu servidor. Montaremos los datos de Elasticsearch en el directorio ~/dockerfilerun/esearch.

Crea el directorio para Elasticsearch. Docker crea directorios para volúmenes automáticamente, pero Elasticsearch sólo funciona cuando el directorio local es propiedad del usuario y el grupo tiene 1000 como ID.

$ mkdir esearch

Establece los permisos correctos utilizando los siguientes comandos.

$ chmod g+rwx esearch
$ sudo chgrp 1000 esearch

Antes de iniciar el contenedor, necesitamos aumentar los límites de los recuentos mmap para que Elasticsearch funcione. Abre el archivo /etc/sysctl.conf para editarlo.

$ sudo nano /etc/sysctl.conf

Pega la siguiente línea en la parte inferior.

vm.max_map_count = 262144

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Esto hará que el cambio sea permanente, pero sólo si reinicias el sistema.

Ejecuta el siguiente comando para aplicar el cambio ahora mismo.

$ sudo sysctl -w vm.max_map_count=262144

Reinicia el servicio Docker.

$ sudo systemctl restart docker

Paso 4 – Ejecuta el Contenedor Docker FileRun

Ejecuta el siguiente comando para lanzar el contenedor Docker.

$ docker compose up -d

El proceso tardará algún tiempo en completarse, lo que incluye la obtención de las imágenes Docker, la creación de una red y el lanzamiento de los contenedores necesarios.

Comprueba el estado de los contenedores.

$ docker ps

Obtendrás un resultado similar.

Estado del contenedor Docker

El siguiente paso es instalar SSL utilizando Nginx para hacerlo más seguro. Para ello utilizaremos el servidor Nginx.

Paso 5 – Instalar Nginx

CentOS/Rocky Linux/Alma Linux

Para instalar la última versión de Nginx, necesitas instalar el repositorio oficial de Nginx.

Instala el paquete de requisitos previos.

$ sudo dnf install yum-utils

Crea y abre el repositorio yum de Nginx.

$ sudo nano /etc/yum.repos.d/nginx.repo

Pega el siguiente código.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Instala Nginx.

$ sudo dnf install nginx

Habilita e inicia el servidor Nginx.

$ sudo systemctl start nginx --now

Configura SELinux para permitir las conexiones de red desde Filerun.

$ sudo setsebool -P httpd_can_network_connect on

Ubuntu/Debian

Ubuntu 22.04 y Debian 11 incluyen una versión antigua de Nginx. Para instalar la última versión, debes descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Para Debian, utiliza en su lugar el siguiente comando.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.1

Paso 6 – Instalar SSL

Ubuntu/Debian

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 y Debian 11 vienen con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

CentOS/Rocky Linux/Alma Linux

Certbot necesita el repositorio EPEL para funcionar.

$ sudo dnf install epel-release

Utilizaremos Snapd para instalar Certbot. Instala Snapd.

$ sudo dnf install snapd

Activa e inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete central de Snap.

$ sudo snap install core
$ sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Ejecuta el siguiente comando para instalar Certbot.

$ sudo snap install --classic certbot

Habilita Certbot creando el enlace simbólico a su ejecutable.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d filerun.example.com

Hemos generado el certificado SSL mediante la opción certonly de Certbot utilizando Nginx. Instala el certificado utilizando el servidor Nginx pero no modifica nada.

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/filerun.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 7 – Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/filerun.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/filerun.conf

Pega en él el siguiente código. Sustituye filerun.example.com por el nombre de tu dominio.

upstream backend {
   server 127.0.0.1:8080;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name filerun.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name filerun.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/filerun.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/filerun.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/filerun.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # OCSP Stapling --- fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   access_log /var/log/nginx/filerun.access.log main;
   error_log  /var/log/nginx/filerun.error.log;

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_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-Proto $scheme;
       proxy_set_header X-Forwarded-Protocol $scheme;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 1800s;
       proxy_connect_timeout 1800s;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Comprueba la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Paso 8 – Acceder y configurar FileRun

Accede a la URL https://filerun.example.com y obtendrás la siguiente pantalla.

Instalador de FileRun

Haz clic en el botón Siguiente para abrir la página de requisitos del sistema.

Página de requisitos del servidor FileRun

Si todo es correcto, haz clic en el botón Siguiente para pasar a la página de configuración de la base de datos.

Página de configuración de la base de datos FileRun

Introduce el nombre de la base de datos, el usuario y la contraseña, y pulsa el botón Siguiente para continuar.

Credenciales de usuario de FileRun

Aquí se te proporcionarán los datos de acceso. Pulsa el botón Siguiente para abrir la página de inicio de sesión.

Página de inicio de sesión de FileRun

Introduce tus credenciales de inicio de sesión del paso anterior y pulsa el botón Iniciar sesión para abrir el panel de control de FileRun.

Panel de control de FileRun

Haz clic en el enlace Superusuario situado en la parte inferior izquierda de la pantalla y haz clic en Configuración de la cuenta.

Configuración de la cuenta FileRun

Haz clic en la pestaña Cambiar contraseña para acceder a la siguiente página en la que puedes cambiar tu contraseña predeterminada. Haz clic en el botón Guardar cambios para guardarla.

FileRun Cambiar contraseña Pantalla

Haz clic en el enlace Panel de Control de la parte inferior izquierda de la página para acceder al Panel de Control de FileRun. Visita la sección Archivos >> Búsqueda de la página. Aquí habilitaremos algunas funciones avanzadas de búsqueda de archivos y OCR.

Introduce http://elasticsearch:9200 como URL del Host de ElasticSearch. El Hostname se refiere al nombre del servicio de Elastic en el archivo docker. Haz clic en el botón Probar servidor para comprobar si funciona correctamente.

Prueba FileRun ElasticSearch

Deberías obtener una salida similar a la anterior que confirme que funciona correctamente.

Introduce tika como nombre de host del Servidor Apache Tika. Introduce 9998 como número de puerto. Marca el botón OCR Archivos PDF. Pulsa el botón Probar servidor para comprobar que funciona correctamente.

Prueba FileRun Tika

Deberías obtener una salida similar para el servidor Tika que confirme que funciona correctamente. Haz clic también en el botón Archivos de imagen OCR. Haz clic en el botón Guardar cambios en la parte superior de la página.

A continuación, cambia el valor de la opción Criterios de búsqueda predeterminados de Nombre a Contenido para activar la búsqueda de texto completo. Vuelve a hacer clic en el botón Guardar cambios para finalizar el proceso.

Configuración de búsqueda de FileRun

Paso 9 – Actualizar FileRun

Actualizar FileRun es un paso sencillo. Cambia al directorio de composición Docker de FileRun.

$ cd ~/dockerfilerun

A continuación, detén y elimina el contenedor existente. No obstante, tus datos se conservarán.

$ docker compose down --remove-orphans

Extrae la última versión de la imagen Docker de FileRun.

$ docker compose pull

Inicia de nuevo los contenedores.

$ docker compose up -d

Tu instalación de FileRun se actualizará y se iniciará de nuevo.

Conclusión

Con esto concluye el tutorial en el que has aprendido a instalar el software de alojamiento de archivos FileRun utilizando Docker en un servidor Linux. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...