En este tutorial se explica el despliegue de FileBrowser Quantum en Oracle Cloud Infrastructure (OCI). El procedimiento es igualmente válido para otros proveedores cloud o instalaciones locales, ya que la mayoría de los pasos no varían.
Con esta configuración obtendremos un espacio web auto gestionado para el almacenamiento de archivos, orientado a uso personal o colaborativo, con control total sobre los datos evitando el riesgo de exponer datos sensibles en empresas de terceros.
El entorno de partida es una instancia Ubuntu Linux con Docker y Docker Compose, que actualmente hospeda esta web pero lo puedes desplegar en cualquier otra infraestructura cloud o en local en una Raspberry o cualquier otra máquina con Linux.
FileBrowser Quantum es una aplicación web autoalojada que permite acceder y gestionar archivos directamente desde el navegador, con soporte para usuarios, permisos, compartición de archivos y edición de contenidos.
Es una alternativa propia a servicios como Google Drive, OneDrive o Dropbox, con la ventaja de que los datos se almacenan en tu propia infraestructura.
Se trata de un fork avanzado del proyecto open source File Browser original, con una interfaz más moderna y soporte para la integración con OnlyOffice, lo que permite abrir y editar documentos de texto, hojas de cálculo y presentaciones directamente desde el navegador. Además, ofrece funcionalidades avanzadas como la compartición de archivos mediante enlaces públicos y se encuentra en desarrollo activo, incorporando nuevas características de forma continua. En definitiva, es un servicio que transmite una clara sensación de producto profesional y bien mantenido.
REQUISITOS PREVIOS
Toda la guía paso a paso se ha realizado sobre una instancia Ubuntu Linux con el panel aaPanel instalado en Oracle Cloud Infrastructure, el mismo servidor que hospeda www.tallerdeapps.com.
Los requisitos mínimos para desplegar FileBrowser Quantum en un servidor accesible desde Internet consisten en disponer de una instancia Linux con Docker y Docker Compose. Si además se cuenta con un dominio web, es posible acceder al servicio mediante un proxy inverso utilizando un subdominio, lo que proporciona una URL más amigable que una dirección IP acompañada de un puerto. En este tutorial se utiliza aaPanel para crear el proxy inverso, aunque se puede emplear Traefik Proxy u otra tecnología equivalente según las preferencias o necesidades del entorno.
Del mismo modo, el servicio puede desplegarse en una red local, utilizando un equipo que ejecute el contenedor de FileBrowser Quantum y ofrezca acceso a los distintos ordenadores de la intranet.
Se requieren conocimientos técnicos de Linux, administración de infraestructuras en la nube, gestión de conexiones externas a instancias, así como la creación y configuración de dominios y subdominios.
Antes de desplegar FileBrowser Quantum es importante comprender la estructura de directorios que se utilizará, ya que cada uno cumple una función específica dentro del servicio.
Árbol de directorios utilizado en este tutorial:
/www/drivetallerdeapps/
│
├── data/ ← Archivos gestionados por FileBrowser
│
├── docker-compose.yml ← Definición del servicio Docker
│
└── config.yaml ← Configuración de FileBrowser Quantum
Comenzamos. Abrimos una sesión SSH en la instancia y, a continuación, se crean los directorios necesarios y se asignan los propietarios y los permisos adecuados:
Con mkdir se crean los directorios con el usuario que ejecuta el comando. En este caso, al utilizar sudo, tanto el propietario como el grupo de los directorios creados serán root.
sudo mkdir -p /www/drivetallerdeapps/data
Para que el contenedor FileBrowser Quantum tenga permisos de escritura sobre los volúmenes montados, es necesario asignar como propietario el UID 1000 y el GID 1000, que son los identificadores utilizados internamente por FileBrowser. En este entorno concreto, dicho UID corresponde al usuario opc. En otros entornos puede corresponder a otro usuario o incluso no existir como nombre en el sistema host. Los permisos seguirán funcionando correctamente, ya que Docker opera exclusivamente con identificadores numéricos (UID/GID), no con nombres de usuario.
Adicionalmente, se ajustan los permisos de lectura, escritura y ejecución necesarios mediante el comando chmod.
sudo chown -R 1000:1000 /www/drivetallerdeapps/data
sudo chmod -R 755 /www/drivetallerdeapps/data
Con el comando chown se cambia el propietario de los directorios creados al usuario con UID 1000. Este UID corresponde al usuario con el que se ejecuta FileBrowser Quantum dentro del contenedor Docker. Asignar la propiedad de los directorios a este UID garantiza que la aplicación pueda leer y escribir correctamente en el sistema de archivos montado desde el host.
chmod| Valor | Permiso | Significado |
|---|---|---|
| 4 | r | Lectura (read) |
| 2 | w | Escritura (write) |
| 1 | x | Ejecución (execute) |
Los permisos se asignan sumando estos valores para el propietario, el grupo y
otros usuarios. Por ejemplo, el permiso 755 equivale a:
Comprobación de la creación de directorios
Si todo ha ido bien obtendremos algo como esto. El árbol de directorios con el propietario y permisos:
find /www/drivetallerdeapps -ls
4206916 4 drwxr-xr-x 3 root root 4096 Feb 1 21:35 /www/drivetallerdeapps
4206926 4 drwxr-xr-x 2 opc opc 4096 Feb 1 21:35 /www/drivetallerdeapps/data
Para comprobar que "opc" corresponde con UID y GID 1000:
id 1000
uid=1000(opc) gid=1000(opc) groups=1000(opc)
El archivo de configuración es obligatorio para que FileBrowser Quantum pueda iniciarse. En este paso utilizaremos el archivo mínimo funcional, suficiente para que el servicio arranque y permita la gestión básica de archivos y usuarios.
Este archivo debe ubicarse en la ruta que hayamos definido previamente en el
docker-compose.yml. En nuestro caso:
sudo nano /www/drivetallerdeapps/config.yaml
Nota: Aunque docker-compose.yml
utiliza habitualmente la extensión .yml,
FileBrowser Quantum emplea específicamente el archivo
config.yaml (con extensión
.yaml) como archivo de configuración principal.
A continuación se muestra el contenido mínimo necesario, tal como aparece en la documentación oficial :
server:
sources:
- path: /folder # Do not use a root "/" directory or include the "/var" folder
config:
defaultEnabled: true
docker-compose.yml.
Este archivo representa la configuración mínima necesaria para que FileBrowser Quantum funcione. Al levantar el servicio por primera vez, FileBrowser Quantum crea automáticamente un usuario administrador por defecto:
Con este archivo mínimo config.yaml es posible:
A partir de esta base, FileBrowser Quantum permite crear entornos multiusuario con carpetas privadas, carpetas compartidas y permisos avanzados. No obstante, esta configuración avanzada queda fuera del objetivo de este tutorial, que se centra en una instalación funcional y sencilla.
Opcionalmente, es posible definir un usuario administrador al crear el servicio
añadiendo las propiedades
adminUsername: y
adminPassword:
en el archivo de configuración. Sin embargo, es recomendable definir la contraseña mediante una
variable de entorno para evitar exponerla directamente
en el archivo config.yaml
También es posible definir configuraciones más avanzadas directamente desde el archivo
config.yaml, como el uso de múltiples
fuentes, reglas de acceso explícitas y entornos multiusuario complejos. Para profundizar
en estos escenarios se recomienda consultar la documentación oficial:
https://filebrowserquantum.com/en/docs/advanced/source-configuration/sources/
La configuración del contenedor se realiza mediante el archivo
docker-compose.yml. Con tu editor de texto
favorito —en este ejemplo se utiliza nano—
se crea el archivo y se pega el contenido del fichero Docker Compose. Este archivo se
ubicará en el directorio raíz del proyecto.
sudo nano /www/drivetallerdeapps/docker-compose.yml
Recuerda que los archivos YAML son muy estrictos con la indentación. Es fundamental respetar exactamente los espacios y la estructura de cada línea, ya que un error de sangrado provocará fallos al ejecutar Docker Compose.
services:
tallerdrive:
image: gtstef/filebrowser:stable
container_name: drivetallerdeapps
restart: unless-stopped
ports:
- "8080:80"
volumes:
- /www/drivetallerdeapps/data:/folder
- ./config.yaml:/home/filebrowser/config.yaml:ro
Nuevamente, nos ceñimos al ejemplo más básico de la documentación oficial. Es preferible comenzar con una versión simple y, si todo funciona correctamente y se necesita alguna funcionalidad adicional, consultar la documentación y experimentar a partir de ella.
En este ejemplo, el servicio FileBrowser se ha configurado para utilizar el puerto 8080 del sistema anfitrión. Este puerto se ha elegido únicamente a modo de ejemplo y puede modificarse según las necesidades de cada instalación.
En un escenario recomendado, FileBrowser no se expone directamente a Internet.
El acceso se realiza a través de un proxy inverso que escucha en los puertos
estándar 80 y 443. En este caso, el puerto 8080
se utiliza únicamente para la comunicación interna entre el proxy inverso y el contenedor
Docker, preferiblemente enlazado a la interfaz de loopback
(127.0.0.1).
Cuando el puerto se enlaza exclusivamente a
127.0.0.1, no es necesario abrirlo
ni en el firewall local de la instancia ni en las reglas de seguridad del proveedor cloud,
ya que el servicio no será accesible desde el exterior.
Nota importante: Docker gestiona sus propias reglas de
iptables para la publicación de puertos.
Esto implica que un puerto puede quedar accesible aunque no exista una regla explícita en UFW.
Por este motivo, UFW no debe considerarse una protección suficiente para servicios Docker
expuestos directamente. Cuando se inicia un contenedor que publica puertos, Docker crea
dinámicamente reglas de iptables en memoria,
sin necesidad de abrir manualmente el puerto en el firewall de la instancia.
En caso de no disponer de un dominio o subdominio y necesitar acceder al servicio
directamente mediante
http://IP_DEL_SERVIDOR:8080, será necesario:
127.0.0.1
En el caso concreto de esta instancia, se ha creado una regla de entrada específica para el puerto 8080 en la sección Network Security Group del panel de Oracle Cloud Infrastructure, permitiendo el acceso externo al servicio. En OCI, esta configuración se gestiona desde la sección Network Security Groups del VCN, donde se definen reglas de ingreso (ingress) indicando el protocolo (TCP), el puerto (8080) y el rango de origen (CIDR).
Para ampliar información, puedes consultar la documentación oficial de Oracle: Crear Network Security Groups en OCI . También dispones de una guía paso a paso en esta misma web donde se explica en detalle cómo configurar correctamente el firewall en Oracle Cloud Infrastructure.
Si utilizas otras infraestructuras en la nube, el procedimiento es muy similar:
Nota de seguridad importante: Este acceso directo solo se recomienda para entornos de pruebas o uso puntual y no es aconsejable en entornos de producción.
En las próximas partes de esta guía se explica cómo configurar el acceso al servicio de una forma más segura y profesional.
services:
tallerdrive:
.
ports:
# Opción 1: acceso directo (no recomendado en producción)
- "8080:80"
# FileBrowser es accesible directamente desde http://IP_DEL_SERVIDOR:8080
# Opción 2: acceso solo local (recomendado)
- "127.0.0.1:8080:80"
# FileBrowser solo es accesible desde el propio servidor y debe usarse junto a un proxy inverso
# (requiere dominio o subdominio para el acceso externo)
Una vez creada la estructura de directorios, el archivo de configuración y el
fichero docker-compose.yml,
ya es posible iniciar el servicio FileBrowser Quantum por primera vez.
Para ello, nos situamos en el directorio raíz del proyecto y ejecutamos Docker Compose en segundo plano:
cd /www/drivetallerdeapps
sudo docker compose up -d
Si todo es correcto, Docker descargará la imagen de FileBrowser Quantum (si no
está presente en el sistema) y creará el contenedor definido en el archivo
docker-compose.yml.
El parámetro -d indica que el contenedor se ejecuta en segundo plano
(detached mode), permitiendo que la sesión SSH continúe disponible.
Para verificar que el contenedor se ha creado correctamente y se encuentra en ejecución, se puede utilizar el siguiente comando:
sudo docker ps
La salida debería mostrar un contenedor con un nombre similar a: drivetallerdeapps y con el estado Up.
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
a1b2c3d4e5f6 gtstef/filebrowser:stable "/entrypoint.sh" Up 10 seconds 0.0.0.0:8080->80/tcp drivetallerdeapps
Si el contenedor no aparece o se detiene inmediatamente tras iniciarse, es recomendable revisar los logs para identificar el motivo del fallo.
Para consultar los mensajes generados por FileBrowser Quantum durante el arranque, se utiliza el siguiente comando:
sudo docker logs --tail 30 drivetallerdeapps
# Muestra las últimas 30 entradas del log del contenedor drivetallerdeapps
En un arranque correcto, se mostrarán mensajes indicando la carga del archivo
config.yaml, la inicialización
del servidor y la escucha en el puerto interno 80.
Si existe algún error de configuración (por ejemplo, un archivo YAML mal indentado o una ruta incorrecta), el contenedor mostrará mensajes de error claros y se detendrá automáticamente.
docker-compose.yml o config.yamlconfig.yaml dentro del contenedor/www/drivetallerdeapps/data
Si el contenedor se encuentra en ejecución, es posible comprobar el acceso local
al servicio desde el propio servidor. Para ello, se puede utilizar un navegador
web o una herramienta de línea de comandos como curl.
Desde el propio servidor:
curl http://localhost:8080
Si el servicio está funcionando correctamente, se devolverá código HTML correspondiente a la interfaz web de FileBrowser Quantum.
En este punto, el servicio ya está correctamente desplegado y funcionando a nivel local. En el siguiente paso se comprobará el acceso web desde Internet y el inicio de sesión en la interfaz gráfica.
Una vez verificado que el servicio funciona correctamente en local, el siguiente paso consiste en comprobar el acceso a FileBrowser Quantum desde Internet.
Si se ha configurado el acceso directo y el puerto 8080 está correctamente publicado en Docker y permitido en las reglas de seguridad del proveedor cloud, el servicio será accesible desde un navegador web mediante la siguiente URL:
http://IP_DEL_SERVIDOR:8080
Al acceder a dicha dirección, se mostrará la pantalla de inicio de sesión de FileBrowser Quantum solicitando usuario y contraseña.
Nota: Se recomienda cambiar la contraseña del usuario administrador inmediatamente tras el primer acceso desde el panel de configuración.
Tras iniciar sesión, accederemos a la interfaz principal de FileBrowser Quantum, donde se mostrará un mensaje de bienvenida junto con una advertencia indicando que la base de datos de usuarios ha sido creada de nuevo.
En esta versión mínima orientada a pruebas y aprendizaje, este comportamiento es normal, ya que todavía no se ha configurado un volumen persistente para almacenar la base de datos interna del servicio. Por el momento, este aviso puede ignorarse con seguridad.
Más adelante, en esta misma guía paso a paso, se mostrará cómo implementar un
archivo docker-compose.yml y un
config.yaml más completos, con
ajustes muy recomendables para entornos de producción, incluyendo la persistencia
de usuarios y configuraciones.
Si durante el proceso se han producido mensajes de error o se han realizado cambios en la configuración, antes de volver a levantar el servicio con los ajustes aplicados es recomendable asegurar un estado limpio del entorno. Para ello, se puede detener y eliminar el contenedor y recrearlo a partir de la configuración actual.
El siguiente comando detiene y elimina el contenedor indicado. Si el contenedor no existe o se produce algún error, Docker mostrará el mensaje correspondiente:
sudo docker rm -f drivetallerdeapps
Este comando no elimina:
Importante: Con la configuración mínima utilizada en este tutorial, FileBrowser Quantum no tiene persistido su almacenamiento interno de datos. Por este motivo, al eliminar el contenedor se pierden los usuarios creados, sus configuraciones y reglas de acceso, quedando únicamente el usuario administrador por defecto (admin / admin) al volver a iniciar el servicio.
No obstante, los archivos y directorios subidos o creados por los usuarios se
conservan, ya que estos se almacenan en el volumen de datos montado en
/folder (directorio
data en el sistema anfitrión). En este
ejemplo mínimo, la reinicialización afecta únicamente a la gestión de usuarios y
permisos, no al contenido de los archivos.
Tras eliminar el contenedor, el servicio puede iniciarse nuevamente con:
sudo docker compose up -d
Esta práctica resulta útil durante fases de pruebas o aprendizaje, ya que permite recrear el servicio desde cero de forma controlada. En entornos de producción es imprescindible configurar volúmenes persistentes adicionales para conservar usuarios y configuraciones.
Al iniciar sesión por primera vez con el usuario admin, desde el botón de Configuración (icono de la rueda dentada) se accede al menú Users Management. Desde este panel, de forma intuitiva, es posible crear y eliminar usuarios, asignar permisos (lectura, escritura, compartir, etc.) y definir un directorio inicial que delimita el alcance de visibilidad dentro del directorio de datos.
Asimismo, se puede editar el propio usuario admin para modificar su contraseña, directorios asignados u otros parámetros de seguridad.
Desde el panel de control de FileBrowser Quantum es posible:
Estas opciones permiten construir entornos mixtos, combinando usuarios aislados con recursos compartidos, aunque requieren una configuración más detallada para garantizar la seguridad y el control de accesos.
El usuario admin dispone de acceso completo al sistema, lo que permite realizar todas las operaciones desde el panel de control: gestión de archivos, creación y administración de usuarios, asignación de permisos y configuración avanzada.
Importante: por motivos de seguridad, se recomienda cambiar la contraseña del usuario admin inmediatamente tras el primer inicio de sesión.
Además, desde el panel de configuración se pueden ajustar otros parámetros generales, como el idioma predeterminado, opciones de interfaz, comportamiento del sistema y preferencias relacionadas con la experiencia de usuario.
Ten en cuenta que no es objetivo de esta guía detallar todas las posibilidades y opciones del panel de administración de FileBrowser. En este tutorial nos centramos principalmente en el despliegue y puesta en marcha del servicio, dejando la configuración avanzada y el uso detallado del panel para documentación específica o guías posteriores.
En lo que respecta a la interfaz de usuario, FileBrowser Quantum ofrece una experiencia moderna y fácil de usar. Por ejemplo, para subir archivos basta con arrastrarlos al interior de la ventana. Además, mediante el botón derecho del ratón se accede a distintas opciones, como renombrar, compartir o eliminar archivos y carpetas. A pesar de ser una aplicación totalmente gratuita, presenta un aspecto visual muy profesional.
El directorio de datos de FileBrowser Quantum (/www/drivetallerdeapps/data)
pertenece al usuario y grupo con UID/GID 1000, que es el identificador
utilizado internamente por el contenedor. Por este motivo, el usuario del sistema
ubuntu no dispone de permisos de escritura por defecto.
Este comportamiento es correcto y esperado. Si se intenta subir o editar archivos mediante WinSCP o una sesión SSH sin ajustar los permisos, se obtendrá un error de Permiso denegado.
La solución adecuada consiste en añadir el usuario utilizado para la conexión SSH (ubuntu en este ejemplo) al mismo grupo que utiliza FileBrowser (GID 1000) y ajustar el grupo propietario del directorio de datos para permitir la escritura compartida de forma segura.
En primer lugar, se comprueba qué grupo corresponde al identificador 1000:
getent group 1000
Salida típica en una instancia Ubuntu sobre Oracle Cloud:
opc:x:1000:
En este entorno, el grupo con GID 1000 se denomina opc. El nombre puede variar según la distribución o proveedor cloud, pero el identificador numérico (1000) es lo relevante.
sudo usermod -aG opc ubuntu
Tras ejecutar este comando es necesario cerrar y volver a abrir la sesión SSH para que los cambios de grupo tengan efecto.
sudo chown -R :opc /www/drivetallerdeapps/data
sudo chmod -R 775 /www/drivetallerdeapps/data
sudo chmod g+s /www/drivetallerdeapps/data
Con estos ajustes:
chmod 777.
El bit g+s (Set Group ID) aplicado sobre el directorio garantiza que todos los
archivos y subdirectorios creados dentro hereden automáticamente el grupo
opc, manteniendo la coherencia de permisos a lo largo del tiempo.
ls -ld /www/drivetallerdeapps/data
Resultado esperado:
drwxrwsr-x 2 opc opc 4096 Feb 11 22:38 /www/drivetallerdeapps/data
A partir de este momento, FileBrowser Quantum y WinSCP pueden operar simultáneamente sobre el mismo directorio sin conflictos de permisos.
Para dar un toque más profesional al servicio y, además, mejorar la seguridad, es recomendable asignar un dominio o subdominio al contenedor. De esta forma, la URL será mucho más amigable que acceder mediante una dirección IP con un puerto y evitaremos exponer directamente dicho puerto al exterior.
En este apartado se explica la secuencia de operaciones necesaria para asociar el dominio al contenedor utilizando el proxy inverso desde el panel aaPanel:
En este ejemplo real, desde el proveedor del dominio se añade un nuevo registro DNS de tipo A, que asociará un subdominio a la dirección IP pública de la instancia donde se ejecuta el servicio.
El procedimiento es muy similar en todos los proveedores de gestión de dominios. La siguiente captura corresponde a Hostinger, pero la configuración apenas varía en otros servicios. Al añadir en el registro A el nombre drive y la dirección IP del servidor, estamos creando el subdominio http://drive.tallerdeapps.com.
Los campos que debemos rellenar son:
Para comprobar que el dominio se resuelve correctamente, podemos usar el siguiente comando:
ping drive.tallerdeapps.com
Haciendo ping a drive.tallerdeapps.com [144.24.195.42] con 32 bytes de datos:
Respuesta desde 144.24.195.42: bytes=32 tiempo=11ms TTL=54
Respuesta desde 144.24.195.42: bytes=32 tiempo=10ms TTL=54
Respuesta desde 144.24.195.42: bytes=32 tiempo=11ms TTL=54
Respuesta desde 144.24.195.42: bytes=32 tiempo=14ms TTL=54
Estadísticas de ping para 144.24.195.42:
Paquetes: enviados = 4, recibidos = 4, perdidos = 0
(0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
Mínimo = 10ms, Máximo = 14ms, Media = 11ms
Ten en cuenta que la propagación DNS no es inmediata. Puede tardar desde unos segundos hasta varias horas, aunque normalmente se resuelve en poco tiempo.
En este caso, el servidor utiliza Ubuntu con aaPanel, por lo que se empleará este panel para crear el sitio web base sobre el que posteriormente se configurará el certificado SSL y el proxy inverso.
Si utilizas otro panel de control o una configuración manual con Nginx o Apache, el procedimiento será conceptualmente similar.
Primero se crea el sitio web básico, sin proxy, ya que es un requisito previo para la emisión del certificado SSL. Desde aaPanel en el menú Website pulsamos el botón Add site y rellenamos los campos:
Guardar los cambios con
Al crear un sitio web en aaPanel, el panel genera automáticamente una estructura mínima dentro del DocumentRoot, incluyendo archivos como index.html o 404.html. Este comportamiento es normal y necesario para que el dominio responda correctamente por HTTP.
Estos archivos cumplen una función importante en las fases iniciales de la configuración, especialmente para:
Una vez configurado el proxy inverso, el servidor web deja de servir contenido
desde el sistema de archivos local. En su lugar, cuando se accede al servidor
mediante la URL del subdominio (https://drive.tallerdeapps.com),
el proxy inverso redirige todas las peticiones entrantes al servicio interno
definido en el Target URL, en este caso
http://127.0.0.1:8080, que corresponde al puerto expuesto por el
contenedor.
Los archivos generados en el DocumentRoot seguirán existiendo y siendo necesarios durante la fase de validación del dominio y del certificado SSL, aunque no se utilicen para servir contenido una vez activo el proxy inverso.
En el punto en el que nos encontramos, si accedemos a http://drive.tallerdeapps.com, se mostrará la página mínima recién creada por aaPanel. Es importante fijarse en el detalle de que el acceso se realiza mediante HTTP; si intentamos acceder por HTTPS, el resultado en este momento no será el esperado, ya que el certificado SSL aún no ha sido configurado.
En este apartado se configura el certificado SSL para el dominio, lo que permitirá servir el sitio de forma segura mediante HTTPS. Este paso debe completarse antes de configurar el proxy inverso.
Antes de generar el certificado SSL, es imprescindible comprobar que el sitio responde correctamente por HTTP, ya que Let’s Encrypt necesita validar el dominio.
La página debe mostrarse correctamente y no debe forzar HTTPS todavía. En este punto es normal que el acceso por HTTPS no funcione.
Acceder desde aaPanel a:
Menú lateral → Website → seleccionar la web drive.tallerdeapps.com → botón SSL
A continuación, en el menú horizontal, seleccionar la pestaña Let’s Encrypt.
Configurar Let’s Encrypt con los siguientes valores:
La siguiente captura resume claramente esta secuencia de configuración:
Una vez emitido el certificado tras pulsar el botón Apply, se muestran la clave privada y el certificado.
Cambiamos a la pestaña Current Certs y activamos la opción de forzar HTTPS para que el servidor redirija automáticamente las entradas realizadas por HTTP hacia HTTPS.
Finalmente, pulsamos el botón Save para guardar la configuración.
Para comprobar que los archivos del certificado se han generado correctamente, ejecutar el siguiente comando en el servidor:
ls -l /www/server/panel/vhost/cert/drive.tallerdeapps.com/
total 8
-rw-r--r-- 1 root root 3607 Feb 8 09:26 fullchain.pem
-rw-r--r-- 1 root root 1704 Feb 8 09:26 privkey.pem
A partir de este momento, el dominio ya es accesible tanto por HTTP como por HTTPS. No obstante, seguirá mostrándose la página web mínima creada por aaPanel, ya que el proxy inverso aún no ha sido configurado.
Se recomienda reiniciar el servicio web para asegurar que la configuración del certificado SSL se aplica correctamente. En este ejemplo concreto no fue necesario, ya que el certificado se activó de forma inmediata.
Si utilizas aaPanel, puedes reiniciar los servicios web con el siguiente comando:
bt restart
Dependiendo del stack utilizado, puede ser necesario reiniciar Apache o Nginx de forma específica.
En este punto, el acceso por HTTPS ya funciona correctamente, pero el sitio seguirá mostrando la web mínima hasta completar el último paso: la configuración del proxy inverso.
Una vez configurado el certificado SSL, se procede a crear el proxy inverso, que permitirá redirigir el tráfico HTTPS hacia el servicio interno del contenedor, evitando exponer directamente el puerto de la aplicación.
En esta guía se utiliza el reverse proxy integrado en aaPanel, que permite una configuración sencilla y centralizada desde el panel de control. En entornos con un número elevado de contenedores Docker o infraestructuras más dinámicas, puede ser recomendable valorar el uso de soluciones como Traefik Proxy.
En este caso se ha optado por aaPanel por su enfoque más simple y controlado, adecuado para servidores con pocos servicios y configuración manual.
Desde aaPanel:
Website → drive.tallerdeapps.com → Reverse Proxy → botón Add Reverse Proxy
Configuración:
La siguiente captura muestra cómo queda la pantalla de configuración del proxy inverso:
En el campo Sent Domain se mantiene el valor por defecto $host. Esta variable indica al servidor web utilizado (Apache o Nginx) que reenvíe al servicio interno el mismo nombre de dominio utilizado por el cliente en la petición original.
De este modo, cuando se accede a https://drive.tallerdeapps.com, el proxy inverso redirige la petición a http://127.0.0.1:8080, manteniendo el dominio original en la cabecera Host. Esto permite que la aplicación del contenedor funcione correctamente detrás del proxy inverso.
Al guardar la configuración, el Reverse Proxy queda habilitado y ya es posible acceder a la aplicación desde la URL https://drive.tallerdeapps.com, utilizando el certificado SSL configurado previamente.
Si se pulsa sobre el icono del candado en la barra del navegador, cualquier usuario puede comprobar que la conexión es segura y que el certificado SSL es válido, lo cual aporta confianza y valor añadido al servicio.
La renovación del certificado SSL se gestiona automáticamente desde aaPanel. Al utilizar Let’s Encrypt, el panel programa la renovación del certificado antes de su fecha de expiración, sin necesidad de intervención manual.
Esta renovación automática funciona de forma independiente al proxy inverso y a los contenedores Docker, siempre que el dominio siga apuntando al servidor y el sitio web permanezca activo en aaPanel.
Hasta este punto, FileBrowser Quantum se ha desplegado utilizando la configuración mínima funcional descrita en la documentación oficial. Este enfoque es ideal para aprender, probar el servicio y validar su funcionamiento, pero no es el más adecuado para un uso continuado o semi-productivo.
En este paso se introduce una versión mejorada del despliegue, incorporando una serie de ajustes muy recomendables para entornos reales, sin perder la simplicidad del stack Docker utilizado hasta ahora.
Las mejoras que se aplican son:
En la configuración utilizada hasta ahora, FileBrowser Quantum almacena su base de datos interna dentro del propio contenedor Docker. Esto implica que, al eliminar o recrear el contenedor, se pierden los usuarios, contraseñas y configuraciones. En entornos de desarrollo o pruebas, comenzar desde cero puede resultar incluso ventajoso; sin embargo, en instalaciones más completas orientadas a un uso real o de producción, este comportamiento no es deseable, ya que provoca la pérdida total de usuarios y credenciales cada vez que el servicio se reinicia o se vuelve a desplegar.
Para evitar esta situación, es necesario montar un volumen persistente en la ruta interna del contenedor Docker donde FileBrowser Quantum almacena su base de datos:
/home/filebrowser/database
Esta ruta ya existe dentro del contenedor y no debe crearse manualmente en el sistema anfitrión. Mediante Docker Compose, se enlazará con un directorio del host, permitiendo que la base de datos de usuarios y configuraciones se conserve incluso si el contenedor se elimina o se vuelve a crear.
Al igual que se hizo con el directorio data, que alberga los archivos gestionados por los usuarios, se crea un nuevo directorio database destinado a almacenar la información interna del servicio: usuarios, contraseñas, configuraciones y reglas de acceso.
Para que este directorio pueda ser utilizado correctamente por FileBrowser Quantum, se asigna como propietario y grupo el usuario con UID 1000, que es el identificador utilizado por la aplicación dentro del contenedor. Los permisos se establecen en 755, una opción adecuada y segura frente al uso indiscriminado de permisos 777.
sudo mkdir -p /www/drivetallerdeapps/database
sudo chown -R 1000:1000 /www/drivetallerdeapps/database
sudo chmod -R 755 /www/drivetallerdeapps/database
Dado que el directorio de la base de datos debe ser accesible desde el
contenedor, es necesario declararlo como volumen persistente. Para ello, se
modifica el archivo
docker-compose.yml añadiendo
el volumen correspondiente:
services:
tallerdrive:
image: gtstef/filebrowser:stable
container_name: drivetallerdeapps
restart: unless-stopped
ports:
- "8080:80"
volumes:
- /www/drivetallerdeapps/data:/folder
- ./config.yaml:/home/filebrowser/config.yaml:ro
- /www/drivetallerdeapps/database:/home/filebrowser/database # Volumen persistente para la base de datos de usuarios
Por último, en el archivo
config.yaml se indica
explícitamente la ruta del archivo de base de datos que FileBrowser Quantum debe
utilizar:
server:
database: "database/database.db" # Ruta al archivo de la base de datos
sources:
- path: /folder # Do not use a root "/" directory or include the "/var" folder
config:
defaultEnabled: true
Al levantar el contenedor, en el momento en que se accede por primera vez con el
usuario administrador predeterminado (admin), FileBrowser Quantum
crea automáticamente el archivo de la base de datos en el directorio
/database del sistema anfitrión.
Este archivo será persistente ante reinicios o paradas del servicio y podrá
utilizarse para realizar copias de seguridad.
Nota: Antes del primer acceso, el archivo de base de datos no
existe, ya que se genera de forma automática durante la inicialización inicial
del servicio.
En entornos de producción o semi-producción, FileBrowser Quantum no debería exponerse directamente a Internet. El acceso debe realizarse siempre a través de un proxy inverso.
En esta versión mejorada:
El acceso externo se realiza únicamente a través del dominio configurado en el reverse proxy (aaPanel, Traefik, Nginx, etc.). En este ejemplo en https://drive.tallerdeapps.com
En el archivo mínimo de
docker-compose.yml
el apartado ports se encontraba configurado de la siguiente forma:
ports:
- "8080:80"
Aunque esta configuración funciona correctamente, no es la más adecuada, ya que el servicio queda expuesto en todas las interfaces de red del servidor, permitiendo conexiones desde cualquier dirección IP.
Para evitar este comportamiento, se debe restringir la publicación del puerto a la interfaz de loopback, sustituyendo la configuración anterior por la siguiente:
ports:
- "127.0.0.1:8080:80"
De este modo, Docker solo acepta conexiones locales al puerto 8080, que son las utilizadas por el proxy inverso. El servicio deja de estar accesible directamente desde Internet, aumentando significativamente el nivel de seguridad del despliegue.
Nota: Tras modificar el archivo
docker-compose.yml, al detener y
volver a arrancar el contenedor ya no será posible acceder directamente al servicio
utilizando la IP pública como URL. Esta configuración es intencionada y forma parte
de una buena práctica de seguridad.
Durante la fase de configuración, resulta recomendable relanzar la aplicación tras cada cambio realizado. De este modo, es más sencillo detectar errores de forma temprana y verificar que la nueva configuración se aplica correctamente.
FileBrowser Quantum permite personalizar algunos elementos visuales básicos
desde el archivo config.yaml,
lo que resulta útil para dar una identidad propia al servicio. Desplegar la
aplicación con un logo corporativo y un nombre de
aplicación personalizado aporta un valor añadido y una sensación
de producto más profesional.
El archivo del logo se almacenará en un directorio específico dentro de la raíz del proyecto. Por los mismos motivos que en el resto de archivos y directorios utilizados por FileBrowser Quantum, se asigna como propietario el UID 1000 y se establecen permisos 755, garantizando que la aplicación pueda acceder al recurso sin comprometer la seguridad del sistema.
sudo mkdir -p /www/drivetallerdeapps/branding
sudo chown -R 1000:1000 /www/drivetallerdeapps/branding
sudo chmod -R 755 /www/drivetallerdeapps/branding
En este ejemplo, el archivo del logo debe colocarse en la siguiente ruta del sistema anfitrión:
/www/drivetallerdeapps/branding/logo.png
Si el archivo se sube mediante WinSCP u otra herramienta externa, es habitual que quede con el usuario del sistema que realiza la subida como propietario. Por ejemplo:
ls -l branding/
total 16
-rw-rw-r-- 1 ubuntu ubuntu 14165 Feb 11 20:54 logo.png
En este caso, el archivo pertenece al usuario ubuntu, utilizado por WinSCP, y es legible tanto por el grupo como por otros usuarios. Dado que FileBrowser Quantum se ejecuta con el UID 1000, basta con que el archivo tenga permisos de lectura y que el directorio permita el acceso para que la aplicación pueda utilizarlo correctamente.
A continuación se muestra el archivo
docker-compose.yml actualizado,
sustituyendo al utilizado en los pasos anteriores.
services:
tallerdrive:
image: gtstef/filebrowser:stable
container_name: drivetallerdeapps
restart: unless-stopped
ports:
- "127.0.0.1:8080:80" # Cambio: interfaz de entrada limitada a loopback
volumes:
- /www/drivetallerdeapps/data:/folder
- /www/drivetallerdeapps/database:/home/filebrowser/database # Cambio: volumen persistente para la base de datos de usuarios
- /www/drivetallerdeapps/branding:/home/filebrowser/branding:ro # Cambio: volumen para gráficos personalizados (solo lectura)
- ./config.yaml:/home/filebrowser/config.yaml:ro
Cambios clave con respecto a la versión básica anterior:
description utilizada como etiqueta meta description para los motores de búsqueda.
Nota: La ubicación física de las imágenes de branding se define como un volumen en
docker-compose.yml. Para que la aplicación las utilice, es necesario además
referenciar la ruta y el nombre de cada imagen en el archivo config.yaml bajo
las propiedades correspondientes (favicon: y
loginIcon:), que se describen a continuación.
config.yaml – versión mejoradaPara que los cambios de branding se reflejen en el servicio es necesario añadir un apartado en el archivo config con la ruta del logo personalizado.
server:
database: "database/database.db"
sources:
- path: /folder # Do not use a root "/" directory or include the "/var" folder
config:
defaultEnabled: true
frontend:
name: "TallerDrive"
description: "Almacenamiento seguro de archivos en el servidor de Tallerdeapps.com"
favicon: "/home/filebrowser/branding/logo.png"
loginIcon: "/home/filebrowser/branding/logo.png"
Ya está todo listo para comprobar que los cambios se reflejan correctamente en el servicio. Si no se producen errores, a partir de este momento los datos de usuarios serán persistentes, el contenedor solo escuchará en la interfaz de loopback y se habrán aplicado las personalizaciones gráficas de la pantalla de inicio de sesión, así como el nombre del servicio.
Para aplicar la nueva configuración, es necesario detener el
contenedor actual y volver a levantar el servicio, tal y como ya se ha hecho
en varias ocasiones a lo largo del tutorial. Nota: docker compose up -d recrea automáticamente los contenedores si detecta cambios.
docker compose stop
sudo docker compose up -d
Al acceder nuevamente a la aplicación desde el dominio configurado en el proxy inverso, se observará que:
Con este paso, FileBrowser Quantum pasa de ser una instalación de pruebas a un servicio mucho más estable, seguro y reutilizable, manteniendo una arquitectura sencilla basada en Docker Compose.
Filebrowser Quantum es un proyecto en constante desarrollo, con actualizaciones frecuentes. Durante la elaboración de este tutorial, se publicaron nuevas versiones de la imagen Docker, y la propia aplicación lo indicó en pantalla mediante un mensaje. Es importante tener en cuenta que eliminar el contenedor y volver a crearlo no garantiza que se descargue la versión más reciente de la imagen.
Al tratarse de un proyecto joven y en continua evolución, es recomendable actualizar periódicamente la imagen a la versión estable más reciente disponible.
En Docker, las imágenes se descargan mediante el comando
docker pull. Si una imagen ya existe en local
con la misma etiqueta, Docker no comprueba automáticamente si dicha etiqueta apunta a una
versión más reciente en Docker Hub.
Las etiquetas genéricas como latest o stable no representan una versión fija de la imagen, sino un puntero que puede cambiar con el tiempo. Por este motivo, Docker no descarga automáticamente las actualizaciones asociadas a estas etiquetas, siendo necesario forzar explícitamente la comprobación de cambios.
La forma más recomendable y segura de actualizar la imagen consiste en forzar su descarga antes de recrear el contenedor. Ambos pasos pueden unificarse en un único comando, ya que Docker Compose detecta automáticamente los cambios y recrea el contenedor si es necesario:
sudo docker compose pull && sudo docker compose up -d
De este modo, si la etiqueta stable apunta a una nueva versión de la imagen, esta se descargará y el contenedor se recreará utilizando la versión actualizada, manteniendo intactos los datos, los usuarios y las configuraciones almacenados en los volúmenes persistentes.
En resumen, todos los datos de configuración y los archivos almacenados se mantienen persistentes, mientras que el servicio se actualiza a una versión más reciente y mejorada.
Si has seguido estos pasos hasta aquí, habrás desplegado en tu servidor —ya sea en local o en la nube— una potente aplicación de almacenamiento seguro de archivos, completamente basada en software libre. La arquitectura propuesta combina simplicidad, control y seguridad, utilizando Docker Compose y un proxy inverso para ofrecer acceso cifrado mediante HTTPS.
A partir de esta base, el proyecto puede evolucionar hacia escenarios más avanzados, incorporando nuevas funcionalidades o integraciones adicionales según las necesidades del entorno. La estructura modular empleada en este despliegue facilita este tipo de ampliaciones sin comprometer la estabilidad del servicio.
En definitiva, Filebrowser Quantum ofrece una alternativa autoalojada, flexible y totalmente controlada por el usuario, ideal tanto para entornos personales como profesionales.
Como complemento de esta guía, puedes consultar su continuación natural: Integración de OnlyOffice con Filebrowser Quantum , donde se explica cómo añadir la edición de documentos directamente desde el navegador.