Tutoriales, noticias y soluciones informáticas

PiServer con Docker – Parte 12: Instalación y configuración de Nextcloud

Equipos corriendo Nextcloud

En los anteriores tutoriales hemos aprendido un montón de cosas sobre docker. Hemos aprendido a instalarlo en nuestro equipo, hemos visto las diferencias entre imágenes, volúmenes y contenedores, hemos instalado unas cuantas aplicaciones sencillas y luego gracias a un proxy nos hemos animado a publicar tímidamente alguna web.

En este artículo pasamos a palabras mayores. Quiero que sepáis que este es un artículo que llevo literalmente años deseando publicar (Se trata de un software que llevo usando en diversos proyectos desde su creación) pero el mero hecho de hacer un esquema de cómo abordar un tutorial en el que explicar su instalación siempre me resultó muy difícil.

Caray. Me estás dando miedo. ¿Tan complicado es eso que nos vas a hacer instalar? ¿Vamos a instalar un software desarrollado por la NASA o algo así?

No. Lo que vamos a instalar es una instancia de Nextcloud, que es algo así como una nube personal realizada con software libre. Nextcloud es un fork de un software que se creó en el 2011 llamado «Owncloud» (que sigue desarrollándose de forma paralela) y que nos va a permitir crear y gestionar nuestro propio servicio de almacenamiento de archivos en internet. En la práctica, se usa de forma similar a Google Drive o Dropbox, pero prestando especial atención a la seguridad. Me explico: al montarse sobre servidores propios, los que opten por usar Nextcloud tendrán control total sobre sus datos y podrán compartir sus archivos de forma segura sin depender de servicios de almacenamiento externos.

La instalación de este servicio sobre Docker yo la dividiría en tres partes:

  1. Preparación del proxy (tiene algo más de chicha en algunos casos que una instalación normal de un sistema en docker).
  2. Instalación del docker de Nextcloud (esto es muy sencillo y a estas alturas ya lo tendréis dominado).
  3. Configuración y corrección de errores.
El punto 3 me desconcierta. ¿Corrección de errores? 
Pantalla de Nextcloud

Sí. Nextcloud tiene unos requisitos… digamos que muy estrictos. Y no me refiero en absoluto a requisitos de hardware, si no de cómo se configura en la máquina que lo hospeda. Hace falta configurar el sistema de forma muy concreta para que Nextcloud funcione sin errores, por lo que hay que dedicarle un rato a preparar todo exactamente tal y cómo lo requiere este sistema. El proxy hay que configurarlo en algunos casos con parámetros «especiales». La instalación del docker en si mismo no es más dificultosa que cualquier docker que hayamos instalado hasta ahora, pero la «post instalación» sí que suele dar bastante guerra.

Por un lado hay que configurar bastantes cosas de forma manual y a pesar de que hay abundante documentación sobre cómo hacerlo, es tan genérica que hay que pararse con calma para ver cómo se configura cada cosa.

Por otro lado, es frecuente que en el momento en el que se produce un cambio en la versión principal de Nextcloud (por ejemplo, el cambio de la versión 23 a la 24), los requisitos de la instalación se vayan incrementando (no requisitos de hardware, si no de configuración), de forma que cuando uno cree que todo le funciona genial en la versión actual, una actualización a una versión superior le hace saltar errores que antes no tenía. Esto sucede porque los desarrolladores están incrementando constantemente requisitos para aumentar la seguridad del sistema.

Así que después de realizar la instalación nos pararemos a ver qué cosas nos faltan por configurar para que nuestro docker no tenga ninguna queja de nosotros.

Venga, agarraos los machos que esta instalación será intensa.

1- Configuración del Nginx Proxy Manager

Normalmente cuando instalo un contenedor sencillito empiezo instalando el contenedor y dejo la configuración del proxy para el final. Sin embargo, como todo lo relativo a Nextcloud, esta parte es «especial».

Soy especial

Tened en cuenta que nos vendrá muy bien tener el proxy preparado para cuando vayamos a probar la página web, así que vamos a empezar configurándolo correctamente.

En el panel de control web de Nginx Proxy Manager, como siempre, nos vamos a Hosts y luego a Proxy Hosts. Ahí pulsamos sobre el botón «Add Proxy Host» y creamos un host similar al resto que hemos hecho. Le ponemos un nombre al dominio y dirigimos el proxy a la IP de la raspberry (o a 127.0.0.1, que es lo mismo). El puerto al que vamos a dirigir este dominio es el 8000. Dejadlo todo más o menos como esta imagen (Con vuestro dominio, por supuesto). Si os fijáis, hasta aquí todo es normal y muy similar a lo que hemos hecho hasta ahora.

Proxy http

Una vez creado el proxy, podemos crear la parte de SSL. Como siempre, hay que crear un certificado de Let’s Encrypt para nuestro Nextcloud, pero ahora sí que hay que tener cuidado. Los botones «Force SSL», «HTTP/2 Support» y «HSTS Enabled» deben estar activados. Si no activáis los tres Nextcloud os funcionará, pero tendréis un error en la zona de «Avisos de seguridad». Así que aseguraos de tener esto bien configurado.

proxy https
Oye... ¿Y si mi proxy no es Nginx Proxy Manager?

Entonces las configuraciones serían también un poco más complicadas de lo habitual. Si tu proxy es apache habría que hacer unas cuantas configuraciones adicionales (editar archivos de configuración) y si es Traefik habría también que modificar parámetros individuales y gestionar correctamente las redes, pero recuerda… este artículo es para principiantes. No nos vamos a meter en esos «fregaos» todavía. Tal y cómo lo estamos haciendo nos va a funcionar sin errores.

2- Creación de la estructura de carpetas en el directorio «dockers».

Ahora vamos a ver algunos puntos sencillos y que os sonarán a todos. Vamos a comenzar la instalación del Docker de Nextcloud, pero antes, como siempre, crearemos la estructura de carpetas que vamos a usar.

