Instalación de Nextcloud con Docker
Nextcloud se ha establecido como una solución en la nube de código abierto. El software también incluye, además de los clientes para sistemas operativos de escritorio y móviles, un componente de servidor. A continuación, descubre cómo se puede instalar un Nextcloud Server en un entorno Docker.
Con el saldo inicial de cada tarifa puedes usar el servidor cloud de IONOS durante 1 mes de forma gratuita (o hasta que se agote el saldo) y disfrutar de la combinación perfecta de rendimiento y seguridad.
Instalar Nextcloud en Docker
Nextcloud es una solución en la nube de código abierto que nació como una bifurcación del proyecto ownCloud. Su gama de funciones se asemeja a la de otras soluciones propietarias en la nube, como Microsoft 365 o Google Workspace. Nextcloud sincroniza datos como calendarios y contactos entre personas y dispositivos. Además de la sincronización de archivos obligatoria, tiene otras funciones orientadas a la colaboración y comunicación interna del equipo. Nextcloud también sirve de base para la “Bundescloud” de la Administración Federal Alemana, que está en funcionamiento desde 2020.
Como es habitual en las soluciones en la nube similares, Nextcloud consta tanto de una sección dedicada a servidores como de una dedicada a los clientes para sistemas operativos de ordenadores y móviles. Nextcloud Server gestiona los datos y se comunica con los clientes, aunque también proporciona una interfaz web independiente del cliente.
Descubre cómo instalar un Nextcloud Server en Ubuntu Linux. Es decir, una instalación en una estructura en la nube, para lo que se usa Docker Compose. También es posible instalar el servidor en un hardware propio e incluso instalar Nextcloud en una Raspberry Pi, por ejemplo.
Nextcloud y ownCloud tienen muchos puntos en común. En el artículo sobre ownCloud vs. Nextcloud puedes encontrar las diferencias entre ambos.
Arquitectura de Nextcloud en Docker
En primer lugar, descubre qué componentes tiene un Nextcloud Server con Docker y cómo se conectan estos entre sí. Además del software de Nextcloud propiamente dicho se utilizan otros tres servicios de contenedores. Para poder aprovisionar a la red de contenedores y poder controlarla como una sola unidad se utiliza una Docker tool llamada Compose. A continuación, se presenta una lista con los distintos servicios que se utilizan:
- Nginx Reverse Proxy: se utiliza para poder acceder a Nextcloud mediante conexiones HTTPS encriptadas
- Let’s Encrypt: sirve para configurar automáticamente los certificados SSL
- MariaDB: se utiliza para almacenar los datos generados por el servidor mientras Nextcloud está en uso
- Nextcloud Server: es el que proporciona la verdadera funcionalidad de Nextcloud; se comunica con los clientes de Nextcloud y lleva a cabo el hosting de la interfaz web
Preparar la instalación del Nextcloud Server
En un nuevo sistema operativo de Linux Ubuntu hay que instalar Docker Engine y Docker Compose primero. Docker Engine proporciona el núcleo de las funciones de contenedores, mientras que Docker Compose permite la gestión de conjuntos de contenedores relacionados. Si ya tienes instalado Docker Engine y Docker Compose, puedes saltarte esta sección.
Instalar Docker Engine en Ubuntu
En esta sección puedes aprender a instalar Docker Engine en Ubuntu Linux. Para ello se siguen las instrucciones de instalación oficiales. Para realizar la instalación en otras distribuciones de Linux se pueden encontrar instrucciones al respecto en la web de Docker. A continuación, se presentan los pasos para instalar Docker Engine:
- Elimina cualquier instalación de Docker ya existente:
sudo apt-get remove docker docker-engine docker.io containerd runc
- Actualiza el instalador a la versión más reciente:
sudo apt-get update
- Prepara los repositorios:
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
- Añade la clave GPG oficial de Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Configura un repositorio estable de Docker:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Actualiza los repositorios a la versión más reciente:
sudo apt-get update
- Instala Docker Engine junto a sus componentes dependientes:
sudo apt-get install docker-ce docker-ce-cli containerd.io
- Por último, pero no por ello menos importante, ejecuta el contenedor “Hello World” a modo de prueba.
Si se ha instalado Docker Engine correctamente, el contenedor se ejecutará y emitirá el mensaje correspondiente.
sudo docker run hello-world
Instalar Docker Compose en Ubuntu
A continuación, procede a la instalación de Docker Compose. El proceso de instalación es más sencillo y menos voluminoso que el del Docker Engine. En concreto, estos son los pasos que seguir:
- Activa el repositorio Universe de Ubuntu:
sudo add-apt-repository universe
- Actualiza la gestión de paquetes a la versión más reciente:
sudo apt update
- Instala Docker Compose:
sudo apt install docker-compose
- Compueba que Docker Compose se ha instalado correctamente:
docker-compose --version
Si te muestra el número de la versión de tu Docker Compose, sabes que se ha instalado correctamente.
Llevar a cabo la instalación del Nextcloud Server
Una vez instalados Docker Engine y Docker Compose, se comienza con la instalación de Nextcloud propiamente dicha. Para ello, hay que configurar individualmente cada contenedor Docker para que preste su servicio designado. Para configurar los volúmenes y redes de Docker al igual que los contenedores necesarios se utilizan dos archivos de configuración:
Archivo | Explicación |
---|---|
docker-compose.yaml | Instrucciones de Docker Compose en formato YAML para generar la estructura de la aplicación multicontenedor |
.env | Archivo de texto con variables del entorno; se define una variable por línea |
Docker Compose se utiliza para gestionar aplicaciones multicontenedor. Las entradas realizadas en Docker Compose se usan para definir cómo se construye la aplicación y cómo interactúan los componentes individuales entre sí. Las entradas de Docker Compose describen los diferentes servicios, elementos y configuraciones de Docker y están escritas en el lenguaje YAML (“Yet Another Markup Language”). Descubre cómo el archivo docker-compose.yaml paso a paso.
Además de docker-compose.yaml, se necesita también otro archivo. Este contiene las variables de entorno que se integran en las entradas de Docker Compose. Las variables de entorno y sus valores se almacenan por defecto en un archivo .env en la carpeta del proyecto. El archivo .env no figura en el sistema de control de versiones para proteger datos sensibles, como las contraseñas, de ser divulgados accidentalmente.
Al utilizar un archivo .env resulta muy fácil definir diferentes configuraciones para distintos entornos de aplicación. Por ejemplo, para utilizar diferentes configuraciones en una página web en vivo y en un sitio de staging, basta con cambiar el archivo .env correspondiente.
Crear las estructuras necesarias para Nextcloud Server
Para empezar a instalar Nextcloud Server se necesita un cierto número de estructuras. Estas estructuras se crean con los siguientes pasos:
- Crea la carpeta del proyecto. Crea la carpeta nextcloud-docker en el directorio principal del usuario:
mkdir ~/nextcloud-docker/
- Crea archivos. Crea los archivos docker-compose.yaml y .env en la carpeta del proyecto:
touch ~/nextcloud-docker/docker-compose.yaml
touch ~/nextcloud-docker/.env
- Crea una red Docker. Utiliza el comando docker para crear una nueva red. Los cuatro contenedores se comunican dentro de esa misma red.
docker network create nextcloud_network
Una vez creadas estas estructuras hay que continuar con la instalación de Nextcloud Server.
Configurar el proxy inverso para Nextcloud Server
Comienza con la instalación de Nextcloud Server configurando el proxy inverso. Para ello se utiliza Nginx. Dado que se está construyendo la aplicación a partir de contenedores, la mayor parte del proceso de instalación tiene lugar en el archivo docker-compose.yaml. Describe en detalle cómo editar este archivo. Sigue los siguientes pasos para la instalación:
- Abre el archivo docker-compose.yaml para editarlo.
El comando que se muestra a continuación abre el archivo, que todavía está vacío, en el editor “Nano”:
nano ~/nextcloud-docker/docker-compose.yaml
- Inserta el siguiente bloque de código en Nano y guarda el archivo.
Para cerrar el archivo, utiliza la combinación de teclas [Ctrl] + [X] o [Ctrl] + [X]. Responde a la pregunta de guardar el archivo con “y” que significa “yes”/“sí”. Con la tecla [Enter] confirma que quieres mantener el nombre del archivo actual.
Como alternativa, puedes dejar el editor abierto y utilizar la combinación de teclas [Ctrl] + [O] (“Write out”, es decir, “escribir en el archivo”) para escribir el texto del editor en el archivo.
version: '3'
services:
proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
container_name: nextcloud-proxy
networks:
- nextcloud_network
ports:
- 80:80
- 443:443
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- ./proxy/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: unless-stopped
¿Qué significa cada una de las entradas individuales? Primero, dices a Docker Compose que cree un nuevo servicio llamado proxy usando una imagen Nginx de Alpine Linux. También hay que especificar que el proxy inverso debe comunicarse con los otros servicios a través de la red Docker llamada nextcloud_network.
Asigna los puertos 80 y 443 estándares de HTTP y HTTPS respectivamente entre el sistema host y el contenedor. De esta manera, las conexiones que llegan se enrutan a través del proxy. Como último paso en la configuración, crea varios volúmenes Docker y especifica que el proxy inverso se debe reiniciar automáticamente si no ha sido detenido explícitamente.
Configurar el servicio Let's Encrypt para Nextcloud Server
Continúa entonces con la instalación de Let's Encrypt. Este servicio permite la comunicación cifrada con Nextcloud Server mediante HTTPS.
- Abre el archivo docker-compose.yaml para editarlo:
nano ~/nextcloud-docker/docker-compose.yaml
- Añade otro service block.
Procede como se ha descrito en el apartado anterior y presta atención a la sangría: El inicio del bloque que comienza con letsencrypt: debe estar a la misma altura que proxy:. Esto también se debe aplicar a futuros service blocks que quieras añadir.
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nextcloud-letsencrypt
depends_on:
- proxy
networks:
- nextcloud_network
volumes:
- ./proxy/certs:/etc/nginx/certs:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
De nuevo, define un nuevo servicio bajo el nombre letsencrypt, basado en el contenedor letsencrypt-nginx-proxy-companion. Especifica que el servicio letsencrypt depende del servicio de proxy inverso y se comunica en la misma red Docker. Además, define los volúmenes Docker necesarios para el intercambio de datos. También establece que este servicio nuevo se debe reiniciar automáticamente si no se ha detenido de forma explícita.
¿Quieres que tu web tenga un cifrado profesional? Adquiere tu propio certificado SSL barato con IONOS.
Configurar el servicio MariaDB para Nextcloud Server
Con la configuración del proxy inverso y Let's Encrypt has completado la mitad de la instalación. Ahora hay que continuar con la base de datos MariaDB, necesaria para gestionar los datos que se acumulan durante el uso de Nextcloud. El verdadero almacenamiento se hace a través de un volumen Docker externo al contenedor.
- Abre el archivo docker-compose.yaml para editarlo:
nano ~/nextcloud-docker/docker-compose.yaml
- Inserta otro service block:
db:
image: mariadb
container_name: nextcloud-mariadb
networks:
- nextcloud_network
volumes:
- db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
restart: unless-stopped
A estas alturas, la mayoría de los ajustes ya te deberían resultar familiares. Define un servicio db a partir de la imagen Docker con el nombre de mariadb. A continuación, define la red nextcloud_network, que ya se utiliza para el resto de servicios, y un volumen Docker para almacenar los datos.
La novedad en este bloque que estás configurando es el uso de variables de entorno. En la sección del entorno especifica los nombres de las variables de entorno necesarias para MariaDB. Una vez ejecutado Docker Compose, los valores reales se pueden ver en el archivo .env.
Configurar el contenedor Nextcloud Server
Ha llegado el momento: empieza con la instalación del software del Nextcloud Server propiamente dicho.
- Abre el archivo docker-compose.yaml para editarlo:
nano ~/nextcloud-docker/docker-compose.yaml
- Introduce otro service block:
app:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
depends_on:
- letsencrypt
- proxy
- db
volumes:
- nextcloud:/var/www/html
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
- ./app/data:/var/www/html/data
- ./app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST
- LETSENCRYPT_HOST
- LETSENCRYPT_EMAIL
restart: unless-stopped
A partir de la imagen Docker denominada nextcloud crea un servicio llamado app, que se comunica mediante la red, ya conocida, con el nombre de nextcloud_network. Para asegurar que el contenedor nextcloud sea el último en iniciarse, configura los demás servicios como dependientes de este. Además, define los volúmenes Docker y las variables de entorno necesarios.
Terminar la configuración de Nextcloud Server
Para completar la configuración del Nextcloud Server son necesarias algunas entradas más en el archivo docker-compose.yaml. Además, crea el archivo .env y complétalo con los valores adecuados.
- Abre el archivo docker-compose.yaml para editarlo:
nano ~/nextcloud-docker/docker-compose.yaml
- Inserta los siguientes bloques.
En este caso no se trata de service blocks, por lo que la sangría debe estar a la misma altura que services:.
volumes:
nextcloud:
db:
networks:
nextcloud_network:
- Abre el archivo .env vacío para editarlo:
nano ~/nextcloud-docker/.env
- Escribe tanto las variables de entorno como los valores del archivo .env:
Copia el siguiente código a la ventana del editor y sustituye los <marcadores de posición> por los valores deseados antes de guardar.
# MariaDB
MYSQL_ROOT_PASSWORD=toor
MYSQL_PASSWORD=mysql
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud
# Nextcloud
VIRTUAL_HOST=<tu.dominio></tu.dominio>
LETSENCRYPT_HOST=<tu.dominio></tu.dominio>
LETSENCRYPT_EMAIL=<tu@email></tu@email>
- Después de guardar, muestra el contenido del archivo .env para comprobar que los valores se han introducido correctamente:
cat ~/nextcloud-docker/.env
Configuración completa de Nextcloud Server
Antes de pasar a Docker Compose la configuración recientemente redactada y utilizarla para crear e iniciar los contenedores, comprueba que todo lo necesario está en su sitio.
- Accede a la configuración actual:
cat ~/nextcloud-docker/docker-compose.yaml
- Compara con la plantilla. La configuración que se obtiene debe coincidir con el siguiente código:
version: '3'
services:
proxy:
image: jwilder/nginx-proxy:alpine
labels:
- "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy=true"
container_name: nextcloud-proxy
networks:
- nextcloud_network
ports:
- 80:80
- 443:443
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- ./proxy/certs:/etc/nginx/certs:ro
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: unless-stopped
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nextcloud-letsencrypt
depends_on:
- proxy
networks:
- nextcloud_network
volumes:
- ./proxy/certs:/etc/nginx/certs:rw
- ./proxy/vhost.d:/etc/nginx/vhost.d:rw
- ./proxy/html:/usr/share/nginx/html:rw
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
db:
image: mariadb
container_name: nextcloud-mariadb
networks:
- nextcloud_network
volumes:
- db:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
restart: unless-stopped
app:
image: nextcloud:latest
container_name: nextcloud-app
networks:
- nextcloud_network
depends_on:
- letsencrypt
- proxy
- db
volumes:
- nextcloud:/var/www/html
- ./app/config:/var/www/html/config
- ./app/custom_apps:/var/www/html/custom_apps
- ./app/data:/var/www/html/data
- ./app/themes:/var/www/html/themes
- /etc/localtime:/etc/localtime:ro
environment:
- VIRTUAL_HOST
- LETSENCRYPT_HOST
- LETSENCRYPT_EMAIL
restart: unless-stopped
volumes:
nextcloud:
db:
networks:
nextcloud_network:
Si tu versión del archivo YAML coincide con la que acabas de leer, puedes proceder al último paso.
Completar la instalación Nextcloud Server
Para conseguir que Nextcloud Server se convierta en una aplicación multicontenedor a partir de las entradas realizadas en Docker Compose, debes ejecutar el siguiente comando en la línea de comandos:
cd ~/nextcloud-docker/ && docker-compose up -d
A continuación, comprueba si los contenedores se han iniciado:
docker ps -a
Para ello, la lista de contenedores en ejecución que se muestra debe contener los cuatro contenedores definidos en el archivo docker-compose.yaml.