• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

Joan Escorihuela

  • Inicio
  • Contacto

4 febrero, 2019 by Joan 3 comentarios

Desplegar Nextcloud en Docker y https

En este tutorial, vamos a desplegar una infraestructura de contenedores, para poner en funcionamiento un servidor Nextcloud usando varios contenedores Docker:

Nextcloud: Contenedor ya preparado, aunque tiene la opción de phpfpm, vamos a usar Apache y lo vamos a poner detràs de un proxy inverso en Nginx.

Mariadb: Contenedor de base de datos Mariadb, un fork de MySQL que presenta un rendimiento superior respeto a MySQL, es necesario para que Nextcloud funcione ya que requiere de una conexión con una base de datos.

Nginx: Contenedor oficial de Nginx, vamos a usarlo para recibir todas las peticiones http y https y las va a direccionar al contenedor Nextcloud, junto a el vamos a poner otro contenedor que va a automatizar la gestión de los certificados SSL con Let’s Encrypt.

Letsencrypt nginx proxy companion: Este contenedor automatiza todo el proceso de creación y renovaciones de certificados para Ngninx con Let’s Encrypt.

Vamos a usar datastores persistentes, pues nos interesa mantener la configuración de los contenedores, como los datos del SQL, la configuración Nginx y certificados SSL además de los datos almacenados en nuestro Nextcloud. Para que todos estos contenedores se comuniquen entre ellos también vamos a crear una red en Docker que va a permitir que solo se puedan ver entre ellos, en excepción de Nginx que si va a ser accesible a internet.

Preparando proxy inverso y SSL.

Vamos a crear una red para que los contenedores se comuniquen entre ellos

docker network create netnext

El siguiente paso es crear el contenedor Nginx para que haga el proxy inverso y atienda a las peticiones http y https que vienen de internet.

docker run --name nginx --net netnext -p 80:80 -p 443:443 \
  -v nginx-certs:/etc/nginx/certs \
  -v nginx-vhost:/etc/nginx/vhost.d \
  -v nginx-conf:/etc/nginx/conf.d \
	-v nginx-dhparam:/etc/nginx/dhparam \
  -v nginx-html:/usr/share/nginx/html \
	-v /var/run/docker.sock:/tmp/docker.sock:ro \
	--label com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy \
	-d --restart always jwilder/nginx-proxy

Ahora vamos a poner en marcha el contenedor que nos va a permitir gestionar los certificados SSL.

docker run --name leproxy --net netnext \
	-v /var/run/docker.sock:/var/run/docker.sock:ro \
	--volumes-from nginx \
	-d --restart always jrcs/letsencrypt-nginx-proxy-companion

Desplegando Nextcloud

Ahora que ya tenemos listo el proxy inverso y la gestión de los certificados digitales, ya podemos empezar desplegando Nextcloud, en primer lugar vamos a preparar un contenedor para la base de datos en Mariadb.

docker run --name nextclouddb --net netnext \
  	-v nextclouddb:/var/lib/mysql \
  	-e MYSQL_ROOT_PASSWORD=contraseña-root \
  	-e MYSQL_DATABASE=nextcloud \
  	-e MYSQL_USER=nextcloud \
  	-e MYSQL_PASSWORD=contraseña-nextcloud \
  	-d --restart always mariadb

Por último ya podemos desplegar nuestro Nextcloud usando la base de datos de mariadb y el proxy inverso de nginx levantados anteriormente.

docker run --name nextcloud --net netnext \
    -v nextcloud-html:/var/www/html \
    -v nextcloud-apps:/var/www/html/custom_apps \
    -v nextcloud-config:/var/www/html/config \
    -v nextcloud-data:/var/www/html/data \
    -v nextcloud-theme:/var/www/html/themes/ \
  	-e MYSQL_HOST=nextclouddb \
  	-e MYSQL_DATABASE=nextcloud \
  	-e MYSQL_USER=nextcloud \
  	-e MYSQL_PASSWORD=contraseña-nextcloud \
  	-e VIRTUAL_HOST=direcciondetunextcloud.com \
  	-e LETSENCRYPT_HOST=direcciondetunextcloud.com \
  	-e LETSENCRYPT_EMAIL=tu@correo.com \
  	-d --restart always nextcloud

Accediendo por primera vez a tu Nextcloud

Ahora ya puedes acceder a tu nextcloud con la URL de tu sitio 😉

Lo primero que nos va a pedir es dar de alta un usuario y contraseña de administrador, una vez la entramos Nextcloud va a realizar los ultimos pasos de instal·lación y ya lo vamos a tener listo para usar.

A partir de aquí, puedes administrar tu Nextcloud, como tu necesites, recuerda que los datos se encuentran en volumenes persistentes:

docker volume ls
DRIVER              VOLUME NAME
local               nextcloud-apps
local               nextcloud-config
local               nextcloud-data
local               nextcloud-html
local               nextcloud-theme
local               nextclouddb
local               nginx-certs
local               nginx-conf
local               nginx-dhparam
local               nginx-html
local               nginx-vhost

¿Te ha gustado?

¡Suscribete para recibir más articulos como este!

¡Muchas gracias!

Publicado en: Cloud, Linux, Sistemas

Interacciones con los lectores

Comentarios

  1. Alberto Trejo dice

    16 noviembre, 2020 a las 1:07 pm

    Hola, el tutorial me ha servido mucho, pero hay una parte donde no puedo seguir avanzando, al desplegar nextcloud con :
    docker run –name nextcloud –net netnext \
    -v nextcloud-html:/var/www/html \
    -v nextcloud-apps:/var/www/html/custom_apps \
    -v nextcloud-config:/var/www/html/config \
    -v nextcloud-data:/var/www/html/data \
    -v nextcloud-theme:/var/www/html/themes/ \
    -e MYSQL_HOST=nextclouddb \
    -e MYSQL_DATABASE=nextcloud \
    -e MYSQL_USER=nextcloud \
    -e MYSQL_PASSWORD=contraseña-nextcloud \
    -e VIRTUAL_HOST=direcciondetunextcloud.com \
    -e LETSENCRYPT_HOST=direcciondetunextcloud.com \
    -e LETSENCRYPT_EMAIL=tu@correo.com \
    -d –restart always nextcloud
    la consola me arroja
    Unable to find image ‘alberto.nextcloud.com:latest’ locally
    docker: Error response from daemon: pull access denied for alberto.nextcloud.com , repository does not exist or may require ‘docker login’: denied: requested acc ess to the resource is denied.
    See ‘docker run –help’.
    alberto.nextcloud.com es un dominio ficticio que cree en mi red local, no entiendo que hago mal en esto, ojalá puedas ayudarme.

    Responder
  2. Sebastián dice

    3 enero, 2021 a las 7:50 pm

    Hola Joan, gracias por tu trabajo. Al intentar acceder al servidor obtengo un 503 Service Temporaly Unavailable. El servidor lo tengo detrás de un router, pero tengo el puerto 443 y 80 configurados hacia el servidor. Podrías echarme una mano?

    Responder
    • Gonzalo dice

      5 septiembre, 2021 a las 12:23 am

      ¿Conseguiste resolverlo?

      Responder

Responder a Alberto Trejo Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

sidebar

sidebar-alt

Joan Escorihuela ·
  • Política de cookies
  • Contacto
Gestionar consentimiento
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.
  • Administrar opciones
  • Gestionar los servicios
  • Gestionar {vendor_count} proveedores
  • Leer más sobre estos propósitos
Ver preferencias
  • {title}
  • {title}
  • {title}