Armé mi nube privada y te muestro como hacerlo

Publicado el 03-12-2023 |

Autor: Pablo Caamaño

El almacenamiento en la nube es una solución muy práctica para tener accesible nuestra información en cualquier lugar y momento. Sin embargo, así como aporta soluciones, trae varias contras a tener en cuenta: el acotado espacio, los costos y no menos importante, la privacidad.

Como buen argentino tratando de ahorrar hasta el último dólar gastado, me propuse solucionar esto de forma casera. El proyecto consiste en armar un servidor propio, aprovechando alguna computadora o notebook que no se esté usando. De esta forma ahorrar costos de servicios cloud, ganar control y privacidad de la información y de paso divertirme. Si te resulta interesante la idea, te invito a seguir leyendo hasta el final.

Objetivo

Como dije anteriormente, la idea es aprovechar algún equipo que no esté en uso. No importa si no es muy potente, ya que como veremos más adelante, no se requiere grandes especificaciones de hardware. Lo importante es contar con un disco con buen espacio, ya que este determinará la cantidad y tamaño de los archivos a almacenar. También es conveniente tener en cuenta que cuánto más pequeño sea el equipo a usar, menos va a molestar en el hogar. Para este caso es muy util un mini-pc similar a los Intel NUC o una notebook que no se use. Si se opta por armar una PC convencional, lo recomendable es que sea lo más pequeña posible.

Para mi servidor voy a ensamblar una PC reutilizando componentes y metiendo todo en este gabinete que es relativamente pequeño. Para mi servidor voy a ensamblar una PC reutilizando componentes y metiendo todo en este gabinete que es relativamente pequeño.

El objetivo inicial es armar un servidor que solo necesite el cable de alimentación eléctrica, instalar algún servicio o aplicación que permita un fácil uso y administración, del mismo modo que permita integrar la mayor cantidad de dispositivos de la red (PCs, Smartphones, etc).

Luego de probar diferentes softwares como entorno de aplicaciones que permite replicar las funcionalidades y experiencia de otras apps conocidas. Solo por mencionar algunas de las posibilidades mencionar que se puede instalar “Photos” donde se van a poder ver las imágenes que subamos como si se tratara de Google Fotos. Aplicaciones para consumir los videos subidos, chat privado entre los usuarios generados en el servidor, calendario privado con posibilidad de integrarse con los de Google y Microsoft, aplicaciones de notas y tareas, entre muchas cosas más. Incluso la posibilidad de instalar un Office Cloud privado y colaborativo entre los usuarios del servidor.

Otro factor importar es que es accesible desde cualquier tipo y formato de dispositivo que se pueda conectar a la red. Para PC se cuenta con una web app con una interfaz muy amigable y para acceder desde sistemas móviles se cuenta con aplicaciones nativas para Android.

La funcionalidad más importante que aporta Nextcloud, es que apenas me conecto a la red de mi casa sube automáticamente las fotos que haya tomados sin recortes de calidad y tamaño. La funcionalidad más importante que aporta Nextcloud, es que apenas me conecto a la red de mi casa sube automáticamente las fotos que haya tomados sin recortes de calidad y tamaño.

Requisitos

Antes de arrancar con la instalación y configuración es recomendable repasar el hardware y software necesario para armar el servidor. Según la documentación oficial de Nextcloud, para una instalación nativa se requiere procesador de 32 o 64 bits y 256 o 512MB de RAM como mínimo. No obstante, recomiendo estar por arriba de estos mínimos, pero mejor repasar punto por punto los requisitos:

En mi servidor personal voy a usar un procesador Pentium de 2 núcleos 4 hilos que considero de sobra para las pocas conexiones que va a tener mi proyecto. En mi servidor personal voy a usar un procesador Pentium de 2 núcleos 4 hilos que considero de sobra para las pocas conexiones que va a tener mi proyecto.

Memoria y Procesador

Habiendo hecho pruebas previas con el software del proyecto, recomiendo que como mínimo se cuente con un procesador de 64bits de 2 o 4 núcleos preferiblemente y más de 1GB de RAM. El procesador recomiendo que sea de 64bits porque el soporte para 32bits se encuentra bastante reducido del lado de las aplicaciones, sumado a que limita la cantidad de memoria RAM a disponer. En cuanto al modelo de procesador, todo depende de la cantidad de dispositivos y conexiones que se le quiera realizar. Para un uso hogareño, con un procesador de 2 núcleos y 4 hilos o 4 núcleos físicos debería ser suficiente.

