Hola a tod@s,
En este post vamos a ver como desplegar nextcloud con Docker, desplegaremos dos contenedores Docker para este servicio, uno de ellos será el de MariaDB para la base de datos que vamos a utilizar y el otro el propio de Nextcloud con la aplicación, este servicio irá desplegado, sobre la misma máquina dónde ya desplegamos un docker con Nginx Proxy Manager, que será el que utilicemos para los certificados SSL.
Nextcloud es un espacio de trabajo digital moderno que integra herramientas clave de productividad y colaboración en una plataforma unificada y modular, fácil de usar y gestionar.
- Para empezar, vamos a ver que hemos preparado esta máquina virtual con Ubuntu Server 26.04 LTS, dónde tenemos dos discos, uno de sistema y otro de datos:
- Como podemos ver, el disco de datos lo hemos montado sobre /opt/docker que es dónde vamos a ubicar todos los contenedores Dockers y sus configuraciones:
- Nos creamos el registro DNS del tipo CNAME para nextcloud en nuestra zona externa, ya que este servicio lo vamos a publicar al exterior, va a apuntar a www y este a su vez apunta a la máquina docker dónde tenemos instalado un Nginx Proxy Manager para los accesos externos:
- Verificamos las versiones de Docker instaladas, docker –version, docker compose version:
- Ahora vamos a crear la estructura de directorios y permisos para los contenedores de MariaDB y Nextcloud:
- sudo mkdir -p /opt/docker/nextcloud/nextclouddb/data
- sudo mkdir -p /opt/docker/nextcloud/nextclouddb/config
- sudo mkdir -p /opt/docker/nextcloud/nextcloudapp/html
- sudo chmod -R 755 /opt/docker/nextcloud/nextclouddb
- sudo chmod -R 755 /opt/docker/nextcloud/nextcloudapp
- Ahora creamos una red personalizada para nuestro proyecto, sudo docker network create —subnet 172.25.2.0/24 –gateway 172.25.2.1 -d bridge nextcloud-net, con sudo docker network ls vemos la redes que tenemos configuradas y con sudo docker network inspect nextcloud-net, vemos la configuración de la red que hemos creado:
- Ahora vamos a crearnos los ficheros .env para no dejar credenciales en texto plano en los ficheros docker-compose.yaml que crearemos posteriormente, utilizando para ello variables.
- Empezaremos con el fichero .env para el contenedor de MariaDB, para ello, nos situamos en cd /opt/docker/nextcloud/nextclouddb, y ejecutamos sudo nano .env:
- Y así definimos el fichero:
- MYSQL_ROOT_PASSWORD=clave_muy_segura_root_db
- MYSQL_DATABASE=nextclouddb
- MYSQL_USER=nextclouduser
- MYSQL_PASSWORD=clave_muy_segura_db
- Nos creamos el fichero docker-compose.yaml para el contenedor de MariaDB en la misma ubicación, sudo nano docker-compose.yaml:
- Este sería el contenido del fichero:
services:
nextcloud-db:
image: mariadb:12.2
container_name: nextcloud-db
restart: unless-stopped
env_file: .env
environment:
– MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
– MYSQL_DATABASE=${MYSQL_DATABASE}
– MYSQL_USER=${MYSQL_USER}
– MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
– /opt/docker/nextcloud/nextclouddb/data:/var/lib/mysql
– /opt/docker/nextcloud/nextclouddb/config:/etc/mysql/conf.d:ro
networks:
– nextcloud-net
networks:
nextcloud-net:
name: nextcloud-net
external: true
- Aquí vemos los ficheros creados:
- Seguimos con el fichero .env para el contenedor de nextcloud app, para ello, nos situamos en cd /opt/docker/nextcloud/nextcloudapp, y ejecutamos sudo nano .env:
- Y así definimos el fichero:
MYSQL_USER=nextclouduser
MYSQL_PASSWORD=clave_muy_segura_db
MYSQL_DATABASE=nextclouddb
NEXTCLOUD_ADMIN_USER=admnextcloud
NEXTCLOUD_ADMIN_PASSWORD=clave_muy_segura_useradmin_nextcloud
NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.ragasyssistemas.com
- Nos creamos el fichero docker-compose.yaml para el contenedor de wordpress-app en la misma ubicación, sudo nano docker-compose.yaml:
- Este sería el contenido del fichero:
services:
nextcloud-app:
image: nextcloud:33-apache
container_name: nextcloud-app
restart: unless-stopped
# ports:
# – «8080:80»
env_file: .env
environment:
– MYSQL_HOST=nextcloud-db:3306
– MYSQL_USER=${MYSQL_USER}
– MYSQL_PASSWORD=${MYSQL_PASSWORD}
– MYSQL_DATABASE=${MYSQL_DATABASE}
– NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER}
– NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD}
– NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_TRUSTED_DOMAINS}
– TRUSTED_PROXIES=172.25.1.0/24 # Subred de Nginx Proxy Manager External
– OVERWRITEPROTOCOL=https
volumes:
– /opt/docker/nextcloud/nextcloudapp/html:/var/www/html
networks:
– nextcloud-net # Para comunicar con la DB
– npmdmz-net # Para comunicar con Nginx Proxy Manager External
networks:
nextcloud-net:
external: true
npmdmz-net:
external: true
- Aquí vemos los ficheros creados:
- Protegemos los archivos .env aplicando estos permisos:
- sudo chmod 600 /opt/docker/nextcloud/nextclouddb/.env
- sudo chmod 600 /opt/docker/nextlcloud/nextcloudapp/.env
- Protegemos los archivos .env aplicando estos permisos:
- sudo chmod 600 /opt/docker/nextcloud/nextclouddb/.env
- sudo chmod 600 /opt/docker/nextlcloud/nextcloudapp/.env
- Iniciamos el contenedor de nextcloud-app, cd /opt/docker/nextcloud/nextcloudapp/, sudo docker compose up -d:
- Aquí vemos los contenedores levantados, sudo docker ps -a:
- Ahora accedemos a nuestro portal de Nginx Proxy Manager para crear el host para wordpress.
- Accedemos a Hosts > Hosts Proxy:
- Añadir Host Proxy:
- En la pestaña Detalles:
- Nombres de Dominio: nextcloud.ragasyssistemas.com
- Esquema: http
- Nombre de Host/IP de reenvío: nextcloud-app
- Puerto: 80
- Bloquear Exploits Comunes
- Soporte de Websockets
- En la pestaña SSL:
- Seleccionamos el Certificado SSL que nos interese
- Marcamos Forzar SSL
- Guardar
- Aquí vemos el host creado y conectado:
- Y como vemos, ya tenemos acceso a nuestro nextcloud a través de nuestro proxy inverso con Nginx Proxy Manager:
Saludos y espero que os resulte de ayuda 😉




























