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.
Antes de empezar vamos a resumir un poco todo lo que hemos hecho hasta ahora en nuestro pequeño servidor Linux:
Parte 1: Hemos instalado el sistema operativo a una Raspberry
Parte 2: Hemos explicado qué es Docker y sus componentes, y hemos instalado en nuestro equipo Docker y Docker compose.
Parte 3: Hemos instalado nuestro primer Docker: Pi-hole
Parte 4: Hemos explicado unos cuantos comandos útiles para resolver problemas y gestionar nuestros Dockers.
Parte 5: Le hemos instalado un VPN a nuestra Raspberry (Wireguard) con un gestor web de usuarios incluído
Parte 6: Hemos aprendido a desplegar Dockers descargados de internet por nuestra cuenta, y con la excusa hemos desplegado aMule y Transmission.
Parte 7: Hemos instalado Plex para tener una especie de Netflix personal.
Parte 8: Hemos aprendido todo lo referente a servidores web instalados sobre docker.
Parte 9: Hemos instalado Proxy Nginx Manager que nos servirá de proxy en los siguientes artículos.
Parte 10: Hemos instalado Navidrome para tener una especie de Spotify personal.
Parte 11: Hemos aprendido a duplicar y hacer copias de seguridad de nuestros Dockers.
Parte 12: Hemos instalado Nextcloud para crearnos una nube privada
Parte 13: Hemos instalado Vikunja para tener un gestor de tareas personal.
Y aún seguimos instalando más y más cosas interesantes. Ahora toca culturizarse un poco. Vamos a instalar una herramienta de gestión de libros electrónicos a la que vamos a poder acceder a través de internet, invitar a nuestros amigos y familia y con la que podemos tener nuestros libros tremendamente organizados y ordenados. Vamos a instalar Calibre web.
¡Eh! ¡Eso de Calibre a mi me suena! Cuando me compré el lector de libros digitales creo que lo instalé en el ordenador.
Efectivamente hay una aplicación para escritorio llamada Calibre. Lo que vamos a instalar es algo así como la parte Web de ese software. En todo caso la aplicación Web y la de escritorio están enfocadas de forma distinta. La aplicación de escritorio tiene más funcionalidades que la versión Web, pero la versión Web permite acceso remoto y es multidispositivo, mientras que la aplicación de escritorio sólo puede vivir en el dispositivo en la que está instalada.
Vamos a seguir en esta instalación el mismo esquema de siempre, y os adelanto que es una instalación de las sencillitas, así que a estas alturas no debería complicarse. Vamos allá.
En el primer tutorial que hemos hecho en esta serie, hemos visto cómo podemos instalar correctamente el último sistema operativo a una Raspberry. El segundo artículo era mucho más teórico y en él hemos aprendido qué es Docker, para qué sirve, ventajas que tiene y también lo hemos instalado en nuestra Raspberry (o en nuestro Debian, que también hemos enseñado cómo se instala en ese sistema), de forma que el dispositivo ha quedado preparado para poder añadirle todos los Dockers que queramos.
Ahora vamos a empezar la juerga. En este artículo vamos a instalar nuestro primer Docker, y recordad que aunque estoy orientando este tutorial a Raspberrys, es aplicable también a cualquier dispositivo que use una distribución Linux derivada de Debian (Ubuntu Server, por ejemplo). El objetivo es tener un servidor doméstico que nos haga un montón de cosas en nuestro hogar, y creo que empezar instalando «Pi-Hole» es un buen comienzo.
Me suena eso de Pi-hole. ¿No lo habíamos instalado ya en otro artículo?
Sí Usuario Anónimo. Lo habíamos instalado en este tutorial, pero de forma tradicional, sin usar docker. En este caso vamos a usar esta tecnología para usarlo y mantenerlo «encapsulado», de forma que no interfiera en otros procesos. En concreto usaremos docker compose tanto en este como en los siguientes tutoriales. Usaremos esta primera instalación como guía principal para los artículos posteriores en los que no nos vamos a parar tanto en explicaciones.
Para los que no lo conozcan, Pi-hole es un programa que actúa en nuestra red como servidor de DNS, pero es un servidor de DNS muy especial, porque lo que hace es quitarnos la publicidad de las aplicaciones de todos los dispositivos de nuestro hogar. Incluso en dispositivos en los que es imposible instalar un bloqueador de publicidad (como en una televisión) nos permite que el dispositivo no muestre publicidad en ningún momento. Es más: imagínate que invitas a alguien a tu casa y le das la contraseña del WiFi. Por el simple hecho de conectarse a tu WiFi, esa persona ya estaría navegando sin publicidad.
Pues sí que mola. Pues hala: dinos ya cómo se instala que tú en seguida te dispersas.
Tal y cómo dije, vamos a seguir la misma estructura en las instalaciones posteriores, así que tened los puntos principales de este artículo siempre bien claros.
Hemos visto en nuestro último artículo cómo instalar la última version de Raspberry Pi OS en una Raspberry, de forma que quede lista para funcionar como servidor. A partir de ahora vamos a ver cómo instalar varios programas que harán que nuestra Raspberry se convierta en un magnífico servidor doméstico. Sin embargo vamos a instalarlos de una forma un poco especial. En lugar de instalar los programas directamente en el sistema operativo, vamos a usar Docker para meter cada uno en un contenedor separado para que…
Espera, espera. ¿Por qué te complicas tanto la vida? ¿Para qué me va a interesar hacer cosas raras con los programas que vamos a instalar si al final el objetivo es simplemente que funcionen? ¿No podemos simplemente instalarlos y ya está? Hay que ver cómo te gusta retorcer las cosas, majete.
Si no tuviera sentido no estaría aquí dando la chapa y estaría escribiendo sobre otra cosa, Usuario Anónimo. En realidad, sobre todo en servidores, tiene mucho sentido usar Docker en lugar de instalaciones directas de los programas. En este artículo vamos a ver, en primer lugar las ventajas de usar Docker respecto a hacer instalaciones directas para montar un servidor. Luego analizaremos qué tipos de Dockers son los más adecuados para su uso en pequeñas instalaciones y por último aprenderemos a instalar Docker tanto en una Raspberry como en un servidor Debian.
Vale... lo que quieras, pero ¿Qué demonios es eso de docker?
Tiene razón. Debería haber comenzado por ahí. Hazte la imagen mental de que Docker es como un conjunto de archivos empaquetados, sólo que con la característica de que tienen todo lo necesario para que funcione la aplicación que quieres usar (y cuando digo todo lo necesario me refiero a TODO. Archivos, dependencias, librerías, configuraciones, etc…). En lugar de hacer la instalación de la aplicación, haces la instalación de ese docker en concreto, y si lo has hecho correctamente, todo debería funcionar exactamente igual que haciendo la instalación de la forma «tradicional».
Que sí. Vale. Hurra por empaquetar todo, pero ¿Eso de qué me sirve? Si me estás diciendo que al final va a funcionar todo igual. Sigo preguntándome para qué te complicas tanto la vida.
Te voy a poner varios ejemplos en los que vas a ver claro que instalar de esta forma las aplicaciones en un servidor tiene su utilidad.
1) Ventajas de usar Docker en un servidor.
Caso 1: Aplicaciones separadas que requieren versiones diferentes de componentes del sistema (Gestión de dependencias)
Imagina que, por ejemplo, quieres instalar en un único equipo dos aplicaciones que actúen como servidores independientes, por ejemplo, un servidor de Nextcloud y un servidor de OSTicket (podrían ser otro tipo de servicios. Esto sólo es un ejemplo). Puede que la configuración que requiera uno de estos servicios sea diametralmente opuesta a la que requiere el otro. Por ejemplo, puede que uno necesite un componente de linux superior a la versión 8, pero el otro sólo pueda trabajar con versiones inferiores a la 7. En este caso no podrían coexistir las dos instalaciones en el mismo sistema. Docker resuelve este problema, porque cada una de las instalaciones se convertiría en completamente independiente de la otra al estar empaquetadas en dos contenedores distintos. Cada una podría tener sus componentes y ser incompatibles los de un contenedor con el otro, pero funcionar de forma independiente. Cada contenedor sólo debe preocuparse en satisfacer las dependencias de sus componentes, sin preocuparse de las dependencias de otros contenedores que corran en el mismo sistema operativo base.
Caso 2: Paradas, cuelgues o reinicios controlados de una única aplicación.
Imagina ahora que tenemos de nuevo dos aplicaciones en el mismo hardware. Ambas usan el servidor Apache y hemos hecho cambios en una de ellas, pero hemos metido la pata hasta el fondo y ahora, por el motivo que sea, el servicio apache no arranca. Si hubiéramos hecho la instalación de las dos aplicaciones sobre el mismo servidor sin «empaquetarlas», ambas se verían afectadas por la incidencia y ninguna de las dos funcionaría. Con Docker, al correr cada una de forma independiente en dos servidores Apache independientes, lo que hagamos en una no interfiere nunca en lo que hagamos en la otra, por lo que nos podemos equivocar y estropear uno de los dockers pero el otro no se vería afectado en absoluto. Se habrá caído el primero y lo deberemos arreglar, pero el segundo ni se entera. Es más… podemos parar o reiniciar completamente uno de los Dockers y el otro simplemente seguiría funcionando sin preocuparse de lo que hubiera pasado fuera de su empaquetado. Al final, la única forma en la que un contenedor de Docker pueda afectar a otros es que esos contenedores compartan recursos (almacenamiento o tráfico de red). Por ejemplo, si un contenedor se pone a escribir datos en el disco sin parar y llena el disco, evidentemente puede poner todo el sistema en riesgo, pero supongo que entiendes que es un caso muy concreto y obvio.
Caso 3: Rollbacks controlados..
Ahora imagina que sólo tenemos una aplicación. Le hemos realizado una actualización pero descubrimos que esta nueva versión tiene un fallo crítico o no es compatible con ciertos componentes del sistema. En un entorno sin Docker, volver al estado anterior (rollback) puede llegar a ser complicado y arriesgado. A lo mejor tenemos que revertir cambios en todo el sistema y podríamos estar afectando a otras aplicaciones. Sin embargo, con Docker, podemos realizar rollbacks de manera controlada y aislada. Podemos volver a una versión anterior de la imagen de Docker de esa aplicación específica sin afectar otras partes del sistema. Esto nos daría tranquilidad a la hora de deshacer cambios (sabríamos que aunque tocáramos esa aplicación, el resto del sistema se mantendría estable).
Caso 4: Portabilidad
Si hemos desplegado nuestra aplicación en Docker, podremos llevarla junto con todas sus dependencias a cualquier otro equipo que tenga Docker instalado, ya sea en la nube o en un servidor local. Y esto en particular es algo que está muy bien. Por ejemplo, podemos probar nuestra aplicación en un entorno local y si vemos que funciona correctamente, luego podemos migrarla a entorno de producción o a una máquina en la nube sin tener que preocuparnos por configuraciones complicadas o diferencias en el sistema operativo principal de la máquina. Por ejemplo, podemos pasar una aplicación que ya está funcionando en un Debian a un Red Hat o viceversa. Y de nuevo… ¡¡Esto mola mucho!!
Caso 5: Escalabilidad
Esto es algo que viene derivado del caso 4. Imaginaos que tenemos una aplicación en producción (por ejemplo una página web). Funciona perfectamente, pero vemos que nuestra página ha tenido un éxito inusitado y cada vez entra más y más gente y nuestro servidor empieza a no ser suficiente para tramitar tantas peticiones. Las solicitudes de nuestros usuarios empiezan a ir más lentas e incluso se caen. La portabilidad de Docker nos permitirá migrar todo a un servidor más rápido de forma sencilla, otorgándole más recursos en un nuevo sistema.
Y para los más técnicos sólo una puntualización sobre este último punto: para escalar de forma eficiente hay más herramientas que facilitan esta labor y que no vamos a explicar en este artículo (como kubernetes). De momento no vamos a entrar en ellas.
Podría poner más ejemplos, pero creo que a grandes rasgos se entiende que en un servidor mola mucho tener las aplicaciones dockerizadas. Te da mucha libertad a la hora de cambiar la aplicación de servidor y el hecho de tener dependencias separadas puede resolver muchos problemas.
Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.