Recordad que teníamos una carpeta llamada «dockers» dentro de la carpeta de nuestro usuario (/home/<tu_usuario>/dockers). Ahí siempre ponemos todo lo relacionado con los dockers que vamos desplegando, y ahora no va a haber ninguna excepción. Así que crearemos ahí dentro una carpeta llamada «nextcloud» y dentro de ella cinco carpetas que contendrán todo lo que Nextcloud va a usar. Los comandos necesarios serán éstos:

cd docker
mkdir nextcloud
cd nextcloud
sudo mkdir config && sudo mkdir custom_apps && sudo mkdir data && sudo mkdir db && sudo mkdir themes

3- Creamos el archivo de configuración de docker-compose.

Dentro de la recién creada carpeta «nextcloud», crearemos el archivo de configuración de docker-compose con el comando sudo nano docker-compose.yml. Dentro de él, pondremos el siguiente código, sin modificar ni una coma.

version: '3.3'

services:

  db:
    image: mariadb:latest
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - $DOCKERDIR/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQLROOTPASS
      - MYSQL_PASSWORD=$MYSQLPASS
      - MYSQL_DATABASE=$MYSQLDATABASE
      - MYSQL_USER=$MYSQLUSER

  nextcloud:
    image: nextcloud:latest
    restart: unless-stopped
    ports:
      - "8000:80"
      - "8443:443"
    links:
      - db
    volumes:
      - $DOCKERDIR/nextcloud/config:/var/www/html/config
      - $DOCKERDIR/nextcloud/data:/var/www/html/data
      - $DOCKERDIR/nextcloud/custom_apps:/var/www/html/custom_apps
      - $DOCKERDIR/nextcloud/themes:/var/www/html/themes
    environment:
      - MYSQL_PASSWORD=$MYSQLPASS
      - MYSQL_DATABASE=$MYSQLDATABASE
      - MYSQL_USER=$MYSQLUSER
      - MYSQL_HOST=db
      - TZ=$TZ
      - REDIS_HOST=redis

  redis:
    image: redis:7.0-bullseye
    restart: unless-stopped

Como siempre, pulsamos Control + O para guardar cambios y Control + X para salir del editor.

Guau... Este código parece muy complicado. Tiene muchas... ¿Cosas? 

Sí. Hasta ahora todos los Dockers que habíamos desplegado sólo constaban de un único servicio (un único componente de la arquitectura de la aplicación). Pero en este caso, para esta instalación de Nextcloud vamos a necesitar tres contenedores de servicios, que serán los siguientes:

  • DB: es la base de datos que usará nextcloud para su funcionamiento (Es una base de datos MariaDB)
  • Nextcloud: Es la instancia principal de Nextcloud. Este servicio se encarga de proporcionar la interfaz web y las funcionalidades de colaboración y almacenamiento en la nube y tiene dentro varias tecnologías (servidor web, php, etc…).
  • Redis. Es un servicio que le proporciona a Nextcloud un sistema de caché. O sea, que permite mejorar el rendimiento y la eficiencia del sistema Nextcloud (Sin una caché, Nextcloud iría un poco a pedales por mucho equipo que tengamos).

No es ni por asomo el archivo de configuración de docker compose más complicado que he visto para desplegar Nextcloud (al que se le pueden poner mil cosas más), pero para el común de los mortales nos debería ser más que suficiente. Despliega todo lo necesario para que Nextcloud corra sin errores y fluido, que es lo que nos interesa al fin y al cabo.

4- Creamos el archivo oculto .env

Si el archivo docker-compose.yml es tan largo, ya os supondréis que el archivo de variables de entorno también tendrá algo de chicha. Vamos a crearlo con el comando sudo nano .env y le pondremos el siguiente contenido, pero modificando cada línea por el parámetro correcto.

DOCKERDIR=/home/<tu_usuario>/docker
MYSQLROOTPASS=contraseñaAbsurdamenteComplicada
MYSQLPASS=OtraContraseñaMuycomplicada
MYSQLDATABASE=nextcloudbasedatos
MYSQLUSER=usuariobdnextcloud
TZ=Europe/Madrid

Aseguraos siempre de poner usuarios y contraseñas seguras. Cuando hayáis terminado de editar el archivo, pulsad Control+O para guardar cambios y Control+X para salir del editor.

Ahora, como siempre, vamos a proteger ese archivo con el comando siguiente:

sudo chmod 600 .env

5- Desplegamos la máquina.

Ahora toca desplegar la máquina. Como siempre, lo hacemos con el comando:

sudo docker-compose -p "nextcloud" up -d

Veréis que el proceso de despliegue es mucho más lento que los que hicimos en instalaciones anteriores, pero no es algo que nos tenga que preocupar. Simplemente toca esperar hasta que se ha desplegado por completo.

6- Entramos por primera vez en la web que nos genera.

Vamos a lo divertido. Dejad unos 45 segundos para que se carguen todos los servicios necesarios y luego abrid un navegador de internet e id a la siguiente dirección.

http://minube.midominio.es

Evidentemente, en la dirección tenéis que poner la que hemos configurado en el paso 1. Os aparecerá algo como ésto.

Pagina inicial de Nextcloud

Os va a parecer una tontería, pero fijaos en la barra de direcciones que la dirección que hemos puesto es la correcta. Luego os diré por qué.

En la página que nos sale tendréis que poner un usuario y una contraseña, que serán las credenciales del usuario que vaya a administrar el Nextcloud. No tenéis por qué poner un correo electrónico en el campo de usuario. Como siempre, por favor, poned contraseñas seguras. La de vuestra cuenta de Gmail no vale. Tampoco la de Facebook. La de Tinder menos. Y la de esa página de dudoso contenido ya ni te cuento.

¡¡¡Ahhh!!! ¡Me dejas sin opciones! ¿Puede ser el nombre de mi gato? Ven aquí, Puturrufú. ¡Eres mi amor verdadero! 

