Google Drive y OneDrive son convenientes — hasta que te preguntas dónde están realmente tus datos, quién más puede acceder a ellos y qué pasa cuando el proveedor cambia sus términos de servicio o sus precios. Nextcloud te da la misma experiencia de almacenamiento y colaboración en la nube, pero corriendo en tu propio servidor, con tus propias reglas y tus datos bajo tu control.
En esta guía vas a instalar Nextcloud con Docker Compose, conectarlo a PostgreSQL como base de datos, configurar SSL y optimizarlo para uso diario de tu equipo.
Requisitos previos
Un servidor Ubuntu 24.04 con al menos 2 GB de RAM, Docker y Docker Compose instalados, un dominio que apunte al servidor y suficiente almacenamiento para tus archivos.
Paso 1: Estructura del proyecto
nextcloud/
├── docker-compose.yml
├── .env
└── data/ # Se crea automáticamente
Paso 2: Docker Compose
Esta configuración incluye Nextcloud, PostgreSQL como base de datos y Redis como caché para rendimiento óptimo:
# docker-compose.yml
services:
nextcloud:
image: nextcloud:29-apache
restart: unless-stopped
environment:
POSTGRES_HOST: db
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
REDIS_HOST: cache
NEXTCLOUD_ADMIN_USER: ${ADMIN_USER}
NEXTCLOUD_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
NEXTCLOUD_TRUSTED_DOMAINS: ${DOMAIN}
OVERWRITEPROTOCOL: https
OVERWRITECLIURL: https://${DOMAIN}
PHP_UPLOAD_LIMIT: 10G
PHP_MEMORY_LIMIT: 512M
volumes:
- nc_data:/var/www/html
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
networks:
- proxy
- backend
labels:
- "traefik.enable=true"
- "traefik.http.routers.nextcloud.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.nextcloud.entrypoints=websecure"
- "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt"
- "traefik.http.services.nextcloud.loadbalancer.server.port=80"
# Headers requeridos por Nextcloud
- "traefik.http.middlewares.nextcloud-headers.headers.stsSeconds=31536000"
- "traefik.http.middlewares.nextcloud-headers.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.nextcloud-caldav.redirectregex.permanent=true"
- "traefik.http.middlewares.nextcloud-caldav.redirectregex.regex=^https://(.*)/.well-known/ca(l|rd)dav"
- "traefik.http.middlewares.nextcloud-caldav.redirectregex.replacement=https://$${1}/remote.php/dav/"
- "traefik.http.routers.nextcloud.middlewares=nextcloud-headers,nextcloud-caldav"
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: nextcloud
POSTGRES_USER: nextcloud
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nextcloud -d nextcloud"]
interval: 10s
timeout: 5s
retries: 5
networks:
- backend
cache:
image: redis:7-alpine
restart: unless-stopped
command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru
volumes:
- redis_data:/data
networks:
- backend
cron:
image: nextcloud:29-apache
restart: unless-stopped
entrypoint: /cron.sh
volumes:
- nc_data:/var/www/html
depends_on:
- nextcloud
networks:
- backend
networks:
proxy:
external: true
backend:
volumes:
nc_data:
pg_data:
redis_data:
¿Sin Traefik?
Si no usas Traefik, puedes exponer Nextcloud directamente con ports: - "8080:80" y poner un Nginx reverse proxy delante con Certbot para SSL. La configuración de este tutorial asume que tienes Traefik configurado.
Crea el archivo .env:
# .env
DOMAIN=nube.tuempresa.com
ADMIN_USER=admin
ADMIN_PASSWORD=contraseña_admin_segura
DB_PASSWORD=contraseña_db_segura
Paso 3: Levantar Nextcloud
docker compose up -d
La primera ejecución toma 1-2 minutos mientras Nextcloud configura la base de datos y crea los archivos iniciales. Revisa los logs:
docker compose logs -f nextcloud
Cuando veas Apache/2.4.x configured -- resuming normal operations, Nextcloud está listo.
Accede a https://nube.tuempresa.com e inicia sesión con las credenciales de admin que definiste en .env.
Paso 4: Configuración post-instalación
Configurar el cron job
Nextcloud necesita ejecutar tareas en segundo plano (limpieza, generación de previews, notificaciones). El contenedor cron que agregamos se encarga de esto. Verifica en Configuración → Ajustes básicos → Tareas en segundo plano que esté seleccionado "Cron".
Optimizar PHP
Dentro del contenedor, ajusta la configuración de PHP para archivos grandes:
docker compose exec nextcloud bash -c "cat >> /usr/local/etc/php/conf.d/custom.ini <<EOF
upload_max_filesize=10G
post_max_size=10G
max_execution_time=3600
max_input_time=3600
memory_limit=512M
output_buffering=0
EOF"
docker compose restart nextcloud
Configurar almacenamiento externo (opcional)
Si tienes un NAS o quieres conectar almacenamiento S3, habilita la app "External Storage" en Nextcloud:
- Ve a Apps → Archivos → External storage support → Habilitar
- Ve a Configuración → Almacenamiento externo
- Agrega tu almacenamiento (SMB/CIFS, S3, WebDAV, FTP, SFTP)
Paso 5: Seguridad
Autenticación de dos factores (2FA)
Habilita TOTP para todos los usuarios:
- Ve a Apps → Seguridad → Two-Factor TOTP Provider → Habilitar
- Cada usuario activa 2FA desde su perfil con Google Authenticator o similar
Fuerza bruta (protección incluida)
Nextcloud incluye protección contra fuerza bruta por defecto. Si alguien falla el login varias veces, el acceso se retrasa progresivamente.
Antivirus (escaneo de archivos subidos)
Si tus usuarios suben archivos de fuentes externas, instala ClamAV:
# Agregar al docker-compose.yml
clamav:
image: clamav/clamav:stable
restart: unless-stopped
volumes:
- clam_data:/var/lib/clamav
networks:
- backend
volumes:
clam_data:
Luego habilita la app "Antivirus for files" en Nextcloud y configúrala para conectar con el contenedor ClamAV en clamav:3310.
Paso 6: Backup
Un Nextcloud sin backup es un desastre esperando ocurrir. Necesitas respaldar tres cosas:
1. Base de datos PostgreSQL
docker compose exec db pg_dump -U nextcloud nextcloud | gzip > backup_db_$(date +%Y%m%d).sql.gz
2. Datos de Nextcloud (archivos de usuarios)
docker run --rm -v nextcloud_nc_data:/data -v $(pwd)/backups:/backup alpine \
tar czf /backup/nc_data_$(date +%Y%m%d).tar.gz -C /data .
3. Script de backup automatizado
Combina ambos en un script y prográmalo con cron — o usa el script de backup con Python que ya creamos:
#!/bin/bash
# backup-nextcloud.sh
BACKUP_DIR="/var/backups/nextcloud/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
echo "Activando modo mantenimiento..."
docker compose exec -T nextcloud php occ maintenance:mode --on
echo "Respaldando base de datos..."
docker compose exec -T db pg_dump -U nextcloud nextcloud | gzip > "$BACKUP_DIR/db.sql.gz"
echo "Respaldando archivos..."
docker run --rm -v nextcloud_nc_data:/data -v "$BACKUP_DIR":/backup alpine \
tar czf /backup/data.tar.gz -C /data .
echo "Desactivando modo mantenimiento..."
docker compose exec -T nextcloud php occ maintenance:mode --off
echo "Backup completado en $BACKUP_DIR"
ls -lh "$BACKUP_DIR"
Modo mantenimiento
Activar el modo mantenimiento antes del backup garantiza que no haya escrituras durante el proceso. Es molesto por unos minutos, pero evita inconsistencias. Programa el backup a las 3 AM cuando nadie trabaja.
Paso 7: Apps recomendadas
Nextcloud tiene un ecosistema de apps que extienden su funcionalidad. Las más útiles para empresas:
| App | Función |
|---|---|
| Collabora Online / OnlyOffice | Edición de documentos en el navegador (como Google Docs) |
| Talk | Videoconferencia y chat (alternativa a Zoom/Teams) |
| Calendar | Calendario compartido con CalDAV |
| Contacts | Directorio de contactos con CardDAV |
| Cliente de correo integrado | |
| Deck | Tableros Kanban para gestión de tareas |
| Forms | Formularios y encuestas (alternativa a Google Forms) |
| Group Folders | Carpetas compartidas por grupo con cuotas |
Paso 8: Conectar clientes
Escritorio (Windows, macOS, Linux)
Descarga el cliente de escritorio de Nextcloud. Configura:
- Servidor:
https://nube.tuempresa.com - Usuario y contraseña (o app password si tienes 2FA)
- Selecciona qué carpetas sincronizar
Los archivos se sincronizan automáticamente — igual que Dropbox o OneDrive.
Móvil (iOS y Android)
Descarga la app Nextcloud desde App Store o Play Store. Además de archivos, puedes configurar la subida automática de fotos como reemplazo de Google Photos.
WebDAV
Cualquier aplicación que soporte WebDAV puede conectarse directamente:
https://nube.tuempresa.com/remote.php/dav/files/usuario/
Verificación de seguridad
Nextcloud incluye un escáner de seguridad integrado. Ve a Configuración → Información general y revisa las advertencias. También puedes usar el escáner externo:
https://scan.nextcloud.com
Introduce tu dominio y verifica que tu instalación cumple con las mejores prácticas de seguridad.
Siguientes pasos
Con Nextcloud corriendo, puedes expandir:
- Integración con Active Directory/LDAP — para que los usuarios de tu red corporativa accedan con sus credenciales existentes
- Collabora Online — edición de documentos colaborativa en el navegador sin salir de Nextcloud
- Almacenamiento S3 — almacenamiento primario o secundario en AWS S3 para escalar sin límite
- Monitoreo — métricas de Nextcloud en Prometheus/Grafana con el endpoint
/ocs/v2.php/apps/serverinfo/api/v1/info - Ciberseguridad — auditoría de tu instalación Nextcloud para cumplir con LFPDPPP y políticas de protección de datos
Almacenamiento empresarial
¿Quieres tus datos bajo tu propio control?
Implementamos Nextcloud para tu empresa con Active Directory, almacenamiento escalable, backup automatizado y soporte continuo.