En esta captura se puede apreciar que el servidor está consumiendo 1GB de RAM y que al menos 2 de los 4 hilos están en uso. Este ejemplo es con una sola conexión haciendo la sincronización y subida de archivos. En esta captura se puede apreciar que el servidor está consumiendo 1GB de RAM y que al menos 2 de los 4 hilos están en uso. Este ejemplo es con una sola conexión haciendo la sincronización y subida de archivos.

Almacenamiento

Como ya se mencionó respecto al almacenamiento, todo depende del espacio que se quiera disponer para guardar archivos. Más allá de esto, considero importante al menos destinar una unidad en estado solido (SSD) pequeño para la instalación del sistema y optar por un disco tradicional para el almacenamiento de archivos. Esto permitirá contar con gran capacidad de almacenamiento a bajo costo, y tener un gran desempeño en el sistema operativo gracias al SSD. Esto se va a agradecer en la velocidad general y sobre todo en la instalación.

Para mi proyecto personal opte por usar un SSD de 128GB para instalar el sistema y aplicaciones, mientras que aproveché a destinar un disco duro tradicional de 2TB para almacenamiento. Para mi proyecto personal opte por usar un SSD de 128GB para instalar el sistema y aplicaciones, mientras que aproveché a destinar un disco duro tradicional de 2TB para almacenamiento.

Como requisito opcional, se va a necesitar un pendrive para realizar la instalación del Sistema operativo. Esto solo en caso que se opte por realizar una instalación limpia, caso contrario no será necesario.

Sistema operativo

Según los requisitos oficiales, los servicios y aplicativos para ejecutar NextCloud se pueden instalar en cualquiera de los tres Sistemas principales (Windows, Linux y MacOS). Particularmente voy a optar por recomendar Linux, ya que me parece la opción más segura, de bajos requisitos técnicos y que provee muchas herramientas necesarias integradas de forma nativa. Sin embargo, si se elige realizarlo con Windows o MacOS, no habría problemas en ello.

Solamente considerar que si se cuenta con recursos limitados, una distribución GNU/Linux sería la mejor opción para aprovechar al máximo los recursos. Si se está realizando una instalación limpia, tampoco tomaría como primera opción Windows, ya que habría que gastar en una licencia o optar por crackear el SO, lo cual sería pésima idea para un equipo destinado a almacenar información privada y personal.

La distribución que elegí es Ubuntu 22.04 LTS, ya que es un sistema amigable, con abundante documentación y comunidad, y por sobre todas las cosas con soporte extendido de varios años. Si bien sería lo más recomendable usar Ubuntu Server para ahorrar recursos, aprovechando que no cuento con hardware limitado y para poder hacer más sencilla y corta ciertas configuraciones, opto por la versión escritorio.

Software necesario

Docker

Para este proyecto, con el fin de hacer sencilla la instalación y con posibilidad de ejecutar más servicios, voy a optar por usar Docker. Para el que no conoce, docker es un sistema de virtualización en contenedores. A diferencia de una maquina virtual, los contenedores evitan tener que virtualizar un sistema entero, ejecutando solo las partes esenciales para que se ejecute el aplicativo. La ventaja de esto, es que con un único equipo podemos virtualizar diferentes aplicaciones y servicios, siempre que se cuente con los recursos necesarios. Por ejemplo: un servidor web, motores de base de datos, o aplicativos como Nextcloud.

Más allá de esa breve explicación, lo importante a tener en cuenta es que los contenedores Docker se generan a partir de “imágenes”. Dicho de otra manera, las imágenes son instrucciones prearmadas que le dicen a Docker que componentes instalar en el contenedor. Como NextCloud provee con una imagen Docker, la configuración se reduce exponencialmente y encima contamos con la posibilidad de usar el servidor para otras cosas adicionales.

SSH

La conexión al servidor se realizará mediante SSH, aunque si se quiere obviar esto en la instalación, se puede conectar el servidor a un monitor y teclado para hacerlo directo, ya que utilizaremos un sistema con interfaz gráfica. Sin embargo, una vez ya montado y funcionando el servidor, va a ser mucho mas fácil acceder a el a través de SSH, ahorrando tener conectados todos los periféricos.

Instalación y Configuración

Instalación del Sistema Operativo

No voy a explayarme mucho en este punto, ya que internet está lleno de tutoriales de instalación de distribuciones GNU/Linux o mismo de Windows. Esta parte la dejo como iniciativa de investigación para el lector. Particularmente, en mi servidor voy a realizar una “instalación mínima”, ya que no necesito todo el software adicional que se provee en la “instalación tradicional”.

La instalación mínima o reducida de Ubuntu aporta las herramientas necesarias para llevar a cabo el tutorial de manera sencilla si se quiere ahorra realizar todas las configuraciones por terminal. La instalación mínima o reducida de Ubuntu aporta las herramientas necesarias para llevar a cabo el tutorial de manera sencilla si se quiere ahorra realizar todas las configuraciones por terminal.