Ahora esa contraseña ya la sabemos todos, Usuario Anónimo, así que piensa otra. Después de poner las credenciales, le daremos al botón «instalar» y Nextcloud empezará a hacer algunos ajustes mientras muestra esta imagen en pantalla.

Instalando

Va a pasarse así un ratito (no más de un minuto), así que no desesperéis. Después de un rato tendréis esta otra advertencia en su lugar.

Instalación de aplicaciones recomendadas.

Le daremos a «Instalar las aplicaciones recomendadas» y de nuevo toca esperar. Esta vez tardará un poquito (o bastante) más que en la pantalla anterior. No me seáis ansias y esperad sin tocar nada.

Ansia viva

Podemos saber que la página está haciendo algo porque tenemos este mensaje en la pantalla.

Instalando aplicaciones recomendadas.

Y además de vez en cuando el instalador pasa por las aplicaciones que empiezan a mostrar una ruedita al lado.

Instalando mail

Después de un buen rato, os aparecerá por fin el login hacia la página web, que será algo así.

Ha cambiado la dirección web.
Ah, vale, pero... ¿Por que me ha cambiado la direccion de la página? Ahora me aparece la ip local de la raspberry. Mi no entender. 

Espera, espera, que ahora viene lo divertido. Mira: tal cual está, haz login en tu recién instalado Nextcloud (con el usuario y contraseña que has creado hace un momento), vete al menú del usuario (arriba a la derecha) y pulsa sobre «Configuraciones de administración».

configuraciones de administración.
Vale... ya veo el menú... está cargando algo y... ¡¡¡Virgencita del pantalón vaquero de tiro bajo!!! ¡¡No te lo vas a creer!! Me salen un montón de errores que...

Sí. Te creo. Te sale algo como ésto.

Avisos de seguridad y configuración.
Espera... ¿Y estás tan tranquilo? Primero se me cambia la dirección by-the-face y luego se me llena la pantalla de errores. ¡Pero si tú eres tan alérgico a los errores que hasta el antivirus te pide consejos! ¿Qué está pasando aquí? ¿Quién eres tú y que has hecho con Marcos? Tengo Miedo.
Sheldon estresado.

A ver… Las instalaciones de Nextcloud son así. Hay gente que directamente prefiere ignorar los errores, lo que es otro error en si mismo. Es normal que un Nextcloud recién instalado pida a gritos un montón de ajustes, pero vamos a abordarlos todos con calma para que nuestro Nextcloud no pueda tener ninguna queja de nosotros.

7- Arreglando los errores y configurando el sistema.

Ahora que ha pasado el pánico inicial, vamos a tranquilizarnos y a corregir todo lo que nos pide Nextcloud. Vamos a volver al terminal y vamos a ir a la carpeta dónde está la configuración de Nextcloud con el siguiente comando.

cd /home/<tu_usuario>/docker/nextcloud/config

En primer lugar os recomiendo hacer una copia de seguridad del archivo de configuración por si os cargáis algo poderlo restaurar. Es un archivo muy muy delicado y cómo escribáis algo incorrecto en él la web ya no os funcionará.

Así, así. Cada vez me estás tranquilizando más, macho. 

La copia la podemos hacer con el comando sudo cp config.php /home/<tu_usuario> . Así tendréis una copia del archivo en la carpeta de vuestro usuario.

Ahora vamos a editar el archivo «config.php» con el siguiente comando:

sudo nano config.php

En este archivo tenemos que hacer tres cosas:

Modificamos la línea overwrite.cli.url

Vamos a buscar en el archivo una línea que pone algo similar a ésto:

'overwrite.cli.url' => 'http://192.168.1.15:8000',

Vamos a comentar esa línea (le vamos a poner una almohadilla delante) y vamos a añadir una línea similar pero con la dirección correcta de nuestra web. Debería quedaros algo similar a ésto (acordaos de poner la dirección correcta):

#  'overwrite.cli.url' => 'http://192.168.1.15:8000',
'overwrite.cli.url' => 'https://tunube.tudominio.es',

Por si os interesa saber qué hemos hecho, esta línea se utiliza para definir la URL que debe ser utilizada por los comandos ejecutados a través de la interfaz de línea de comandos (Sí… hay cosas en nextcloud se se pueden hacer desde el terminal, y de hecho alguna haremos más adelante). Tenerla bien definida, entre otras cosas previene posibles errores en scripts y tareas automatizadas que dependen de la URL correcta de Nextcloud.

Modificamos la zona «trusted domains».

Vamos a localizar ahora en el archivo unas líneas similares a éstas.

  'trusted_domains' => 
  array (
    0 => '192.168.1.15:8000',
  ),

Lo que haremos será añadir también el dominio que usamos para nuestro Nextcloud (no comentaremos nada, si no que añadiremos una línea a mayores). Lo dejaremos así.

'trusted_domains' =>
array (
  0 => '192.168.1.15:8000',
  1 => 'tunube.tudominio.es',
),

Estas líneas definen los dominios y direcciones IP que se consideran de confianza para acceder a la instancia de Nextcloud (por lo que rechaza cualquier solicitud proveniente de hosts no listados). Es un ajuste importante de seguridad.

Añadimos… un montón de ajustes a saco.

Lo que hemos hecho hasta ahora en el archivo de configuración ha sido modificar líneas que ya estaban ahí. Ahora vamos a añadir un montón de líneas nuevas. Id al final del texto y a partir de la línea anterior de la que tiene el cierre de paréntesis y el punto y coma ); ponéis todas estas líneas.

### AJUSTES A MAYORES###
'maintenance_window_start' => 1,
  'knowledgebaseEnabled' => true,
  'trusted_proxies' =>
  array (
    0 => '127.0.0.1',
    1 => '192.168.1.15',
    2 => '::1',
  ),
  'default_phone_region' => 'ES',
  'mail_smtpmode' => 'smtp',
  'mail_smtpauth' => 1,
  'mail_sendmailmode' => 'smtp',
  'mail_from_address' => 'pepe@midominio.es',
  'mail_domain' => 'midominio.es',
  'mail_smtphost' => 'midominio-es.servidorseguro.com',
  'mail_smtpport' => '587',
  'mail_smtpname' => 'pepe@midominio.es',
  'mail_smtppassword' => 'lacontraseñadelcorreo',
  'loglevel' => 2,
