Hoy (o más correcto, más o menos una semana antes), es un día triste para mí, porque voy a desmantelar (ya he desmantelado) el servidor original de mi homelab. El servidor original, que era el inicio de mi viaje. En este aporte discutiré la varias funcionas el servidor ha hecho en el homelab, y cómo he movido todo a una máquina virtual.

Era un OptiPlex 330, una computador ni gigante ni muy pequeño. Entró mi rack de servidores sin problemas, y ha estado funcionando muy bien por el año pasado. Pero, es posible que tenga una pregunta: ¿Qué hacía?

Pues, tenía dos funcciones en el homelab: un servidor de MySQL (especificamente MariaDB) para todos los servicios, y un reverse proxy para consolidar todos mis servicios en una manera "facilmente" (más sobre esto en breve). Tenía Debian 9, pero es posible que lo actualice a Debian 10. No recuerdo, pero posiblemente checaré. No configuré mucho, pero recordé cuando MySQL se rompió después de una acutalización y debía arreglarlo y era muy complicado. Pero no era frecuentemente que algún rompió. Solamente había en mi rack, haciendo lo que debía hacer y funcionó bien.

Antes, era un servidor con CentOS 7. Era mi NAS, con solamente 1 TB de almacenamiento, con un servidor de SMB y con Nextcloud, que era la primera vez que utilicé Nextcloud (pero no era mi final). Recuerdo que tenía problemas porque instalé PHP 5.x en vez de PHP 7.x y tenía muchos problemas en actualizarlo. Tenía dos disquetes, y el disquete de iniciar no era tan grande y pienso que también tenía problemas a causa de esto cuando traté de actualizar PHP. Era mi primera experiencia en mi homelab, y pienso que puedo recoradar las dificultades que tenía cuando traté de instalar Nextcloud. Actualmente, pienso que fallé muchas veces antes de tener éxito, porque no entendía lo que estaba haciendo. Inició todo, porque aprendió mucho más. Pienso que ahora si estuviera en la misma situacion, pudiera instalar Nextcloud muy rápidamente.

Entonces, ¿por qué decidió desmantelarlo? Pues, la respuesta es fácil. Quiero crear espacio en mi rack para añadir servidores más fuertes. Todos mis servidores son muy viejos, y tengo muchas tarjetas gráficas que querría usar... pero no tengo una computadora con tres ranuras para tarjetas. Pero imagine: una computadora que tendría tres, o más ranuras para tarjetas gráficas sería muy grande. Y también no tengo planes para añadir solamente un servidor. Tengo planes para dos, o aún tres (pero tres no es muy probable). Y, desafortunadamente, no tendré espacio suficiente para colocar dos servidores nuevos y también guardar los servidores viejos, los OptiPlexes (actualmente, tengo dos OptiPlexes, pero los dos no son originales, solamente es mi OptiPlex 330 que es original).

Ahora, habemos llegado a la parte más interesante: cómo he desmantelado. Porque solamente había podido copiar el disquete a mi servidor de máquinas virtuales, con Debian 9, y el reverse proxy original, y MySQL. Pero tenía un problema. En realidad, nginx no es muy divertido para configurar, y no quería crear archivos y archivos de configuración con información que era más o menos el mismo en todos los archivos. Y para arreglar esta situación, finalmente, traté de usar NixOS. NixOS, la sístema operativa donde solamente tiene que tener un archivo, que se llama configuration.nix que puede replicar la misma configuracion muy facilmente en cualquier servidor que quiere, porque NixOS es declarativo, o algo.

Pero no es el fin de las ventajas de NixOS. Porque configuration.nix es la configuración para más o menos toda la sístema, su configuración para Nginx, SSH, MySQL o cualquier programa está en este archivo. Y NixOS tiene una lenguaje de programar y es tan poderoso que ahora para añadir un servicio al reverse proxy, solamente debo añadir una linea a configuration.nix y ejecutar sudo nixos-rebuild switch. Y es todo. Antes, tenía que crear un archivo con el nombre de mi sub-dominio y después crear un enlace simbólico que actualmente nunca funciona porque estaba perezosa y no quería teclar la ruta completamente a mi archivo de configuracion como esto: ln -s /etc/nginx/sites-available/sub.dominio.aquí /etc/nginx/sites-enabled/sub.dominio.aquí y los enlaces simbólicos no funcionó hasta decidí que no podía estar perezoso y debía teclar la ruta completamente. Y no es todo... muchas veces, también, debía copiar una configuración de otro servicio para mi servicio nuevo y configurarlo con las direcciones IP o un dominio internal... y si quería usar un dominio internal, debia modificar /etc/hosts y copiar todo.

La mayoria de estas dolores he resolvido con NixOS. Utilizando este artículo en el NixOS wiki, especialmente el parte titulado «Hardened setup with TLS and HSTS preloading», con el sección de virtualHosts, he facilitado añadir más servicios. Claro, he cambiadio el ejemplo mucho para que funcione para mí, pero es similar, y si quiere hacer algún similar este artículo sería muy útil. No diré que completamente entiendo la lenguje de Nix pero probablemente debo ir y aprenderlo porque me olvidé. Sí, no he completamente resolvido el problema con /etc/hosts pero por lo menos mi configuración está en configuration.nix, gracias a networking.extraHosts.

NixOS funciona super bien. Pero es mi Nextcloud hoy. No entiendo completamente, pero es genial, magia. Un día, NixOS despúes será mi Nextcloud hoy, y había un desafío nuevo en mi homelab. Pero hasta ese tiempo, hay mucho para aprender. Quizás habrá unos aportes sobre NixOS, el conquistador de mi servidor original.