VPS con Ubuntu 24.04 (2 GB de RAM recomendados), Docker con Docker Compose (guía aquí) y un subdominio, por ejemplo nube.tudominio.com, apuntando a su IP. Usaremos la imagen oficial detrás de Nginx como proxy inverso.
Antes de copiar
En los comandos verás tudominio.com: sustitúyelo siempre por tu dominio real.
Crear la estructura de directorios
Separa datos, configuración y base de datos en carpetas propias: facilita las copias de seguridad y permite mover el servicio de máquina.
sudo mkdir -p /opt/nextcloud/{db,html,data}
cd /opt/nextcloud
Definir el docker-compose.yml
Este compose levanta Nextcloud y MariaDB. Fíjate en el puerto: 127.0.0.1:8080 hace que Nextcloud solo sea accesible desde el propio servidor, a través del proxy.
services:
db:
image: mariadb:10.11
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: cambia-esto
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: cambia-esto-tambien
app:
image: nextcloud:stable-apache
restart: unless-stopped
ports: ["127.0.0.1:8080:80"]
depends_on: [db]
volumes:
- ./html:/var/www/html
- ./data:/var/www/html/data
environment:
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: cambia-esto-tambien
NEXTCLOUD_TRUSTED_DOMAINS: nube.tudominio.com
OVERWRITEPROTOCOL: https
Docker se salta UFW
Un puerto publicado como "8080:80" queda abierto a Internet aunque UFW diga lo contrario, porque Docker escribe sus propias reglas de firewall. Publica siempre en 127.0.0.1 lo que vaya detrás de un proxy.
Arrancar y completar el asistente
Levanta el stack, configura el proxy siguiendo la guía de Nginx (apuntando a 127.0.0.1:8080) y entra en https://nube.tudominio.com para crear la cuenta de administrador.
sudo docker compose up -d
sudo docker compose logs -f app
Ajustes recomendados tras la instalación
Estos comandos eliminan las advertencias del panel de administración (cron, índices de la base de datos).
sudo docker compose exec -u www-data app php occ db:add-missing-indices
sudo docker compose exec -u www-data app php occ maintenance:repair --include-expensive
# Cron real cada 5 minutos (sustituye al modo AJAX)
echo "*/5 * * * * root docker compose -f /opt/nextcloud/docker-compose.yml exec -u www-data -T app php cron.php" \
| sudo tee /etc/cron.d/nextcloud
¿Prefieres que lo haga por ti?
Lo implemento por ti por 130 €, con la configuración de seguridad inicial y esta guía aplicada a tu servidor.