'overwriteprotocol' => 'https',

No me voy a parar en explicar para qué sirve cada una de las líneas, pero sí os voy a dar indicaciones de qué líneas de todas éstas debéis modificar.

Trusted proxies

La primera parte que debemos modificar es la que pone «trusted proxies». Como seguro que ya estáis suponiendo por el nombre, ahí debe aparecer la lista de proxies de confianza que pueden reenviar solicitudes a la instancia de Nextcloud. En nuestro caso modificaremos la línea que pone:

    1 => '192.168.1.15',

Le borraremos esa ip y le pondremos la ip de nuestro host. Si habéis seguido todos los tutoriales, sólo habría que poner la ip local de nuestra Rasberry. Si estáis usando un proxy que está instalado en otra máquina (otra ip), poned ahí la ip de vuestro proxy (y en este último caso para evitar problemas yo añadiría una línea más con el mismo formato con la ip local del equipo dónde está instalado el nextcloud).

Mail

Seguro que estáis suponiendo que todas las líneas que empiezan por «mail» se refieren a la configuración de una cuenta de correo. Efectivamente: en cada una de esas líneas debemos poner la configuración correspondiente para poder enviar correo desde una cuenta con protocolo «smtp». Por cierto… seguro que muchos queréis poner ahí la configuración de gmail, pero los de Google cada vez lo ponen más difícil para configurar el correo en sitios estándar. Protonmail es una opción cada vez más interesante para estas cosas.

En todo caso, sea cual sea vuestro proveedor de correo, tenéis que poner ahí los datos básicos para enviar mail desde esa cuenta, que son:

  • Dirección de correo.
  • Servidor de correo saliente (SMTP)
  • Usuario del servidor de correo saliente (Ojo: no siempre es la misma que el buzón de correo)
  • Contraseña de ese usuario
  • Tipo de seguridad (TLS, SSL, STARTLS…)
  • Puerto por el que sale el correo.

Y con esto ya estaría (Casi). Pulsamos Control + O para guardar cambios y Control + X para salir de Nano.

8- Probando Nextcloud ¿Cuántos errores nos quedan?

Volvamos a nuestro Nextcloud.

Sí, sí... volvamos. ¡¡A mi no me funciona!! ¿Qué pasa aquí?

Si no te funciona es que has hecho algo mal en el archivo de configuración. Revisa las comas que debe haber al final de las líneas. Si no encuentras el problema, sobreescribe el archivo con la copia que le hemos hecho al principio del paso 7 y vuelve a hacer la configuración.

Como iba diciendo, si no sois tan torpes como el Usuario Anónimo, vuestro Nextcloud debería seguir funcionando correctamente.

Oye,yonosoytorpe.Loquepasaesqueavecesnomefuncionalabarraespaciadora.

Si volvemos a la zona de «Configuraciones de administración», en el apartado «vista general» ya sólo nos deberían quedar uno o dos errores.

Errores relativos a la configuración.

Vamos a dejar esa lista de errores a cero. Empecemos por el de los índices.

Corrigiendo los índices que faltan.

Ese error se refiere a que a la base de datos de Nextcloud le faltan «cosas». Tal y cómo dice el propio error, esto se soluciona fácilmente ejecutando un comando en el equipo en el que está instalado el Nextcloud (El comando es «occ db:add-missing-indices«). Pero vamos a encontrarnos con varios problemas.

El primero es que el comando «occ» está escrito en php, por lo que debe ser ejecutado a través de PHP. Así que el comando final debería ser:

php occ db:add-missing-indices

Pero hay que ejecutarlo con un usuario en concreto (www-data) y en el docker de Nextcloud, lo que complica el comando. Al final, el comando que debemos ejecutar y que nos va a funcionar nos quedará mucho más largo y será algo como ésto.

sudo docker exec --user www-data nextcloud_nextcloud_1 php occ db:add-missing-indices

La parte del comando que dice «nextcloud_nextcloud_1«, hace referencia al nombre del contenedor de Nextcloud. Antes de ejecutar el comando haced un sudo docker ps para comprobar que el nombre de este contenedor es ese u otro. Si no es ese el nombre que ha asignado el sistema al contenedor de nextcloud, tendríais que cambiarlo por el correcto.

Este comando irá revisando todas las tablas y añadirá los índices que nos falten.

Aprovecho para comentaros (Esto ya va fuera del tutorial), que si en algún momento necesitáis abrir un terminal del propio contenedor (para ejecutar cosas dentro de ese contenedor), podéis hacerlo con el siguiente comando.

sudo docker exec -it <nombre_del_contenedor> /bin/bash

Lo que en el contenedor que estamos trabajando se traduciría en este comando:

sudo docker exec -it nextcloud_nextcloud_1 /bin/bash

Podríais salir de ese terminal tecleando exit.

Revisemos los errores de los registros.

Los errores de los registros son fácilmente solucionables… borrando los registros. Pero evidentemente nos están advirtiendo de algo, así que es conveniente echarles un vistazo antes de borrar nada.

Para ello, una forma muy cómoda es ir a la propia web del Nextcloud, al apartado «configuraciones de administración», y en la parte de la izquierda, debajo de todo, pulsar en «registros».

Ahora mismo veo esto en el registro:

Errores a corregir.

En el registro hay dos errores que si no corregimos van a convertirse en recurrentes y que vosotros también vais a tener. Por un lado vemos un error de Cron (que pone que no está instalado) y por otro lado vemos un error de un módulo que se instaló al principio que llama «Collabora online» pero que durante la instalación se llamaba «Nextcloud Office». Vamos a abordar estos dos errores.