Una vez instalado el Sistema Operativo, recomiendo instalar todos los drivers y actualizaciones. En Windows basta con ir a Configuración y luego a Windows Update para luego presionar sobre Buscar actualizaciones y reiniciar el equipo si lo solicita. Para los que optaron por Ubuntu basta con ejecutar estos sencillo comandos:

bash
sudo apt update
sudo apt upgrade

Entre las configuraciones necesarias para el servidor, lo primero sería cambiar las configuraciones de energía para desactivando la suspensión del equipo, ya que caso contrario cada cierto tiempo “se irá a dormir”. Si se optó por la versión Ubuntu Server, esto no es necesario, pero en caso de la versión estándar (como en mi caso) basta con entrar al menú Configuración y luego al apartado Energía. En las opciones que se presentan hay que seleccionar “Apagado” en los ítems ”Suspender” y ”Apagar Pantalla”.

Otro ajuste necesario, es definir que el equipo use IP estática, ya que por defecto viene con el servicio DHCP activado y este asignará una IP aleatoriamente cada vez que se encienda el equipo. Esto complicaría la conexión al servidor y a Nextcloud, ya que no sabríamos que IP tiene asignada. Esto tampoco sería necesario para las ediciones server, pero en Ubuntu u otras distros basta con ir a Configuración, luego al apartado Red. En el listado de conexiones hay que seleccionar el ítem conexión Ethernet y luego en el icono del engranaje. Se abrirá una nueva ventana, se debe presionar sobre la pestaña IPV4, luego cambiar el check que dice “Automática DHCP” por Manual. Al hacer esto se habilitara el campo para ingresar dirección, mascara y puerta de enlace. Si no se quiere nada especifico se pueden insertar las que ya se tienen asignadas, que se pueden obtener mediante el comando ifconfig.

Como el objetivo es que mi servidor sea “lo más inalámbrico posible” le instale una placa WiFi para no tener el cable de red adicionalmente al de red. Así que la configuración de red anteriormente explicada es similar, pero se accede desde Configuración, luego Inalámbrica, se busca la red WiFi conectada y se presiona el icono del engranaje. La ventana que se abre es igual a la anterior, por lo que hay que ir a la pestaña IPV4, seleccionar método manual e ingresar la dirección IP que se quiere dejar fija. En mi caso, la configuración que hice fue la que se muestra en las siguientes capturas. También aproveché para cambiar los DNS por los de OpenDNS, pero esto es puramente opcional.

Configurar SSH para acceso remoto

Para la conexión y administración remota del servidor considero que la mejor opción es utilizar SSH. Lo recomiendo, ya que contamos con alternativas open source y gratuitas, aparte de ser un protocolo seguro. Para usar esto se debe instalar un cliente tanto en el servidor, como en la pc desde la que se va a realizar la conexión. Para los que optaron por usar GNU/Linux recomiendo usar OpenSSH, ya que es muy liviano y la instalación es muy sencilla, Para esto, se debe ejecutar los siguientes comandos:

bash
sudo apt update
sudo apt install openssh

En el caso de estar en Windows, el mejor cliente SSH que puedo recomendar es PuTTY. Para ambos casos, la interacción se realizará mediante una consola de comandos. No se necesita más, ya que la instalación no es muy compleja. Para el resto de operaciones diarias no va a ser necesario, ya que se va a poder hacer mediante la interfaz gracias al cliente web o la App oficial de NextCloud.

Aquí se ve lo sencillo que es conectarse a un servidor mediante SSH por linea de comandos. Aquí se ve lo sencillo que es conectarse a un servidor mediante SSH por linea de comandos.

Instalar Docker

La instalación de docker en Windows es muy sencilla, simplemente basta con descargar el instalador y darle en siguiente - siguiente. Para instalarlo en ubuntu se tienen que realizar una serie de comandos, los cuales se detallan en está página de Docker Docs. Si se usa una distro que tenga pre-instalado podman, como en el caso de Fedora y RedHat, no es necesario instalar docker, ya que los comandos son retrocompatibles. Como en mi caso no se encuentra pre-instalado ni Docker ni Podman la lista de comandos que ejecuté en mi Ubuntu 22.04 son los que se encuentran a continuación.

Agregar llaves GPG:

bash
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Agregar repositorio:

bash
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update

Instalar Engine, CLI y plugin

bash
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Instalar NextCloud

