[TUTORIAL] Cómo montar una nube Nextcloud

Spanish Forum

Moderator: tomeu

Post Reply
User avatar
Wibol
Level 5
Level 5
Posts: 584
Joined: Fri Nov 27, 2015 7:00 am
Location: España

[TUTORIAL] Cómo montar una nube Nextcloud

Post by Wibol »

Vamos a proceder a la instalación y configuración de un servidor Nextcloud que nos permitirá administrar y disfrutar de nuestro propio servicio de "almacenamiento en la nube" sin depender de Google, Dropbox, etc... y alojando los archivos en un equipo gestionado por nosotros mismos, ya sea un sistema local o VPS. La prestación del servicio la haremos sobre "Docker", que es un entorno de ejecución de programas aislado del sistema (similar a una máquina virtual), lo que permite la instalación de librerias, lenguajes y todo lo necesario sin afectar a Linux. Para esta tarea usaremos varios contenedores en los que corren Apache, PHP, Nextcloud, MariaDB, Letsencrypt-companion y Nginx como proxy, todos ellos ejecutándose sobre Alpine Linux. Nextcloud dispone de clientes instalables en Linux, Windows, Android e iOS.

Requisitos
  • Apuntar un sub/dominio hacia nuestra IP pública mediante un registro A.
  • Abrir los puertos 80 y 443 en el router y redirigirlos hacia la IP fija local de nuestro equipo servidor.
  • Abrir los puertos 80 y 443 en Linux en el caso de tener activado el cortafuegos.
Si pretendemos prestar el servicio desde el ámbito doméstico, lo usual es que dispongamos de una IP dinámica, lo que hará que cambie de vez en cuando dejando nuestro equipo inaccesible desde internet. Si este es nuestro caso, podemos superar este problema haciendo uso de un servicio DDNS gratuíto como el de DuckDNS.

Instalación

Instalamos los paquetes necesarios:

Code: Select all

apt install docker.io docker-compose
Activamos el servicio:

Code: Select all

sudo systemctl enable --now docker
Por motivos de seguridad, agregamos el usuario actual al grupo "docker" para poder lanzar los contenedores sin permisos "root":

Code: Select all

sudo usermod -a -G docker $USER
Reiniciamos Linux para que entre en vigor el comando anterior. ¡Atención!, agregar este tutorial a Marcadores y GUARDAR TODO antes de cerrar sesión.
Comprobamos que el servicio está corriendo y es accesible desde nuestro usuario:

Code: Select all

docker version
Creamos la estructura de directorios necesaria en nuestro "Home".

Code: Select all

mkdir -p ~/.docker/nextcloud-nginx-lets/proxy
Introducimos completo el siguiente comando para crear y añadir contenido al archivo "docker-compose.yml":

Code: Select all

echo "version: '3'

services:
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD=yes
    env_file:
      - var.env

  app:
    image: nextcloud:apache
    depends_on:
      - db
    restart: always
    volumes:
      - nextcloud:/var/www/html
    networks:
      - proxy-tier
      - default
    environment:
      - MYSQL_HOST=db
    env_file:
      - var.env

  proxy:
    build: ./proxy
    restart: always
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: 'true'
    volumes:
      - certs:/etc/nginx/certs:ro
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - proxy-tier
    ports:
      - 80:80
      - 443:443

  letsencrypt-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    depends_on:
      - proxy
    restart: always
    volumes:
      - certs:/etc/nginx/certs
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - proxy-tier

volumes:
  db:
  nextcloud:
  certs:
  vhost.d:
  html:

networks:
  proxy-tier:" > ~/.docker/nextcloud-nginx-lets/docker-compose.yml
Introducimos completo el siguiente comando para crear y añadir contenido al archivo "Dockerfile":

Code: Select all

echo "FROM jwilder/nginx-proxy:alpine
COPY uploadsize.conf /etc/nginx/conf.d/uploadsize.conf" > ~/.docker/nextcloud-nginx-lets/proxy/Dockerfile
Introducimos completo el siguiente comando para crear y añadir contenido al archivo "uploadsize.conf":

Code: Select all

echo "client_max_body_size 1G;
proxy_request_buffering off;" > ~/.docker/nextcloud-nginx-lets/proxy/uploadsize.conf
Podemos editar el valor "client_max_body_size 1G") que establece el tamaño máximo de archivo a subir. Por defecto es de 1GB.
Introducimos completo el siguiente comando para crear y añadir contenido al archivo "var.env" y editamos el valor de las variables:

Code: Select all

echo "MYSQL_DATABASE=NombreBaseDatos
MYSQL_USER=NombreUsuarioAdministrador
MYSQL_PASSWORD=ContraseñaUsuarioAdministrador
VIRTUAL_HOST=sub.dominio.tld
LETSENCRYPT_HOST=sub.dominio.tld
LETSENCRYPT_EMAIL=usuario@dominio.tld" > ~/.docker/nextcloud-nginx-lets/var.env
Todos los valores deben ser ajustados a nuestro gusto o necesidad:
  • MYSQL_DATABASE= Nombre de la base de datos que se creará en el primer inicio de Nextcloud.
  • MYSQL_USER= Nombre del usuario administrador que usaremos para configurar Nextcloud.
  • MYSQL_PASSWORD= Contraseña del usuario administrador que usaremos para configurar Nextcloud.
  • VIRTUAL_HOST= URL de acceso a Nextcloud.
  • LETSENCRYPT_HOST= URL para la cual Let's Encrypt expedirá el certificado. Debe coincidir con el valor de "VIRTUAL_HOST".
  • LETSENCRYPT_EMAIL= Correo electrónico asociado al certificado.