Corrijamos el error de Cron.

Nextcloud necesita que cada 5 minutos se realice una tarea de mantenimiento que es esencial para que el sistema funcione correctamente (entre otras cosas genera miniaturas, sincroniza archivos pendientes, resuelve conflictos entre versiones de archivos, envía notificaciones, etc…). Tenemos que hacer que esa tarea se pueda ejecutar cada 5 minutos, y la ejecutaremos de una forma similar a cómo lo hicimos con los índices.

La tarea, en una instalación sin Docker es la siguiente:

php /var/www/html/cron.php

Pero como hay que ejecutarla con el usuario www-data y dentro del docker, el ejecutable va a ser más largo. Quedaría así:

docker exec --user www-data nextcloud_nextcloud_1 php /var/www/html/cron.php

Recordad que el nombre del contenedor puede variar. Revisad con el comando sudo docker ps si se llama también nextcloud_nextcloud_1, y si no es así, cambiad ese trozo del comando.

Ya sabemos qué comando hay que usar. Pero ¿Cómo podemos programarlo para que se ejecute cada 5 minutos? Pues de la misma forma que hemos automatizado copias de seguridad en el artículo anterior: Usando cron.

Vamos a ejecutar este comando.

sudo crontab -e

Y se os abrirá un editor con el archivo de cron. Vamos a añadir esta línea debajo de todo.

*/5 * * * * docker exec --user www-data nextcloud_nextcloud_1 php /var/www/html/cron.php

Como siempre, guardamos cambios con Control + O y cerramos nano con Control + X. Esto hará que ese comando se ejecute cada 5 minutos y habrá corregido ese problema. Pero hay que decirle al interfaz que estamos usando este método para resolverlo. Debemos volver a «Configuraciones de administración» y en «Ajustes básicos», en la zona de «trabajos en segundo plano», indicar que se van a hacer por «Cron». Si todo va bien, en la parte de arriba de esa página podréis ir viendo la última vez que se ha realizado ese trabajo y no debería superar nunca los 5 minutos.

Cron correctamente configurado.

Corrijamos el error de «Collabora Online».

Durante la instalación el sistema nos instaló automáticamente una serie de complementos que dice que son útiles, y entre ellos nos ha colado uno llamado «Nextcloud Office». Ese complemento requiere que tengamos instalado un «servidor» llamado «Collabora Online» para funcionar, cosa que no tenemos actualmente. Algunos dockers más complejos lo instalan junto con Nextcloud, pero es algo que además de añadir complicaciones adicionales a una instalación que ya veis que es algo complicada, va a requerir más recursos. Nosotros tenemos una simple Raspberry, así que no vamos a malgastar recursos en algo que, seamos serios, rara vez se usa en ámbito doméstico (En todo caso si alguien quiere cacharrear, lo puede instalar por su cuenta luego a mayores).

Lo que os recomiendo es simplemente eliminar el complemento «Nextcloud Office» de nuestra instalación y así quedaría resuelto el problema.

Para ello, en el menú de nuestro usuario nos vamos a la zona «Aplicaciones», y en «Tus apss» debes buscar la que se llama «Nextcloud office».

Nextcloud Office - Desactivar.

Simplemente debemos pulsar el botón «Desactivar» que tiene a su derecha y eso dejará deshabilitada esta funcionalidad.

Dejamos a cero los logs conflictivos.

Ya están corregidos todos los errores, pero si vamos de nuevo a «Avisos de seguridad y configuración» veremos que seguimos teniendo los mismos errores. para solucionarlo vamos a ir de nuevo al terminal y vamos a borrar el archivo de logs. Pero no os preocupéis. Si hay incidencias nuevas se escribirá de nuevo ese archivo y nos las mostrará el interfaz.

Para borrarlo sólo tengo que escribir estos comandos en el terminal.

sudo su
cd data
sudo rm nextcloud.log
exit
Borramos logs

Si ahora volvemos a «Avisos de seguridad y configuración» por fin tendremos todo libre de errores.

Avisos de seguridad pasados.

Como habréis comprobado, al final esta instalación no es simplemente «instalar el contendor y a correr», si no que es un poco especialita.

Mami dice que soy especial.

Es muy importante corregir los errores después de la instalación y desgraciadamente es algo que muchos tutoriales omiten por completo. Con todo esto espero que os haya ahorrado unas cuantas horas de brujulear por internet buscando soluciones.

9- El problema de la velocidad.

Ahora que hemos terminado os animo a usar este docker. Instalad en vuestro ordenador y en vuestro móvil los programas para sincronizar los archivos, o subid y bajad archivos a través de la web de Nextcloud y veréis que funciona sin problemas. Pero si sois lo suficientemente exigentes sí que podréis encontrar algo extraño.

Velocidad.

Cuando subáis archivos grandes, veréis que la velocidad de subida (o de bajada) es bastante inferior a la que podría soportar una conexión de internet moderna. ¿Por qué? Pues por lo que os comenté en la parte 8: La conexión está dando saltos. El hecho de que la conexión entre y salga por el contenedor del proxy y por el de Nextcloud no es lo más eficiente del mundo porque Docker los trata como si estuvieran en dos redes diferentes (y es que realmente lo están).

Si queréis tener en subida y bajada toda la velocidad que os pemite vuestra red, tendríais que configurar un proxy como Traefik, que está mucho más preparado que Nginx Proxy Manager para funcionar con contenedores, pero que a la vez es mucho más complicado de gestionar. Esta complicación hace que se quede completamente fuera de los objetivos de esta serie de tutoriales, que están enfocados a principiantes. Tal vez abordemos este tema en otro artículo diferente fuera de esta serie, pero en todo caso intentar enseñaros esto ahora creo que es complicar demasiado las cosas. Lo más que podremos hacer por el momento es una pequeña «ñapa» para optimizar lo máximo posible la conexión y que no dé tantos saltos.

