• 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

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

Deja una respuesta 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
  • Aviso legal
  • Contacto