Instalación de Nextcloud en un VPS: nube personal con Docker Compose, Nginx y Let's Encrypt
TL;DR
En esta guía detallada, configuraremos paso a paso su propio almacenamiento en la nube Nextcloud seguro en un servidor privado virtual (VPS), utilizando la contenerización con Docker Compose. Desplegaremos Nextcloud, una base de datos MariaDB y Redis para el almacenamiento en caché, configuraremos Nginx como proxy inverso y aseguraremos el cifrado del tráfico con certificados SSL gratuitos de Let's Encrypt, válidos hasta 2026.
Desplegará una nube personal Nextcloud completamente funcional y segura.
Se utiliza Docker Compose para una fácil gestión de todos los componentes.
Nginx servirá como proxy inverso para Nextcloud, proporcionando acceso por nombre de dominio.
Let's Encrypt proporcionará certificados HTTPS gratuitos para la protección de datos.
La guía incluye la configuración de copias de seguridad y el mantenimiento básico del sistema.
Todos los comandos y configuraciones han sido probados y están listos para usar.
¿Qué configuramos y por qué?
Diagrama: Qué configuramos y por qué
En el mundo moderno, donde la confidencialidad de los datos es cada vez más valiosa, poseer su propio almacenamiento en la nube adquiere una relevancia especial. Configuraremos Nextcloud, un software potente, flexible y de código abierto que permite crear un análogo completo de servicios de nube comerciales como Google Drive o Dropbox, pero bajo su control total.
Al final, obtendrá su propia nube, accesible a través de su nombre de dominio mediante HTTPS, donde podrá almacenar archivos, compartirlos con otros, sincronizar datos entre dispositivos, ver documentos, fotos y videos, y utilizar una multitud de aplicaciones adicionales para colaboración, calendarios, contactos y mucho más. Es la solución ideal para desarrolladores, fundadores individuales, equipos y usuarios privados que valoran su privacidad e independencia de las grandes corporaciones.
Existen alternativas, como los servicios en la nube (Google Drive, Dropbox, OneDrive) u otras soluciones autoalojadas (ownCloud, Seafile). Los servicios de nube comerciales son convenientes, pero usted confía sus datos a un tercero, lo que puede ser inaceptable desde el punto de vista de la privacidad y el control. Las soluciones autoalojadas, como Nextcloud, le permiten controlar completamente la infraestructura, los datos y la seguridad. Al implementar Nextcloud en su propio VPS, obtiene la máxima flexibilidad, escalabilidad y beneficio económico a largo plazo, evitando suscripciones y restricciones de los proveedores.
¿Qué configuración de VPS se necesita para esta tarea?
Diagrama: Qué configuración de VPS se necesita para esta tarea
La elección de un VPS adecuado es clave para el funcionamiento estable de Nextcloud. Los requisitos de recursos dependen del número de usuarios, el volumen de datos y la intensidad de uso.
Requisitos mínimos para Nextcloud (para 2026):
Procesador (CPU): 1-2 vCPU. Para un solo usuario o un grupo pequeño (hasta 5-10 personas), 1 vCPU es suficiente. Para un mayor número de usuarios o un uso activo de las aplicaciones de Nextcloud, se recomiendan 2 vCPU.
Memoria RAM: Mínimo 2 GB. Se recomiendan 4 GB para un funcionamiento cómodo con Docker Compose, la base de datos y Redis. Si se planea un uso activo de aplicaciones (por ejemplo, Collabora Online), se necesitarán 6-8 GB de RAM.
Disco: Almacenamiento SSD de 100 GB o más. El SSD es crítico para el rendimiento de la base de datos y la velocidad de acceso a los archivos. El tamaño del disco debe elegirse con margen, considerando el volumen de datos planificado y el espacio para copias de seguridad.
Red: Conexión de red estable con una velocidad de 100 Mbit/s o más. Para grandes volúmenes de carga/descarga de archivos, se desea un canal de 1 Gbit/s.
Plan de VPS recomendado para Nextcloud (hasta 20-30 usuarios):
Para un rendimiento y estabilidad óptimos, especialmente al usar funciones adicionales de Nextcloud y para un equipo pequeño, se recomienda un VPS con los siguientes parámetros:
CPU: 2 vCPU
RAM: 4-6 GB
Disco: 200-500 GB NVMe SSD (o SSD SATA rápido)
Red: Puerto de 1 Gbit/s
Para alquilar un VPS con las características indicadas, puede considerar proveedores que ofrezcan tarifas equilibradas. Asegúrese de que el plan elegido se ajuste a sus necesidades de volumen de almacenamiento y número de usuarios.
Cuándo se necesita un servidor dedicado y no un VPS:
Un servidor dedicado se vuelve necesario si:
Planea atender a un gran número de usuarios (más de 50-100) con una carga intensiva.
Se requiere un rendimiento y una estabilidad máximos, inalcanzables con recursos virtualizados.
Se necesitan configuraciones de hardware específicas (por ejemplo, arreglos RAID para datos, GPU para tareas de IA).
Existen requisitos estrictos de aislamiento y seguridad a nivel físico.
Para la mayoría de las tareas personales y de equipos pequeños, un VPS es la solución óptima y económicamente ventajosa. Si planea implementar Nextcloud para más de 100 usuarios o con una carga muy alta, debería considerar un servidor dedicado adecuado.
Ubicación del VPS: qué factores influye
La elección de la ubicación del VPS influye en varios factores clave:
Latencia: Cuanto más cerca esté el servidor de sus usuarios principales, menor será la latencia y más rápida la respuesta.
Legislación: Diferentes países tienen diferentes leyes sobre el almacenamiento de datos. Elija una ubicación que cumpla con sus requisitos de privacidad y jurisdicción.
Costo: Los precios de los VPS pueden variar según la región.
Ancho de banda: Algunas ubicaciones pueden ofrecer condiciones más favorables para el tráfico de red.
Para Nextcloud, se recomienda elegir una ubicación lo más cercana posible a la mayoría de los usuarios para garantizar la mejor experiencia de usuario.
Preparación del servidor
Diagrama: Preparación del servidor
Antes de instalar Nextcloud, es necesario realizar una configuración básica de un VPS nuevo. Utilizaremos Ubuntu Server 24.04 LTS, actualizado para 2026, como un sistema operativo estable y ampliamente utilizado.
1. Conexión al servidor
Primero, conéctese a su VPS por SSH, utilizando las credenciales proporcionadas por su proveedor de hosting (normalmente el usuario root y una contraseña).
ssh root@ВАШ_IP_АДРЕС_VPS
2. Actualización del sistema
Siempre comience actualizando la lista de paquetes y los paquetes instalados a las últimas versiones.
sudo apt update && sudo apt upgrade -y
La actualización del sistema garantiza que tenga todas las últimas correcciones de seguridad y estabilidad.
3. Creación de un nuevo usuario con permisos sudo
Trabajar como usuario root no es seguro. Cree un nuevo usuario y otórguele permisos sudo.
sudo adduser nextcloudadmin # Creamos un nuevo usuario
sudo usermod -aG sudo nextcloudadmin # Añadimos el usuario al grupo sudo
Ahora puede cerrar la sesión de root e iniciar sesión como nextcloudadmin.
exit # Salir de la sesión root
ssh nextcloudadmin@ВАШ_IP_АДРЕС_VPS # Iniciar sesión como nuevo usuario
4. Configuración de claves SSH (recomendado)
Para mejorar la seguridad, se recomienda usar claves SSH en lugar de contraseñas. Genere una clave en su máquina local (si aún no lo ha hecho).
ssh-keygen -t rsa -b 4096 # En su máquina local
Copie la clave pública al servidor:
ssh-copy-id nextcloudadmin@ВАШ_IP_АДРЕС_VPS
Luego, desactive la autenticación por contraseña para root y/o para todos los usuarios, editando el archivo /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
Encuentre y modifique las siguientes líneas:
#PermitRootLogin yes
PermitRootLogin no # Desactivamos el inicio de sesión para root
PasswordAuthentication no # Desactivamos la autenticación por contraseña
ChallengeResponseAuthentication no # Desactivamos la autenticación por desafío/respuesta
UsePAM no # Desactivamos PAM si PasswordAuthentication está deshabilitado
Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X). Reinicie el servicio SSH.
sudo systemctl restart sshd
IMPORTANTE: Antes de deshabilitar la autenticación por contraseña, ¡asegúrese de poder iniciar sesión con una clave SSH! Abra una nueva sesión SSH con la clave antes de cerrar la actual.
5. Configuración del firewall (UFW)
UFW (Uncomplicated Firewall) es una interfaz fácil de usar para iptables. Lo configuraremos para permitir SSH, HTTP y HTTPS.
sudo apt install ufw -y # Instalamos UFW, si no está instalado
sudo ufw allow OpenSSH # Permitimos SSH (puerto 22)
sudo ufw allow http # Permitimos HTTP (puerto 80)
sudo ufw allow https # Permitimos HTTPS (puerto 443)
sudo ufw enable # Habilitamos el firewall
sudo ufw status # Verificamos el estado del firewall
Confirme la activación del firewall presionando y.
6. Instalación de Fail2Ban
Fail2Ban escanea los registros del servidor en busca de actividad sospechosa (por ejemplo, múltiples intentos fallidos de inicio de sesión SSH) y bloquea temporalmente las direcciones IP de los atacantes.
sudo apt install fail2ban -y # Instalamos Fail2Ban
sudo systemctl enable fail2ban # Habilitamos el inicio automático de Fail2Ban
sudo systemctl start fail2ban # Iniciamos Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Copiamos la configuración para modificaciones
sudo nano /etc/fail2ban/jail.local
En el archivo jail.local, puede configurar parámetros como bantime (tiempo de bloqueo) y findtime (período para detectar intentos).
Guarde y cierre el archivo, luego reinicie Fail2Ban.
sudo systemctl restart fail2ban
El servidor está listo para la instalación del software principal.
Instalación de software — paso a paso
Diagrama: Instalación de software — paso a paso
Utilizaremos Docker y Docker Compose para desplegar Nextcloud, MariaDB, Redis y Nginx. Este enfoque proporciona aislamiento, simplifica la gestión y la actualización de componentes.
1. Instalación de Docker Engine (válido para 2026)
Eliminamos versiones antiguas de Docker, si las hay:
Añadimos el usuario actual al grupo docker para evitar usar sudo al trabajar con Docker:
sudo usermod -aG docker ${USER}
Para aplicar los cambios de grupo, debe cerrar sesión y volver a iniciarla:
exit
ssh nextcloudadmin@ВАШ_IP_АДРЕС_VPS
Verificamos la instalación de Docker:
docker run hello-world # Ejecutamos un contenedor de prueba
2. Instalación de Docker Compose (válido para 2026)
Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multicontenedor. Para 2026, la versión actual es Docker Compose V2, que está integrada en la CLI de Docker.
# Docker Compose V2 normalmente se instala junto con Docker Desktop o como un plugin de Docker CLI.
# Si no está instalado, se puede instalar por separado:
sudo apt install docker-compose-plugin -y # Instalamos Docker Compose V2 como un plugin
Verificamos la instalación de Docker Compose:
docker compose version # Verificamos la versión de Docker Compose
3. Creación del directorio del proyecto
Crearemos un directorio donde se almacenarán todos los archivos de configuración de Nextcloud y Docker Compose.
mkdir -p ~/nextcloud_data # Creamos el directorio principal para el proyecto
cd ~/nextcloud_data # Nos movemos al directorio del proyecto
En este directorio crearemos los archivos docker-compose.yml y .env.
Configuración
Esquema: Configuración
Ahora que Docker y Docker Compose están instalados, podemos proceder a crear la configuración para Nextcloud. Definiremos los servicios para Nextcloud, la base de datos (MariaDB), el almacenamiento en caché (Redis) y el proxy inverso (Nginx) con Let's Encrypt.
1. Creación del archivo de variables de entorno (.env)
Los secretos y variables que pueden cambiar es mejor almacenarlos en un archivo .env separado. Esto mejora la seguridad y simplifica la gestión.
upstream php-handler {
server app:9000;
}
server {
listen 80;
listen [::]:80;
server_name ${NGINX_HOST};
# Redirect all HTTP requests to HTTPS
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name ${NGINX_HOST};
ssl_certificate /etc/letsencrypt/live/${NGINX_HOST}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${NGINX_HOST}/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;
# HSTS (optional, but recommended)
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/${NGINX_HOST}/chain.pem;
# root of your Nextcloud installation
root /var/www/html;
index index.php index.html /index.php$request_uri;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
log_not_found off;
access_log off;
}
# Make sure reverse proxy is configured correctly
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) {
deny all;
}
location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){
deny all;
}
# Block access to all files that begin with a dot
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
location / {
# The following 2 rules are only needed for the folders that are created
# as part of the installation if they are not already there.
# Make sure the root parameter is set appropriately
# when your Nextcloud installation is not in the root directory.
if (!-e $request_filename){
rewrite ^/(.*)$ /index.php$request_uri;
}
}
location ~ \.php(?:$|/) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
}
Esta configuración de Nginx redirige HTTP a HTTPS, utiliza variables de .env para el dominio y está configurada para funcionar con Let's Encrypt y Nextcloud FPM.
4. Inicio de contenedores y obtención de certificados SSL
Antes de iniciar todos los servicios, primero ejecutaremos solo Nginx y Certbot para obtener los certificados de Let's Encrypt.
sudo docker compose up -d nginx certbot # Iniciamos Nginx y Certbot
Espere a que los contenedores se inicien. Ahora solicitaremos los certificados. Asegúrese de que su dominio ya apunta a la dirección IP del VPS.
Si los certificados se obtienen con éxito, verá un mensaje de éxito. Ahora puede detener Nginx y Certbot para iniciar todos los servicios.
sudo docker compose down
Ahora iniciaremos todos los servicios, incluyendo Nextcloud y la base de datos:
sudo docker compose up -d
Espere a que todos los servicios se inicien. Esto puede tardar varios minutos.
5. Configuración de Nextcloud a través del navegador
Abra su dominio (por ejemplo, https://your.domain.com) en el navegador. Verá la página de bienvenida de Nextcloud.
Cree una cuenta de administrador (nombre de usuario y contraseña).
Especifique el directorio de datos: ${NEXTCLOUD_DATA_DIR} (ya está configurado en docker-compose.yml).
En la sección "Base de datos", seleccione "MariaDB/MySQL".
Especifique los datos de la base de datos de su archivo .env:
Nombre de usuario de la BD: nextclouduser
Contraseña de la BD: YOUR_STRONG_DB_PASSWORD
Nombre de la BD: nextcloud
Host de la BD: db (nombre del servicio en docker-compose.yml)
Haga clic en "Finalizar instalación". Nextcloud se instalará y le redirigirá a la página principal.
6. Configuración adicional de Nextcloud (config.php)
Para optimizar y mejorar la seguridad, puede realizar cambios en el archivo config/config.php dentro del contenedor de Nextcloud. Por ejemplo, configurar el almacenamiento en caché con Redis.
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
'host' => 'redis',
'port' => 6379,
'timeout' => 0.0,
'dbindex' => 0,
],
'overwritehost' => '${NGINX_HOST}',
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://${NGINX_HOST}',
'trusted_proxies' => ['nginx'], // Si Nginx está en la misma red Docker
Guarde y salga del archivo (Ctrl+O, Enter, Ctrl+X), luego salga del contenedor (exit). Reinicie el contenedor de Nextcloud para aplicar los cambios:
sudo docker compose restart app
7. Verificación de la operatividad
Asegúrese de que Nextcloud es accesible a través de su dominio mediante HTTPS.
curl -I https://${NGINX_HOST} # Verificamos los encabezados HTTP
Debería ver el estado HTTP/2 200 y los encabezados que indican Nextcloud. También verifique la funcionalidad subiendo un archivo a través de la interfaz web.
Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento
Las copias de seguridad regulares y el mantenimiento oportuno son cruciales para cualquier servicio en producción. Nextcloud no es una excepción.
¿Qué respaldar:
Datos de Nextcloud: Archivos de usuario almacenados en el volumen nextcloud_data.
Base de datos de Nextcloud: Toda la base de datos MariaDB, que almacena información sobre usuarios, archivos, configuraciones, etc. (volumen db_data).
Archivos de configuración de Nextcloud: El archivo config/config.php y otras configuraciones (volumen nextcloud_config).
Configuración de Docker Compose: Los archivos docker-compose.yml y .env.
Certificados de Let's Encrypt: El directorio /etc/letsencrypt (volumen certbot_certs).
Script simple de copia de seguridad automática
Crearemos un script simple que realizará copias de seguridad de todos los componentes necesarios. Para almacenar las copias de seguridad, se recomienda utilizar un almacenamiento externo, como un almacenamiento en la nube compatible con S3 u otro VPS.
Cree un directorio para los scripts de copia de seguridad:
#!/bin/bash
# --- Configuración ---
BACKUP_DIR="/mnt/backups/nextcloud" # Directorio para el almacenamiento temporal de copias de seguridad en el VPS
NEXTCLOUD_PROJECT_DIR="/home/nextcloudadmin/nextcloud_data" # Ruta a su docker-compose.yml
DATE=$(date +%Y%m%d%H%M%S)
DB_BACKUP_FILE="${BACKUP_DIR}/nextcloud_db_${DATE}.sql"
DATA_BACKUP_FILE="${BACKUP_DIR}/nextcloud_data_${DATE}.tar.gz"
CONFIG_BACKUP_FILE="${BACKUP_DIR}/nextcloud_config_${DATE}.tar.gz"
CERT_BACKUP_FILE="${BACKUP_DIR}/nextcloud_certs_${DATE}.tar.gz"
COMPOSE_BACKUP_FILE="${BACKUP_DIR}/nextcloud_compose_${DATE}.tar.gz"
# Variables de .env
source "${NEXTCLOUD_PROJECT_DIR}/.env"
# --- Creación del directorio de copias de seguridad ---
mkdir -p "${BACKUP_DIR}" || { echo "Error: No se pudo crear el directorio de copias de seguridad."; exit 1; }
echo "--- Iniciando la copia de seguridad de Nextcloud ---"
# 1. Copia de seguridad de la base de datos MariaDB
echo "Realizando copia de seguridad de la base de datos..."
sudo docker compose -f "${NEXTCLOUD_PROJECT_DIR}/docker-compose.yml" exec db sh -c \
"exec mariadb-dump -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_DATABASE}" > "${DB_BACKUP_FILE}" || \
{ echo "Error: La copia de seguridad de la base de datos falló."; exit 1; }
echo "Copia de seguridad de la base de datos completada: ${DB_BACKUP_FILE}"
# 2. Copia de seguridad de los datos de Nextcloud (archivos de usuario)
echo "Realizando copia de seguridad de los datos de Nextcloud..."
sudo docker compose -f "${NEXTCLOUD_PROJECT_DIR}/docker-compose.yml" exec app tar -czf - -C /var/www/html/data . > "${DATA_BACKUP_FILE}" || \
{ echo "Error: La copia de seguridad de los datos de Nextcloud falló."; exit 1; }
echo "Copia de seguridad de los datos de Nextcloud completada: ${DATA_BACKUP_FILE}"
# 3. Copia de seguridad de la configuración de Nextcloud
echo "Realizando copia de seguridad de la configuración de Nextcloud..."
sudo docker compose -f "${NEXTCLOUD_PROJECT_DIR}/docker-compose.yml" exec app tar -czf - -C /var/www/html config > "${CONFIG_BACKUP_FILE}" || \
{ echo "Error: La copia de seguridad de la configuración de Nextcloud falló."; exit 1; }
echo "Copia de seguridad de la configuración de Nextcloud completada: ${CONFIG_BACKUP_FILE}"
# 4. Copia de seguridad de los certificados de Let's Encrypt
echo "Realizando copia de seguridad de los certificados de Let's Encrypt..."
sudo tar -czf "${CERT_BACKUP_FILE}" -C /var/lib/docker/volumes/nextcloud_data_certbot_certs/_data . || \
{ echo "Error: La copia de seguridad de los certificados falló."; exit 1; }
echo "Copia de seguridad de los certificados completada: ${CERT_BACKUP_FILE}"
# 5. Copia de seguridad de los archivos de Docker Compose
echo "Realizando copia de seguridad de los archivos de Docker Compose..."
tar -czf "${COMPOSE_BACKUP_FILE}" -C "${NEXTCLOUD_PROJECT_DIR}" docker-compose.yml .env || \
{ echo "Error: La copia de seguridad de los archivos de Docker Compose falló."; exit 1; }
echo "Copia de seguridad de los archivos de Docker Compose completada: ${COMPOSE_BACKUP_FILE}"
echo "--- Copia de seguridad completada ---"
# --- Limpieza de copias de seguridad antiguas (conservar los últimos 7 días) ---
echo "Limpiando copias de seguridad antiguas..."
find "${BACKUP_DIR}" -type f -name "nextcloud_*.sql" -mtime +7 -delete
find "${BACKUP_DIR}" -type f -name "nextcloud_*.tar.gz" -mtime +7 -delete
echo "Limpieza completada."
# --- Subida de copias de seguridad a almacenamiento externo (ejemplo con rclone a S3) ---
# Instale rclone y configúrelo para su almacenamiento S3
# Por ejemplo, rclone config
# rclone sync "${BACKUP_DIR}" "s3_remote:nextcloud-backups"
# Copias de seguridad sincronizadas con S3.
exit 0
Haga el script ejecutable:
chmod +x ~/scripts/backup_nextcloud.sh
Para ejecutar este script, es posible que necesite montar un disco externo o configurar /mnt/backups. Además, asegúrese de que el usuario nextcloudadmin tenga permisos de lectura/escritura en /var/lib/docker/volumes/nextcloud_data_certbot_certs/_data o use sudo para el comando tar para los certificados.
Dónde almacenar las copias de seguridad:
Servicio externo compatible con S3: AWS S3, Backblaze B2, DigitalOcean Spaces. Esta es una opción fiable y relativamente económica. Utilice utilidades como rclone para la sincronización automática.
VPS separado: Alquile un VPS pequeño exclusivamente para almacenar copias de seguridad. Sincronice mediante SSH/rsync.
NAS/servidor local: Si tiene su propio hardware.
¡Nunca almacene las copias de seguridad en el mismo VPS que el servicio principal! En caso de fallo del servidor, perderá tanto el servicio como las copias de seguridad.
Automatización de copias de seguridad con Cron
Agregue el script al programador Cron para su ejecución diaria (por ejemplo, a las 3 de la mañana).
Esto ejecutará el script todos los días a las 03:00 y registrará la salida en el archivo de registro /var/log/nextcloud_backup.log.
Actualizaciones: rolling vs maintenance window
Actualización del SO: Ejecute regularmente sudo apt update && sudo apt upgrade -y. Se recomienda hacerlo una vez al mes o cuando se publiquen actualizaciones críticas.
Actualización de imágenes Docker:
Rolling (continuo): Para Nextcloud y la base de datos, esta no siempre es la mejor opción, ya que las actualizaciones pueden requerir migraciones de la base de datos o cambios en la API.
Maintenance window (ventana de mantenimiento): Se recomienda planificar las actualizaciones de las imágenes Docker de Nextcloud, MariaDB y Redis fuera del horario laboral.
cd ~/nextcloud_data
sudo docker compose pull # Загрузить новые версии образов
sudo docker compose down # Остановить все сервисы
sudo docker compose up -d # Запустить сервисы с новыми образами
sudo docker exec -it app occ upgrade # Выполнить обновление Nextcloud через его CLI
sudo docker exec -it app occ maintenance:mode --off # Выключить режим обслуживания
Actualización de Certbot: Los certificados de Let's Encrypt se actualizan automáticamente mediante el contenedor certbot, que se ejecuta en docker-compose.yml.
Solución de problemas + Preguntas frecuentes
Aquí se recopilan los problemas típicos y las preguntas frecuentes durante la instalación y operación de Nextcloud en un VPS.
Nginx devuelve 502 Bad Gateway
Qué verificar: Esto significa que Nginx no puede comunicarse con la aplicación backend (en nuestro caso, el contenedor Nextcloud FPM).
Asegúrese de que el contenedor app esté en ejecución: sudo docker compose ps.
Revise los logs del contenedor app: sudo docker compose logs app. Busque errores de PHP-FPM.
Asegúrese de que Nginx esté configurado correctamente para hacer proxy a app:9000.
Verifique que los contenedores estén en la misma red Docker.
Cómo solucionarlo: Si app no está en ejecución, revise los logs en busca de errores de inicio. Si está en ejecución pero no responde, es posible que PHP-FPM se haya colgado o que Nextcloud no esté inicializado. Intente reiniciar el contenedor app: sudo docker compose restart app.
No se puede obtener el certificado SSL de Let's Encrypt
Qué verificar:
Asegúrese de que su dominio apunte correctamente a la dirección IP de su VPS (registros A/AAAA). Use dig your.domain.com.
Asegúrese de que los puertos 80 y 443 estén abiertos en el firewall (sudo ufw status).
Revise los logs del contenedor certbot: sudo docker compose logs certbot.
Asegúrese de que Nginx esté configurado para .well-known/acme-challenge/.
Cómo solucionarlo: Corrija los registros DNS, abra los puertos en UFW, verifique la configuración de Nginx. Si hay un problema con Certbot, es posible que se hayan alcanzado los límites de solicitudes (raro para dominios nuevos) o que haya un problema con el sistema de archivos.
Nextcloud funciona lento
Qué verificar:
Recursos del VPS: CPU o RAM insuficientes. Verifique el uso de recursos: htop o docker stats.
Caché: Asegúrese de que Redis esté configurado y funcionando (consulte la sección "Configuración" y config/config.php).
Base de datos: Rendimiento lento de la BD. Revise los logs de MariaDB en busca de errores o consultas lentas.
Disco: E/S de disco lenta. Un SSD es obligatorio para Nextcloud.
Configuración interna de Nextcloud: Vaya a "Configuración" -> "Visión general" en Nextcloud para obtener recomendaciones de rendimiento.
Cómo solucionarlo: Aumente los recursos del VPS (RAM, CPU), asegúrese de que la caché de Redis esté configurada correctamente, considere la optimización de la base de datos o la migración a un SSD más rápido.
No puedo iniciar sesión en Nextcloud después de la instalación
Qué verificar:
La exactitud del nombre de usuario y la contraseña del administrador que especificó durante la configuración inicial.
Revise los logs del contenedor app en busca de errores de autenticación.
Asegúrese de que la base de datos esté en ejecución y accesible para Nextcloud (contenedor db).
Cómo solucionarlo: Si olvidó la contraseña del administrador, puede restablecerla a través de la CLI de Nextcloud: sudo docker exec -it app occ user:resetpassword admin_username. Asegúrese de que el contenedor db esté en ejecución y que no haya errores en sus logs.
¿Qué configuración mínima de VPS es adecuada?
Para un solo usuario o una familia muy pequeña (hasta 3-5 personas) con uso básico (almacenamiento de archivos, sincronización), un VPS con 1 vCPU, 2 GB de RAM y 100 GB de SSD será mínimamente adecuado. Sin embargo, para un funcionamiento más cómodo y la posibilidad de ampliar funciones (por ejemplo, videollamadas, edición de documentos), se recomienda 2 vCPU, 4 GB de RAM y 200 GB de SSD. Esto garantizará un mejor rendimiento y estabilidad del sistema.
¿Qué elegir: VPS o dedicado para esta tarea?
Para la mayoría de los escenarios de uso de Nextcloud (nube personal, equipo pequeño o mediano de hasta 50-100 usuarios), un VPS es la opción óptima. Ofrece suficiente rendimiento, flexibilidad y es significativamente más económico que un servidor dedicado. Un servidor dedicado solo debe elegirse para cargas muy grandes, un número significativo de usuarios (más de 100), requisitos específicos de hardware o en caso de que se requiera un aislamiento completo a nivel físico.
Error "Trusted domain" en Nextcloud
Qué verificar: Este error significa que Nextcloud no confía en el dominio desde el que intenta acceder a él.
Asegúrese de que NEXTCLOUD_TRUSTED_DOMAINS en su archivo .env contenga el dominio correcto.
Verifique que en config/config.php dentro del contenedor de Nextcloud su dominio también esté listado como de confianza.
Cómo solucionarlo: Edite el archivo .env y/o config/config.php, agregando su dominio a la lista de confianza. Después de modificar .env, debe recrear el contenedor: sudo docker compose down && sudo docker compose up -d. Después de modificar config.php dentro del contenedor, es suficiente con reiniciar el contenedor app: sudo docker compose restart app.
Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos
¡Felicidades! Ha desplegado y configurado con éxito su propia nube personal de Nextcloud en su VPS, utilizando Docker Compose, Nginx y Let's Encrypt. Ahora tiene una plataforma totalmente controlada y segura para almacenar y compartir archivos, colaborar y proteger sus datos de servicios de terceros.
¿Qué pasos puede seguir para expandir la funcionalidad y optimizar su Nextcloud:
Instalación de aplicaciones adicionales: Explore la tienda de aplicaciones de Nextcloud (por ejemplo, Collabora Online para edición de documentos, Talk para videollamadas, Calendar, Contacts).
Monitorización de recursos: Configure un sistema de monitorización (por ejemplo, Prometheus + Grafana) para rastrear el estado del VPS y los contenedores.
Optimización del rendimiento: Continúe ajustando Nginx, PHP-FPM y MariaDB para un rendimiento máximo, especialmente a medida que crece el número de usuarios.
Integración con almacenamientos externos: Conecte almacenamientos externos (S3, SMB/CIFS) para expandir el espacio en disco de Nextcloud.