OJO: Si no queréis liaros, podéis saltaros esta parte, que es más técnica y no os proporcionará un rendimiento extraordinario. De hecho hasta os voy a aconsejar no hacer esto que os explico abajo y saltar al siguiente punto dónde explico la problemática de las actualizaciones. No está de mas apender cosas nuevas, pero valoradlo vosotros mismos. Configurar redes os complicará algunas cosas en el futuro y repito: Esta configuración no os devolverá toda la velocidad que os falta en el nextcloud. Sólo os dará un poquito más. Aunque sí que os dará más conocimientos, que nunca están de más.

Creamos una red dentro de docker

Podemos crear una red interna en Docker (digamos… que es algo similar a una VLAN, pero sin serlo). Crear una red dentro de Docker nos permite virtualizar redes para aislar y segmentar de tráfico entre contenedores. Lo ideal sería crear una red interna y meter en ella el docker del Nextcloud y el Nginx Proxy Manager. Al estar ya en la misma red, las conexiones no darán tantos saltos y todo irá algo más fluído.

Vamos a llamar a nuestra red nginx-proxy-network, y la crearemos con el siguiente comando:

sudo docker network create nginx-proxy-network

Añadimos el contenedor de Nextcloud a la red.

Vamos a modificar el archivo docker-compose.yml que hemos hecho para que use esta red recién creada. Así que lo editamos con el comando sudo nano docker-compose.yml y le damos este contenido.

version: '3.8'

networks:
  nginx-proxy-network:
    external: true

services:

  db:
    image: mariadb:latest 
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - $DOCKERDIR/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQLROOTPASS
      - MYSQL_PASSWORD=$MYSQLPASS
      - MYSQL_DATABASE=$MYSQLDATABASE
      - MYSQL_USER=$MYSQLUSER
    networks:
      - nginx-proxy-network

  nextcloud:
    image: nextcloud:latest
    restart: unless-stopped
    ports:
      - "8000:80"
      - "8443:443"
    links:
      - db
    volumes:
      - $DOCKERDIR/nextcloud/config:/var/www/html/config
      - $DOCKERDIR/nextcloud/data:/var/www/html/data
      - $DOCKERDIR/nextcloud/custom_apps:/var/www/html/custom_apps
      - $DOCKERDIR/nextcloud/themes:/var/www/html/themes
    environment:
      - MYSQL_PASSWORD=$MYSQLPASS
      - MYSQL_DATABASE=$MYSQLDATABASE
      - MYSQL_USER=$MYSQLUSER
      - MYSQL_HOST=db
      - TZ=$TZ
      - REDIS_HOST=redis
    networks:
      - nginx-proxy-network

  redis:
    image: redis:7.0-bullseye
    restart: unless-stopped
    networks:
      - nginx-proxy-network

Si os fijáis, las diferencias son dos: Por un lado, al principio hemos añadido este texto.

networks:
  nginx-proxy-network:
    external: true

Estamos diciéndole al docker que va a usar esa red y que es una red externa, es decir, que ya estaba creada previamente y que si yo borro el contenedor de nextcloud, la red seguirá existiendo en nuestro host. La misma red podrá ser usada por varios archivos docker-compose.yml y conenedores (así que si en el futuro queremos optimizar otro Docker de la misma forma, ya quedará todo medio montado).

Por otro lado, en cada una de las instancias, estamos poniendo esto:

    networks:
      - nginx-proxy-network

Es decir, que forzamos a que cada instancia esté dentro de esa red. Cada Docker es un cajón separado y no hay conexión entre ellos si no es a través del host, pero todas las instancias que pongamos en esta red, podrán comunicarse entre ellas de forma directa, sin pasar por el host.

Una vez modificado el docker-compose.yml ejecuto estos dos comandos para aplicar los cambios:

sudo docker-compose down
sudo docker-compose up -d

Añadimos el contenedor de nginx a la red.

Hacemos exactamente lo mismo con Nginx. Nos vamos a su carpeta y editamos el archivo con el comando sudo nano docker-compose.yml. Ponemos el siguiente contenido.

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - $DOCKERDIR/nginx/data:/data
      - $DOCKERDIR/nginx/letsencrypt:/etc/letsencrypt
    networks:
      - nginx-proxy-network

networks:
  nginx-proxy-network:
    external: true

Y de nuevo ejecutamos estos dos comandos desde la carpeta de nginx.

sudo docker-compose down
sudo docker-compose up -d

Cambiamos la configuración del proxy.

Ahora debemos entrar en el panel de control del Nginx Proxy Manager y editar el proxy que hemos realizado en el primer paso. En lugar de apuntar el proxy al host, lo vamos a apuntar al contenedor de Nextcloud (Que está ya en la misma red que el proxy). Así que en «Forward hostname /IP» simplemente ponemos «nextcloud» (que es el nombre de la instancia a la que nos vamos a conectar). Y el puerto también lo vamos a cambiar, porque en la red interna el puerto es el 80, no el 8000. Dejadlo tal que así.

Configuración nueva de proxy

Con esto debería quedar la red completamente optimizada para dar los menores saltos posibles.

Pues todo lo que hemos hecho en este punto no me ha aumentado sustancialmente la velocidad de subida o de bajada. No es para tanto. 

Lo sé. Repito lo que os dije al principio de este punto: Si quieres optimización de verdad hay que usar Traefik, pero es bastante más complicado de configurar. Esta parte la pongo porque seguro que alguien va a acabar diciendo en comentarios que lo mejor es crear una red entre ambos servicios, pero ya veis que no es la solución definitiva al problema (aunque sí que hay que reconocer que es una forma más correcta de abordarlo que no crearla).

Y al meter el Nginx Proxy Manager en esa red, ¿el resto de proxys que hemos hecho (que apuntan hacia otros contenedores, como el de Navidrome) seguirán funcionando?

