Hola a todos, hoy voy a explicar cómo montar nuestra propia nube en una máquina CentOS10. Para llevar esto a cabo necesitamos instalar las siguientes herramientas: Nextcloud y Docker Compose. Pero primero empecemos por entender que hace cada una.
Nextcloud es un sistema que nos permite tener nuestra propia nube para sincronizar archivos, calendarios, contactos y muchas cosas más. Nos proporciona una interfaz web a través de la cual podemos acceder a todos nuestros contenidos desde cualquier ordenador. También tiene un cliente de escritorio que nos permite sincronizar nuestros archivos y varias aplicaciones móviles para acceder a diferentes servicios de manera más fácil desde el móvil (aunque la interfaz web es compatible con móviles también).🔗
Docker es una de las herramientas facilita la creación de entornos de ejecución aislados y portátiles para las aplicaciones, lo que simplifica la implementación y la gestión, especialmente en arquitecturas de microserviciost. Pero claro, la idea de Docker es que únicamente ejecute un único microservicio por contenedor y no varios a la vez. Para solucionar esto se crea Docker Compose que permite trabajar con varios contenedores de forma simultánea haciendo que estos se conecten y relacionen entre sí. De esta forma, si uno de los contenedores fallase, podrías (depende cómo lo configures) permitir que los otros servicios sigan funcionando.
Bueno, teniendo claro que hace cada herramienta lo siguiente instalar Docker y Docker Compose en la máquina CentOS. Comenzamos por añadir el repositorio de Docker con el siguiente comando.
Docker es una de las herramientas facilita la creación de entornos de ejecución aislados y portátiles para las aplicaciones, lo que simplifica la implementación y la gestión, especialmente en arquitecturas de microserviciost. Pero claro, la idea de Docker es que únicamente ejecute un único microservicio por contenedor y no varios a la vez. Para solucionar esto se crea Docker Compose que permite trabajar con varios contenedores de forma simultánea haciendo que estos se conecten y relacionen entre sí. De esta forma, si uno de los contenedores fallase, podrías (depende cómo lo configures) permitir que los otros servicios sigan funcionando.
Bueno, teniendo claro que hace cada herramienta lo siguiente instalar Docker y Docker Compose en la máquina CentOS. Comenzamos por añadir el repositorio de Docker con el siguiente comando.
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Ahora veamos las versiones de Docker que me agregó este repositorio en el sistema.
Con la siguiente instrucción vamos a decirle al sistema que me instale de los paquetes docker-ce la versión más apropiada para mi máquina y la versión más nueva.
sudo dnf install docker-ce --nobest --allowerasing
Habilitamos a Docker para que se inicie con el sistema.
Ahora, para instalar Docker Compose necesitamos descargarlo con el siguiente comando.
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Luego de su descarga verificamos que se encuentre en la ruta que le especificamos y le damos permiso de ejecución a ese fichero.
Hasta aquí tenemos las herramientas Docker y Docker Compose instaladas. Ahora necesitamos ir a Docker Hub para ver las especificaciones que necesita el contenedor de Nextcloud para su instalación.
Si echamos un vistazo en la página, encontraremos al final de ésta, el contenido que necesitamos para crear nuestro fichero .yml, indispensable para que Docker Compose se pueda ejecutar.
Creamos el fichero docker-compose.yml en el directorio donde vamos a ejecutar Nextcloud. Copiamos todo el código en el fichero creado y luego pasamos a modificar lo que necesitemos.
services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_PASSWORD=1234
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=q3it
app:
image: nextcloud
restart: always
ports:
- "8080:80"
links:
- db
volumes:
- nextcloud/config:/var/www/html/config
environment:
- MYSQL_PASSWORD=1234
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=q3it
- MYSQL_HOST=db
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_PASSWORD=1234
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=q3it
app:
image: nextcloud
restart: always
ports:
- "8080:80"
links:
- db
volumes:
- nextcloud/config:/var/www/html/config
environment:
- MYSQL_PASSWORD=1234
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=q3it
- MYSQL_HOST=db
He modificado el password de la base de datos, el nombre de usuario y volumen de configuración. ¿Que hará esto? Creará la base de datos con MariaDB y la imagen de Nexcloud.
Ahora, ejecutamos la siguiente instrucción para levantar el contenedor...
sudo docker compose up -d
Verificamos que las dos imágenes están creadas y corriendo...
Para conectarnos con este servicio, vamos al navegador e ingresamos la ip la máquina y el puerto 8080.
Como vemos en la imagen está funcionando el servicio. Ahora nos pide que creemos una cuenta de administrador.
A partir de aquí tendríamos a Nextcloud funcionando correctamente. Pero si yo quiero que mi conexión sea al nombre de dominio nextcloud.docker.q3it y no a la ip ¿Cómo lo podríamos hacer? Lo primero es modificar el fichero /etc/hosts del CentOS y asociar ese nombre con la ip.
Para solucionar esto debemos ir al directorio config/config.php que nos pone en el mensaje y asociar ese nombre de dominio con la ip. Este directorio se creó con la instalación y se encuentra en la ruta de la imagen.
Modificamos la última línea, donde asocia la 192.168.1.123 con el dominio nextcloud.docker.q3it. También podemos eliminar el puerto 8080 para que se comunique por defecto por el 80 y así omitir el puerto en la conexión.
Probemos la conexión....
Ampliación
Cuando utilizamos una nube personal, una de las cosas que nos gustaría hacer es poder acceder a ella a través de una red WAN, esto se puede hacer de varias maneras:
1- Acceder por un puerto abierto en nuestro Router. El concepto de esta practica lo expliqué en el post de ssh.
Una vez abiertos los puertos, debemos configurar el fichero config.php y añadir nuestra ip pública para que la reconozca como una ip de confianza.
2- Acceder a la máquina local por medio de una VPN. En el post de OpenVPN explico cómo acceder desde el exterior a una ip local. La metodología a seguir es muy fácil, sólo es configurar hacia donde queremos dirigir esa comunicación.
3- Acceso con un dominio registrado en la web. Cuando se accede por medio de un dominio público, lo normal es que la empresa que presta este servicio te de las facilidades para configurar tu conexión: Contratar un certificado SSL, resolver las peticiones por medio de sus servidores DNS, etc. Pero si sólo tenemos el nombre de dominio, el resto lo tenemos que hacer de forma local, instalando Bin9 para que resuelva a ese nombre de dominio, configurar un certificado SSL autofirmado, abrir puertos seguros, etc.
4- Acceso a una instancia. Lo primero es entender que una instancia informática es una máquina virtual (VM), que se ejecuta en un hardware físico independiente. Teniendo esto claro, lo que necesitamos es migrar nuestra máquina a una organización que preste este servicio, cómo: Amazon EC2, Microsoft Azure, Google Platform, etc. Para el proceso de migración hay que tener en cuenta, la arquitectura, la conectividad, los sistemas operativos que soporta, el tipo de cuenta, etc. Ahora solo queda ser muy meticulosos y leer muy bien la guía ofrecida por el proveedor del servicio para terminar con éxito este proceso.