Es hora de realizar la parte más divertida, que es instalar y configurar NextCloud. Para iniciar, hay que acceder al servidor usando SSH, mediante el comando que se encuentra a continuación. Después de ingresar el comando se va a solicitar la contraseña del usuario del servidor.

bash
ssh usuario@ip-configurada

Una vez conectado al servidor hay que generar dos directorios, uno para la instalación de Nextcloud y otro para su base de datos. Para esto voy a generar un directorio docker dentro de la carpeta del usuario, y dentro de este generar los dos directorios mencionados, los cuales llamaré nextcloud y db. Los comandos son los siguientes:

bash
cd /home/USUARIO
mkdir docker && cd docker
mkdir nextcloud && mkdir db

Ubicado dentro de la carpeta docker recién generada, se debe crear un archivo docker-compose.yml, el cual contendrá la imagen de docker a levantar. Una vez generado esto, basta con ingresar al archivo con el editor de texto favorito, en mi caso voy a usar nano:

bash
cd /home/USUARIO/docker
touch docker-compose.yml
nano docker-compose.yml

Una vez abierto el archivo, hay que pegar la imagen de docker que se puede obtener de DockerHub. En mi caso, luego de varias pruebas le hice varias modificaciones, ya que no me funcionaba tal cual como estaba publicada. Dejo a continuación como quedó la estructura de mi docker-compose. Cabe aclarar que no hay que dejarlo literal, hay que cambiar definir todos los usuarios y contraseñas que se encuentran entre llaves. También considerar que en las ultimas cuatro lineas los usuarios y contraseñas hacen referencia a los que se insertaron en db, si no coinciden la app no va a poder acceder a la base de datos y va a dar error.

yaml
version: '2'

networks:
  nextcloud:
    ipam:
      driver: default

services:
  db:
    image: mariadb:10.6
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    networks:
      - nextcloud
    volumes:
      - /home/USUARIO/docker/nextcloud/db/:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD={PASSWORD1}
      - MYSQL_PASSWORD={PASSWORD-DB}
      - MYSQL_DATABASE={NEXTCLOUD-DB}
      - MYSQL_USER={NEXTCLOUD-USER}

  app:
    image: nextcloud
    restart: always
    ports:
      - 8080:80
    networks:
      - nextcloud
    volumes:
      - /home/{USUARIO}/docker/nextcloud/app/:/var/www/html
    environment:
      - MYSQL_PASSWORD={PASSWORD-DB}
      - MYSQL_DATABASE={NEXTCLOUD-DB}
      - MYSQL_USER={NEXTCLOUD-USER}
      - MYSQL_HOST={DB}

Una vez insertado el contenido del docker-compose, guardar el archivo y ejecutar el comando que se encuentra a continuación. Luego de presionar enter se espesaran a descargar dependencias y luego se construirán los contenedores. En caso de ver algún aviso de error hay que volver a ingresar al archivo docker-compose.yml y revisar que no se haya escrito mal los usuarios, contraseñas y directorios. Luego de las correcciones volver a ejecutar el comando para levantar la imagen.

bash
sudo docker-compose up -d

Una vez terminado el proceso de instalación y generación de los contenedores se puede chequear que estén ejecutándose.

bash
sudo docker ps

Si se llegó hasta acá ¡¡felicidades!! Ya se encuentra instalado Nextcloud en el servidor y solo resta ingresar desde un navegador en otra PC o celular conectado a la misma red y configurar usuarios, así como instalar aplicaciones que se desee. En el navegador, como si se tratara de una página web, ingresar http://{IP-SERVIDOR}:8080/.

Continuará…¿?

Hasta acá dejo este articulo, creo que quedó bastante sencillo el proceso, o por lo menos en comparación a una instalación nativa de NextCloud en la maquina. Espero que puedan realizarlo, aunque sea le den la oportunidad de probarlo y sobre todo ahorrarse esos verdes de alguna suscripción cloud.

Está demás decir que hay más cosas para hacer, como exponer el servidor a internet para acceder a el desde cualquier lugar del mundo, o instalar imágenes docker de otros servicios si los recursos acompañan, así como las posibilidades mismas que brinda Nexcloud con sus apps. Si encuentro una cantidad de cosas considerables e interesantes para evolucionar este proyecto, agregaré una versión 2 de este articulo, pero no prometo nada.

Así que sin más que agregar, te invito a que me comentes tu experiencia, aportes información del artículo o consultes dudas en los comentarios. Si te sirvió el contenido aquí presente, también te invito a contribuir con este blog. Recuerda que me podes contactar por correo electrónico, así como desde Telegram, nos leemos la próxima, saludos!

Contribuir con el Blog

Dejame tú comentario:

Comentarios anteriores

No se registraron comentarios