Sin ningún problema, porque la red permite conexiones externas. El Nginx Proxy Manager puede seguir conectándose al host, por lo que todo lo que hemos hecho antes seguirá funcionando sin modificar absolutamente nada. Eso sí… algún servicio que vamos a configurar en el futuro (como VaultWarden) puede que requiera algún ajuste si hemos puesto el proxy dentro de una red. Lo comentaré en su momento en el artículo correspondiente.

10- Actualización del contenedor.

La actualización, como no, también será algo especialita. Recordad que tenemos un script llamado «actualizar.sh» en nuestra carpeta «home». Podemos añadirle las siguentes líneas al final de todo, antes de la orden de reinicio.

cd /home/<tu_usuario>/docker/nextcloud
sudo docker-compose pull
sudo docker-compose up -d --remove-orphans
sudo docker image prune -f

Acordaos de cambiar <tu_usuario> por el usuario de vuestro equipo. Con esto, el docker se actualizará, pero no la base de datos. Si hay alguna actualización, la página de nextcloud quedará bloqueada al intentar entrar en ella y mostrará un mensaje de error diciendo que hay que actualizar nextcloud por línea de comandos. Para que se actualice la base de datos hay que ejecutar este comando a mayores.

sudo docker exec --user www-data nextcloud_nextcloud_1 php /var/www/html/occ upgrade

No recomiendo poner las dos partes en el actualizador porque el proceso de actualización de la base de datos es muy delicado. Tal vez sea mejor que cuando la web os presente el error de que la actualización está esperando a que se ejecute ese comando, ejecutarlo manualmente. Creo que es un riesgo muy inferior al de poner todo en el mismo archivo.

Con esto sí que es todo. Entiendo que el despliegue de este docker no es muy diferente a otros dockers, pero tiene su complicación el tema de la configuración posterior. ¿Os ha parecido difícil seguir el artículo? ¿Habeis abordado alguno de los errores de otra forma? Como siempre, estaré atento a vuestros comentarios.

Share

