Hoy vamos a hacer algo un poco diferente. Uno de los usuarios del blog me ha hecho en los comentarios una sugerencia que no podía dejar pasar.
¡Por fin! ¡Ya era hora de que me hicieras caso en algo! Al final vas a poner un artículo para poder ver el fútbol sin pagar ni un dur...
¡Nooooo! En esta web nunca nos vamos a dedicar a enseñar procedimientos de dudosa legalidad. Después de tanto tiempo ya deberías tenerlo más que claro.
Lo que vamos a ver en este artículo es cómo podemos aprovechar nuestro pequeño servidor para instalar un software muy curioso y que personalmente además me parece tremendamente útil. El usuario Kersis nos ha recomendado en esta entrada del blog algo muy interesante que podemos desplegar usando Docker Compose y que se llama Stirling-PDF.
¡Pues vaya...! Mi propuesta era mucho más interesante, que lo sepas.
Stirling-PDF es una herramienta en línea pero que podemos autoalojar en nuestro servidor y que nos va a permitir gestionar archivos PDF de diversas maneras. Podemos convertirlos, comprimirlos, fusionarlos, dividirlos y un largo etcétera. Nos va a permitir realizar todo esto de forma sencilla y rápida y sin necesidad de instalar software en el PC desde el que solicitemos estas acciones.
Pero hay un montón de páginas web que ya te hacen eso, como ésta o ésta otra. No es algo que suene demasiado atractivo tenerlo instalado en una raspberry ¿No crees?
Estás muy equivocado, Usuario Anónimo. El problema de la gran mayoría de páginas que te permiten modificar archivos PDF es precisamente que en las condiciones de uso se refleja que esas páginas se quedarán con tus PDF para todo lo que ellos vean conveniente. Puede ser que los usen para alimentar inteligencias artificiales o… vete tú a saber qué fines oscuros pueden tener.
La solución que vamos a proponer no va a mandar los archivos a servidores externos, sólo a nuestra raspberry. Ella se encargará de torturarlos convenientemente hasta que luzcan como nos interesa a nosotros. No hay riesgo de huída de datos ni nada por el estilo.
Bueeeeno, venga. Pero aún así hay programas para PC que te permiten hacer eso. Mira, yo uso uno que se llama PDF24 que permite hacer mil cosas a los archivos PDF y es completamente gratis.
Efectivamente: PDF24 es un software gratuíto que realmente está muy bien, pero no es libre. Puedes verlo en el punto 7 de su licencia de uso. Ya sabes que aquí lo queremos todo y si podemos quitarnos de encima todo el software que no sea libre lo haremos sin miramientos.
Stirling-PDF es completamente libre, por lo que tendremos absolutamente todo el código disponible para que lo podamos revisar (y así comprobar que efectivamente no hace nada oscuro con nuestros archivos PDF). Incluso, si lo necesitamos, podríamos modificar el código a nuestro antojo. Esto es mucho mejor que cualquier licencia propietaria.
Así que vamos al grano. Vamos a ver cómo podemos hacer la instalación de Stirling-PDF. Si habéis hecho alguno de los 19 tutoriales anteriores dedicados a Docker Compose, esto va a ser coser y cantar.
1. Preparación de la carpeta dónde vamos a instalarlo.
Como siempre, tened en cuenta que antes de realizar la instalación de Stirling-PDF debemos tener instalado Docker y Docker Compose en nuestro servidor. Tenéis instrucciones de cómo instarlar estos dos componentes haciendo click en este enlace (están en la parte final de ese artículo).
Una vez comprobado este tema, vamos a ir a la carpeta de nuestro usuario de la Raspberry y vamos a revisar si hemos creado previamente una carpeta llamada «docker
«. Si no la hemos creado, lo hacemos con los siguientes comandos.
cd ~
mkdir docker
Una vez que tengamos la carpeta creada, debemos crear dentro de ella otra carpeta llamada "stirling"
. Lo haremos con este comando.
mkdir stirling
En esa carpeta vamos a poner todo lo necesario para que funcione nuestro docker. En primer lugar crearemos la estructura de carpetas correcta que necesitaremos para almacenar todos sus datos. Lo haremos con estos dos comandos.
cd stirling
mkdir customFiles && mkdir extraConfigs && mkdir logs && mkdir trainingData
Con esto ya tendremos toda la estructura de carpetas lista.
2. Creación del archivo de configuración de docker compose.
Para iniciar la instalación de Stirling-PDF mediante Docker Compose vamos a necesitar un archivo de texto que le dirá al Docker Compose cómo desplegar la aplicación (qué imágenes debe usar, qué contenedores va a crear y cómo debe operar con las imágenes del docker). Empezaremos a crear el archivo con el siguiente comando:
nano docker-compose.yml
Una vez dentro del editor de texto "nano"
debemos pegar el siguiente contenido sin modificar absolutamente nada.
version: '3.3'
services:
stirling-pdf:
image: frooodle/s-pdf:latest
ports:
- '8123:8080'
volumes:
- $DOCKERDIR/stirling/trainingData:/usr/share/tessdata #Required for extra OCR languages
- $DOCKERDIR/stirling/extraConfigs:/configs
- $DOCKERDIR/stirling/customFiles:/customFiles/
- $DOCKERDIR/stirling/logs:/logs/
environment:
- DOCKER_ENABLE_SECURITY=false
- INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
- LANGS=$LANGS
Perfecto. Ahora sólo debemos guardar el contenido de este fichero con el comando Control + O
y salir del editor «nano» con Control + X
.
3. Definimos las variables de entorno.
El archivo docker-compose.yml
lo hemos copiado antes sin modificar, pero debemos ajustarlo a nuestra instalación de Stirling-PDF. Para ello lo mejor es definir algunas variables de entorno en un fichero aparte. Vamos a crear ese fichero con este comando:
sudo nano .env
Y vamos a poner en él el siguiente código (os aviso que ahora sí que vamos a modificar algunas cosas de ese fichero).
DOCKERDIR=/home/<tu_usuario>/docker
LANGS=es_ES
En este caso sustituiremos en el contenido del archivo .env
lo siguiente:
- <tu_usuario>: Pondremos la carpeta del usuario de nuestro servidor (para que el sistema pueda llegar a la carpeta «home» de nuestro usuario sin problemas.
- es_ES: Si sois usuarios de España, os corresponde este código, pero debéis poner el del país en el que estéis. Por ejemplo, debéis poner es_MX si estáis en México o es_AR si vivís en Argentina.
Una vez que hayamos editado correctamente este archivo, al igual que hemos hecho con el del punto 2, guardamos cambios con Control + O
y salimos del editor «nano» con Control + X
.
4. Despliegue del docker: Realizamos la instalación de Stlirling-PDF
Por fin toca realizar la instalación de Stirling-PDF propiamente dicha. Para realizarla, ahora simplemente ejecutamos el siguiente comando.
sudo docker-compose -p "stirling-pdf" up -d
Después de un ratito, el programa se tuvo que haber instalado correctamente, mostrando en pantalla algo similar a ésto.
Si queremos usarlo sólo en nuestra red local, el tutorial acaba aquí. Para acceder a vuestra instalación sólo tendréis que poner en el navegador la ip de vuestra raspberry terminada en «:8123», de esta forma.
http://ip.de.mi.raspberry:8123
De forma que obtendríais una página similar a ésta.
Desde aquí tendréis acceso completo a las características de Stirling-PDF, pero sólo desde la red local.
Pues ya me dirás qué ventajas puede tener el acceder a este sistema sólo desde la red local.
Principalmente seguridad. Si instalas esto, por ejemplo, en una empresa, puede que no te haga ninguna gracia que alguien pueda acceder al sistema desde fuera de tus instalaciones. Pero no te preocupes en exceso. Vamos a ver cómo hacer que este sistema esté disponible en internet y cómo podemos securizarlo para que sólo «los elegidos» puedan usarlo.
5. Habilitamos el proxy para acceder desde internet a la instalación de Stirling-PDF
Como hemos hecho en los anteriores artículos de esta serie, vamos a hacer esta instalación disponible en internet gracias a un proxy. Hemos visto en su momento cómo podemos instalar uno usando Nginx Proxy Manager, así que al igual que en los artículos anteriores vamos a usarlo nuevamente para esta instalación.
Como siempre, en la pantalla principal de Nginx Proxy Manager, pulsamos primero sobre Hosts
y luego sobre Proxy Hosts
.
Ahora nos vamos a la zona superior derecha y pulsamos en «Add Proxy Host
».
La siguiente pantalla la rellenaremos de esta forma:
- Forward Port: 8123 (Que es el puerto que hemos definido en el dockker-compose.yml)
- Domain names: ponemos un subdominio del dominio que tenemos contratado. Algo como
pdf.midominio.es
- scheme: http
- Forward Hostname / IP: ponemos la ip local del host dónde hemos hecho la instalación de Stirling-PDF.
Con esto, vuestra página ya es accesible por «http
» en la dirección que habéis puesto en «domain names
«. Pero si queremos hacerlo disponible por «HTTPS
«, entonces debemos hacer un pequeño ajuste a mayores. En la línea del proxy que acabamos de crear, pulsamos en los tres puntitos que hay a la derecha del todo y en el menú que se despliega pulsamos sobre la opción «Edit
«.
Nos vamos al llamado «SSL Certificate
» y pulsamos sobre la opción «Request a new SSL Certificate
». Aseguraos de dejar marcadas también las opciones «Force SSL
» y «HTTP/2 Support
» . Cuando hayáis revisado todo, pulsad sobre el botón «Save».
Con esto ya podéis acceder a vuestra instalación de Stirling-PDF a través de internet, usando vuestro propio dominio.
Uhmmm... ya veo... pero no estoy convencido del todo. Mola poder acceder a esto desde cualquier parte, pero si mi página empieza a ser "famosa" puede que se conecten más personas a ella y me saturen el servidor haciendo sus conversiones de PDF, y al fin y al cabo la quiero para usarla yo y mis amigos. Tengo sentimientos encontrados y dudas existenciales con esta instalación. Ahora mismo vivo sin vivir en mi. ¿Publicarla o no publicarla en internet? Esa es la cuestión
Tienes razón. En el siguiente punto vamos a intentar añadirle un puntito extra de seguridad para que nadie pueda entrar desde internet en tu instalación sin pedirte permiso.
6. Añadimos una contraseña a nuestra instalación.
Vamos a hacer una pequeña modificación en el punto 5 que acabamos de realizar para que cuando entremos a nuestra instalación de Stirling-PDF la página web nos pregunte un usuario y una contraseña. Sólo si conocemos esa combinación, nos dejará entrar y usar nuestro sistema.
Para habilitar esta opción, nos vamos a la página principal de nuestro Nginx Proxy Manager y en el menú principal pulsaremos ahora en «Access Lists
«. En la pantalla que nos sale pulsaremos en»Add Access List
«.
En la siguiente ventana que nos sale, en la pestaña «Details
«, vamos a marcar la opción «Satisfy Any
» y vamos a darle un nombre a la lista de accesos que vamos a crear. Lo más sencillo es llamarla «stirling
«. Tranquilos: llamarla así no tiene implicaciones en la seguridad del sistema. Esto no es aún ninguna contraseña ni nada parecido.
En la misma ventana, vamos a cambiar a la pestaña «Authorization
«. Ahí vamos a pulsar la tecla «Add
» tantas veces como usuarios queramos que entren a nuestra instalación de Stirling-PDF.
A cada uno le asignamos un usuario y una contraseña y por último pulsamos el botón «Save
«
Ahora volvamos a «Hosts
» –> «Proxy Host
» para editar el proxy que hemos creado. En la parte inferior de los ajustes del proxy, en «Details
«, en la zona de «Access List
«, cambiamos el desplegable que por defecto pone «Publicly Accessibe
» por la opción que hemos llamado «stirling
» y guardamos cambios.
Ahora, cada vez que queramos entrar en la página web que hemos desplegado de «Stirling-PDF», la página web va a pedirnos credenciales. Si coinciden con alguno de los usuarios que hemos definido nos dejará entrar, y si no nos quedaremos con las ganas.
Oye, y este punto 6 ¿Puedo aplicarlo a los tutoriales que hemos hecho anteriormente? A lo mejor estaría bien poder proteger alguna de las webs que hemos desplegado.
Por supuesto. Ya sabes usar la herramienta. Ahora aplícala sabiamente, mi joven Padawan.
7.- Actualización de nuestra instalación de Stirling-PDF.
Esta parte seguro que os la sabéis. Para actualizar un docker como éste, lo mejor es hacer un pequeño script que podamos ejecutar a conveniencia. Podemos crearlo con este comando.
nano actualizar.sh
Luego, le añadiremos el siguiente código.
cd /home/<tu_usuario>/docker/stirling
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
Acuérdate de sustituir <tu_usuario>
por el usuario del linux de tu servidor para que el script pueda ejecutar los comandos en la ruta correcta.
Una vez terminada la edición, pulsaremos Control + O
para guardar cambios y Control + X
para salir del editor «nano». No os olvidéis de teclear luego este comando para hacer el script ejecutable.
sudo chmod +x actualizar.sh
Con esto, para actualizar la instalación de Stirling-PDF sólo debemos escribir desde la carpeta en la que hemos puesto ese archivo el siguiente comando:
sudo ./actualizar.sh
Pero si en la carpeta «docker» tenemos más dockers activos, podemos abreviar si en el interior del archivo ponemos este otro código en lugar del que os he puesto antes.
#!/bin/bash
# Actualizo el sistema operativo
sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get autoremove -y
sudo apt-get autoclean -y
# Definimos el directorio base
BASE_DIR="/home/<tu_usuario>/docker"
# Recorro todas las subcarpetas dentro del directorio base
for dir in $BASE_DIR/*; do
if [ -d "$dir" ]; then
echo "Procesando $dir ..."
cd "$dir"
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f
fi
done
# Ya he actualizado todo. Ahora reinicio el sistema.
sudo shutdown -r now
Acuérdate de nuevo de cambiar <tu_usuario>
por el usuario correcto de tu instalación.
Este código recorrerá todas las carpetas que hay dentro del directorio «docker» e irá actualizando y levantando todos los docker uno por uno. Tened especial cuidado si tenéis algún Docker en esa carpeta que no deba estar desplegado, porque la ejecución de este script lo va a intentar desplegar.
Y con ésto es todo. Dado que esta instalación está completamente basada en software libre y ocupa una cantidad de recursos despreciable en nuestra raspberry, puede que sea de interés para muchos de vosotros. ¿Qué os parece este software? ¿Estáis usando ahora mismo alguna otra alternativa? Espero atento vuestros comentarios.
Genial! Voy a probarlo, me parece muy interesante ir descubriendo opciones de NGINX a la vez.
¿Habría alguna manera de hacer copias de seguridad de todo el sistemas de archivos de la raspberry a un PC en local? He probado con rsync pero parece que no se llevan bien ambos SO.
Por cierto, creo que hay una errata en el punto 5, ¿puede ser? Concretamente en:
Forward Hostname / IP: ponemos la ip local del host dónde hemos hecho la instalación de Paperless-ngx. (Sería Stirling-PDF)
Un saludo
Efectivamente había un error en esa línea. Ya está corregido.
Hemos desarrollado el tema de las copias de seguridad en este artículo.
https://www.flopy.es/piserver-con-docker-parte-11-como-duplicar-y-copiar-un-docker/
Las copias de seguridad hacia windows… depende de cómo quieras plantearlas. Si las quieres hacer a mano (seguramente sea así si es un PC local), te diría que no te complicaras. Lo mejor es instalar en el PC un software como WinSCP. Desde ese programa puedes conectarte por ssh a la raspberry y recoger todo el contenido de la carpeta «docker». Con eso ya tendrías hecha la copia.
Si quieres automatizarlas, tendrías que tener el PC encendido todo el rato, una carpeta compartida en el PC, instalar el cliente de samba en la raspberry… etc… pero no creo que los tiros vayan por ahí. Si me concretas un poco cómo quieres hacerla a lo mejor podemos definir un poco mejor el procedimiento.
Un saludo.
Funcionando! Gracias Marcos y resto de usuarios!
Instalado y funcionando. Gracias Marcos y Kersis. Pero a pesar de haber puesto LANGS=es_ES en el archivo .env la página se genera en inglés. Parece ser que la variable LANGS sólo define el juego de caracteres a usar, en este caso el español, pero no tiene ninguna influencia en el idioma en el que se muestra la web.
Para que la página se genere en español he entrado en la ruta /home/»mi_usuario»/docker/stirling/extraConfigs y he modificado el archivo settings.yml con sudo nano settings.yml. En la sección system: hay una variable llamada defaultLocale que en mi caso estaba en en-US. Lo he cambiado a es-ES , he parado el docker y lo he reiniciado y ya sale la página en español. Como ese volumen es persistente queda guardado entre arranques. Por si a alguien le interesa.
Buenas!! He oido hablar sobre un contenedor llamado Homebrew, crees que seria interesante? Esta pensado para domotica, pero creo que por ejemplo, puedes añadir a la app de domotica de Apple aparatos que no se podria de forma nativa