Si hemos introducido el anterior comando sin modificar sus valores, aún podemos editarlo con:

Code: Select all

nano ~/.docker/nextcloud-nginx-lets/var.env
Con la configuración predeterminada los datos subidos a la nube se almacenarán en la raíz del sistema, lo que puede llenar la partición y provocar problemas al sistema operativo si hacemos un uso intensivo de ella y no hemos asignado una cuota de disco a los usuarios. Si queremos que el almacenamiento resida en otra ubicación, debemos crear un directorio para ello:

Code: Select all

sudo mkdir -p /mnt/particion/directorio/
Cambiar su propietario:

Code: Select all

sudo chown www-data /mnt/particion/directorio/
Y editar el archivo "docker-compose.yml" para que la sección "volumes:" quede de la siguiente manera:

Code: Select all

volumes:
  db:
  nextcloud:
    driver: local
    driver_opts:
      type: none
      device: /mnt/particion/directorio/
      o: bind
  certs:
  vhost.d:
  html:

Ejecución

Para ejecutar Nextcloud nos movemos al directorio que contiene el archivo "docker-compose.yml":

Code: Select all

cd ~/.docker/nextcloud-nginx-lets/
Y ejecutamos:

Code: Select all

docker-compose up -d
En el primer inicio Docker debe descargar los archivos "Dockerfile", construir las "imágenes" y lanzar los "contenedores", lo que puede durar alrededor de un minuto.

Comandos aplicables
  • docker-compose up : Crea e inicia en primer plano los contenedores, volúmenes y redes especificados en "docker-compose.yml". Si las imágenes no existen, descarga los archivos "Dockerfile", construye las "imágenes" y lanza los "contenedores". Este modo provoca un volcado del log en la terminal que es muy útil para el diagnóstico de errores. Los contenedores se detienen tras cerrar la terminal o pulsar Control + C.
  • docker-compose up -d : Crea e inicia en segundo plano los contenedores, volúmenes y redes especificados en "docker-compose.yml". Si las imágenes no existen, descarga los archivos "Dockerfile", construye las "imágenes" y lanza los "contenedores". Los contenedores siguen ejecutándose tras cerrar la terminal.
  • docker-compose up -d --build : Inicia en segundo plano los contenedores, volúmenes y redes especificados en "docker-compose.yml" reconstruyendo las imágenes. Los contenedores siguen ejecutándose tras cerrar la terminal.
  • docker-compose down : Detiene y elimina los contenedores y redes especificados en "docker-compose.yml", conservando las imágenes y volúmenes.
  • docker system prune -a : Elimina todas las imágenes y redes no vinculadas a un contenedor, manteniendo los volúmenes para conservar los datos.
  • docker volume prune : Elimina todos los volúmenes no vinculados a un contenedor. Se perderán todos los datos almacenados.

Configuración

Una vez lanzado Nextcloud y transcurridos un par de minutos para que se realicen todos los procedimientos iniciales, podemos acceder a su panel de control desde:

Code: Select all

https://sub.dominio.tld
Screenshot_2020-12-18 Nextcloud.png

Se nos pedirá un nombre de usuario y contraseña para la cuenta del administrador (ésta NO debe usarse para iniciar sesión desde los clientes). Usamos los mismos que especificamos en el archivo "var.env".

Si además del almacenamiento en la nube, queremos hacer uso de otras aplicaciones como sincronización de calendarios, mensajería, etc... dejamos marcada la casilla. Por último pulsamos el botón y esperamos a que acabe todo el proceso.

Ya sólo nos resta configurar Nextcloud a nuestro gusto y crear las cuentas de usuario standard que sean necesarias. Tras la instalación de los clientes en Linux, Windows, Android y/o iOS introducimos URL, usuario y contraseña e iniciamos sesión en nuestra nube privada.

Screenshot_2020-12-18 Usuarios - Nextcloud.png
Si reiniamos varias veces el servicio en poco tiempo, Let's Encrypt nos baneará durante algunos días el subdominio o incluso la IP.

Desinstalación

Para limpiar el sistema y devolverlo a su estado anterior, lanzamos consecutivamente los siguientes comandos:

Code: Select all

docker-compose down

Code: Select all

docker system prune -a

Code: Select all

docker volume prune
Por último:

Code: Select all

sudo systemctl disable docker

Code: Select all

apt purge docker.io docker-compose
Last edited by Wibol on Thu Jan 07, 2021 2:00 pm, edited 1 time in total.

Antes de realizar una consulta, no olvides:
User avatar
JCSenar
Level 11
Level 11
Posts: 3631
Joined: Sat Sep 06, 2014 6:26 pm
Location: Irun, España
Contact:

Re: [TUTORIAL] Cómo montar una nube Nextcloud

Post by JCSenar »

¡Gracias, Wibol! :D
Si tu consulta ha sido resuelta, por favor, edita tu primer mensaje y añade [SOLUCIONADO] al título. Gracias.
Post Reply

Return to “Español (Spanish)”