14 comentarios

  1. Carlos

    Gracias Marcos, estaba esperando este articulo desde hace tiempo.
    Todavía no he podido aplicar tu anterior entrada, gracias a empezar con tus articulos sobre docker y rescatar mi raspy 4 de 8GB que estaba olvidada he ido descubriendo nuevas cosas en mi conecion dometica a interner (empezar a mapear los puertos necesarios ..una cosa me llevo a otra), por ejemplo que mi proveedor desde hace dos años facilita las credenciales PPPoE y gracias a esto puedes instalar un router neutro, pues bien, buscar que modelo peude venirme mejor y ver que Asus tiene modelos que unsan una version especiar de Linux (openwrt), este router casi se regala en paginas de segunda mano…
    Pues bien, puesto el router neutro Asus RT-AC86U conectado por LAN a la Raspi 4 y que me faltaba?? pues un SAI/UPS, uno que se compra de ocasion casi reglado..para este caso el de marca Riello.. entre el router y el SAi no lelga a 50€ puesto en casa y los 4€ del domino en la pagina que recomendaste pues tengo muuucho para jugar una larga temporada… lo de amule + plex es na maravilla
    Sigo con tus entradas, muy muy interesantes!!

  2. Aglak

    Buenas tardes, muy interesante pero ya e tenido el primer tropiezo. En el punto 6, al dar a «instalar» me sale el siguiente error:
    «Error
    Error while trying to create admin account: An exception occurred in the driver: SQLSTATE[HY000] [1130] Host ‘172.30.0.4’ is not allowed to connect to this MariaDB server»

    Saludos

    • Marcos

      Vete hacia atrás en la página dónde te pone eso y mira a ver si te deja poner los datos de la base de datos (servidor, contraseña, usuario, nombre de la base de datos, etc…). Posiblemente puedas ponerlo a mano ahí mismo. Tienes redes creadas previamente en docker o has cambiado algo de lo que indico? He probado esta configuración como unas 20 veces antes de hacer el artículo y si se sigue al pie de la letra no debería hacer nada de eso.

      • Aglak

        Buenos días, sigo intentando arreglar el problema. He intentado lo que me dices y no doy con ello. He hecho la instalación en 2 rasperrys distintas con 2 sd diferentes empezando desde cero. He buscado información en internet del error pero supera mis conocimientos. ¿Por donde puedo tirar? Gracias

        • Aglak

          Por si alguien estaba en el mismo callejón que yo, os informo que he logrado después de muchas pruebas, y debido a soy un principiante en docker, superar el error simplemente cambiando el puerto 8000 por otro. Así que sigo para delante. Saludos

  3. Gonzalo

    Estoy siguiendo con atención toda esta serie y finalmente hiciste el de Nextcloud. Muchas gracias. Veremos si me sale

  4. antonio

    otro docker genial! gracias!
    este tiene espacio para fotos, tienes en la cabeza instalar alguno específico para manejar biblioteca de fotos personales?

    por otro lado, como este tendrá q manejar una cantidad importante de datos, querría separar la parte de datos en un disco duro aparte del sistema operativo principal y los dockers. qué directorio tendría q montar en el disco duro de almacenamiento, el «data»? veo q es un directorio «especial», encriptado o así. y no sé si una vez montado el docker como nos has explicado se puede cambiar ese directorio, o habría problemas con la base de datos.
    gracias!

  5. Rafa

    Hola Marcos,
    Aprovechando el verano y tu serie de post dedicada a Docker voy a ver si consigo montar un servidor multimedia. Tengo un ordenador viejo en casa que lo voy a resucitar.
    La idea es usar Debian como sistema operativo.
    De momento, tengo un disco pequeño y todo se va a montar en ese disco pero si la cosa funciona, igual compro un par de discos más grandes para el almacenamiento multimedia.

    Me surgen un par de dudad antes de empezar y, como este problema se puede presentar igual en la Raspberry…., pues ahí van las preguntas.

    Si instalo Raspbian en una tarjeta SD ¿Cómo hago para que el contenido multimedia se lea desde un disco USB? ¿La instalación del Docker se sigue haciendo en el disco raiz (home\usurario\docker\…) y en el docker-compose apuntamos hacia el USB?, ¿Todo lo montamos en el USB? (En el caso de usar un ordenador, la idea sería que el sistema operativo estuviera en un disco y el contenido multimedia en otro).

    Otra pregunta, Si la instalación de Debian se ha hecho en una maquina virtual, si se cambia el tamaño del disco, ¿Cómo se puede redimensionar el tamaño del disco?
    Lo mismo sería si se pasa de una tarjeta SD de 1 Tb a una de mayor capacidad. ¿Cómo se redimensionaría el espacio en disco?

    Y la tercera pregunta no corresponde a esta serie de post pero si cuela….

    El problema del redimensionamiento se debe a que mi idea, como he comentado es usar Debian como servidor y montar una especie de RAID 1 con los discos.
    Paso 1 montar todo en un disco de 1 TB.
    Paso 2 si todo funciona, agregar un segundo disco de, por ejemplo, 4 TB y hacer el RAID 1. Como el segundo disco es más grande, no se aprovechará todo el espacio.
    Paso 3 Quitar disco pequeño, comprar otro de 4 TB. En este momento, tocaría redimensionar los discos imagino.

    Otro paso 2 podría ser clonar o copiar todo el contenido del disco pequeño en el grande, redimensionar y posteriormente hacer el RAID.
    ¿Qué opción sería la más adecuada?

  6. Xoán

    Buenas, he intentando montar el nextcloud en una Pi4 y en multiples maquinas virtuales con debian y siempre me pasa lo mismo. En el navegador me sale la pantalla de crear usuario administrador y al darle a instalar me sale el siguiente mensaje:

    Internal Server Error

    The server encountered an internal error and was unable to complete your request.
    Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
    More details can be found in the server log.

    He seguido el tutorial al pie de la letra (la parte de instalación el resto no porque no uso proxy me conecto a todo por vpn) y el compose está copiado directamente del de la publicación y no hay manera.

    Alguna sugerencia de lo que puedo estar haciendo mal?

    • Marcos

      Lo que más me choca de lo que dices es ésto: «la parte de instalación el resto no porque no uso proxy me conecto a todo por vpn». Quiero suponer que te refieres a que quieres acceder al nextcloud a través de una ip local, del tipo http://192.168.177.100:8000 ¿No es así? Eso se puede hacer… pero… digamos que van a pasar cosas raras. Si quieres hacerlo así:

      – Asegúrate de que el docker compose sea exactamente igual.
      – Asegúrate de que tanto el docker compose como el archivo .env tengan los permisos correctos, usando el comando «ls -l -h -a»
      – Intenta poner contraseñas de 10 caractéres en el .env, con números, mayúsculas y minúsculas. No pongas símbolos de momento. A lo mejor hay algún problema con los símbolos que empleas.
      – Comprueba si el sistema te da algún error al desplegarse. Si es así dínoslo.
      – IMPORTANTE: Recueda que después de desplegar la máquina debes esperar un tiempo. Al menos intenta esperar un minuto, pero te recomiendo dos o tres. Así te aseguras de que el sistema esté completamente levantado. Este sistema tarda bastante en crear todo lo que necesita.
      – Intenta poner contraseñas sin símbolos en el login. DE nuevo a ver si estás poniendo algún símbolo que haga fallar el sistema.
      – Haz un sudo docker ps para ver el nombre del contenedor, Luego haz esto desde la carpeta dónde está tu docker-compose.yml.

      sudo docker-compose logs

      y luego esto

      sudo docker logs --timestamps --tail 100

      Mira a ver si entre los logs tienes la causa del fallo cuando se provoque. Un error tan catastrófico debería tener algo reflejado en los logs.

  7. Kersis

    Buenas, Estoy intentando instar este docker, pero no lo consigo… Tengo error parece del vm.overcommit_memory en redis.
    https://github.com/nextcloud/all-in-one/discussions/1731
    Lo he puesto a valor 1 y nada.. lo he reinstalado todo y nada.. no paso de ahi…
    en el navegador aparece esto »
    Internal Server Error
    The server encountered an internal error and was unable to complete your request.
    Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
    More details can be found in the server log.»
    Y ya en los logs no veo error despues de cambiar a 1 el vm.commit ese…
    Alguna solución??
    Un saludo.

  8. Paco

    Muy bueno pero en mi Rasberry pi donde se guardan los ficheros y fotos que yo envió a esta nube en mi tarjeta de memoria y si es así tengo un disco externo en el USB podría decir de alguna manera que se guarden en el y gracias.

  9. Arturo

    Hola,
    ¿A alguien se le ha quedado Nextcloud en modo mantenimento?
    Iba todo bien (llevaba funcionando varios días) y, al reiniciar, el equipo se ha quedado en este modo y no sale de allí.
    Si se deshabilita el modo mantenimiento en config.php el mensaje que aparece es que hay que actualizar manualmente nextcloud pero no veo como.
    Gracias

  10. victor

    Muchas gracias por el muy buen tutorial, se instalo todo perfecto al seguir al pie de la letra, pero tengo 3 sugerencias de corregir, comentar que uso ubuntu server 24.

    Hay varios errores relativos a su configuración.

    Algunos archivos no han pasado la verificación de integridad. List of invalid files… Rescan… Para más detalles compruebe la documentación ↗.

    Su servidor web no está configurado apropiadamente para resolver URLs `.well-known`, falló en: `/.well-known/caldav` Para más detalles compruebe la documentación ↗.
    One or more mimetype migrations are available. Occasionally new mimetypes are added to better handle certain file types. Migrating the mimetypes take a long time on larger instances so this is not done automatically during upgrades. Use the command `occ maintenance:repair –include-expensive` to perform the migrations.

    segun lei por los foros, alguno de ellos se va a corregir con alguna actualizacion…. te han salido alguna vez? sabes como corregirlos ?

    Muchas gracias

Deja una respuesta

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

© 2024 Flopy.es

Tema por Anders NorenArriba ↑

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies