# Nextcloud (LinuxServer): Plataforma de almacenamiento y colaboración en la nube autohospedada

---

### Introducción

Este artículo documenta el despliegue de Nextcloud como nube privada autogestionada, utilizando contenedores Docker y una base de datos MariaDB dedicada. El objetivo es disponer de un servicio estable, mantenible y portable, sin acoplar la configuración al host ni perder datos ante recreaciones de contenedores.

La instalación se integra con el resto del entorno mediante reverse proxy (Caddy) y volúmenes persistentes, manteniendo una separación clara entre aplicación, datos y base de datos.

**Nota importante sobre la imagen utilizada:** este despliegue **no utiliza la imagen oficial de Nextcloud**, sino la imagen mantenida por **LinuxServer.io**, que introduce ajustes propios orientados a entornos self-hosted (gestión de permisos, estructura de volúmenes, variables adicionales, etc.). Esto implica que ciertas rutas y comportamientos pueden diferir respecto a la imagen oficial.

---

### Enfoque general / Arquitectura

El despliegue sigue un esquema clásico y probado:

* Contenedor Nextcloud como frontend web y lógica de aplicación.
* Contenedor MariaDB aislado como backend de base de datos.
* Red Docker dedicada para evitar interferencias con otros servicios.
* Volúmenes persistentes para configuración, datos de usuario y base de datos.
* Variables sensibles desacopladas mediante `.env`.

Este enfoque permite:

* Actualizaciones limpias de imágenes.
* Backups sencillos a nivel de volumen.
* Reubicación del servicio sin migraciones complejas.

---

### Requisitos previos

* Docker y Docker Compose operativos.
* Almacenamiento persistente suficiente para datos de usuario.
* Puerto disponible o integración con reverse proxy.
* Acceso al repositorio de configuración en Gitea.

---

### Desarrollo

#### Qué se hizo y por qué

* **Uso de imagen LinuxServer.io**
  Se opta por la imagen de LinuxServer.io por su enfoque consistente en permisos (PUID/PGID), claridad en la separación de volúmenes y buen mantenimiento en entornos Docker persistentes. Esta decisión prioriza estabilidad operativa frente a la fidelidad absoluta a la imagen oficial.

* **Separación de secretos**
  Todas las credenciales y parámetros sensibles se gestionan mediante un archivo `.env`, evitando hardcodeo y facilitando rotación de claves.

* **Base de datos dedicada**
  MariaDB se ejecuta en un contenedor independiente para aislar carga, facilitar backups y evitar dependencias internas del contenedor de Nextcloud.

* **Volúmenes explícitos**
  La configuración y los datos viven fuera de los contenedores, garantizando persistencia ante recreaciones o cambios de imagen.

* **Red Docker propia**
  Se define una red específica para Nextcloud, reduciendo ruido y riesgos de exposición accidental entre servicios.

* **Sin HTTPS interno forzado**
  El TLS se delega al reverse proxy. Esto evita certificados autofirmados innecesarios dentro del contenedor y simplifica la cadena de confianza.

---

#### Configuración utilizada (solo enlaces)

Los archivos de configuración se mantienen versionados en Gitea:

* [Repositorio en Gitea](https://gitea.jtrapero.eu.org/R4di04kt1v3/ChronosCMPS/src/branch/main/Almacenamiento/Nextcloud%20-%20LinuxServer)

> No se incluyen configuraciones completas en el artículo para evitar duplicidades y errores de copia.

---

### Validación

Comprobaciones mínimas tras el despliegue:

* Contenedores en estado `running` sin reinicios constantes.
* Logs de Nextcloud sin errores críticos de conexión a base de datos.
* MariaDB aceptando conexiones desde el contenedor de Nextcloud.
* Acceso correcto a la interfaz web desde el puerto o dominio configurado.
* Persistencia de datos tras reiniciar contenedores.

---

### Decisiones importantes o problemas detectados

* **Evitar HTTPS autofirmado interno**
  Nextcloud tiende a generar certificados propios si detecta HTTPS. En entornos con reverse proxy externo, esto solo añade fricción y advertencias innecesarias.

* **Montaje de almacenamiento externo**
  Se deja preparado el montaje de rutas adicionales (`/mnt`) para futuras integraciones con almacenamiento externo o datasets grandes.

---

### Resumen breve

* Nextcloud desplegado con Docker y MariaDB dedicada.
* Uso de imagen LinuxServer.io en lugar de la oficial.
* Configuración desacoplada y versionada en Gitea.
* Volúmenes persistentes para datos y configuración.
* Arquitectura simple, estable y fácil de mantener.
* TLS gestionado externamente mediante reverse proxy.

---

### Referencias

* [Documentación oficial de Nextcloud](https://docs.nextcloud.com/)
* [Imagen Docker Nextcloud de LinuxServer.io](https://docs.linuxserver.io/images/docker-nextcloud/)
* [Nextcloud + Caddy: eliminar HTTPS autofirmado](https://wiki.jtrapero.eu.org/books/contenedores-proxy-y-trafico-http/page/nextcloud-caddy-elimina-el-https-autofirmado-en-docker)