Instalación y configuración de Nextcloud
Nextcloud es una plataforma de almacenamiento en la nube y colaboración autohospedada que le da control total sobre sus datos. A diferencia de los servicios en la nube comerciales, Nextcloud permite que las organizaciones e individuos mantengan la propiedad y privacidad completa de los datos. Esta guía completa cubre la instalación en Linux con PHP, la configuración de la base de datos, la configuración del servidor web Nginx, cifrado SSL, configuración de almacenamiento e instalación de aplicaciones para sincronización de archivos, calendarios y contactos.
Tabla de contenidos
- Requisitos previos
- Requisitos del sistema
- Instalación del servidor web
- Configuración de PHP
- Configuración de la base de datos
- Instalación de Nextcloud
- Configuración del servidor web
- Configuración del certificado SSL
- Configuración del almacenamiento
- Instalación de aplicaciones
- Endurecimiento de seguridad
- Copia de seguridad y mantenimiento
- Conclusión
Requisitos previos
Asegúrese de tener:
- Ubuntu 20.04 LTS o posterior
- Acceso root o sudo
- Un nombre de dominio registrado
- Mínimo 4GB de RAM
- 50GB de espacio en disco (más espacio adicional para almacenamiento de archivos)
- Habilidades básicas de administración de Linux
Actualice el sistema:
sudo apt update && sudo apt upgrade -y
Requisitos del sistema
Verifique que su servidor cumpla con los requisitos de Nextcloud:
Verifique la arquitectura del sistema:
lsb_release -a
uname -m
Verifique la RAM:
free -h
Verifique el almacenamiento disponible:
df -h
Instalación del servidor web
Instale Nginx como servidor web para mejor rendimiento:
sudo apt install -y nginx
Inicie y habilite Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
Verifique que Nginx se está ejecutando:
sudo systemctl status nginx
Configuración de PHP
Instale PHP y las extensiones requeridas:
sudo apt install -y php-fpm php-cli php-common php-mysql php-pgsql php-pdo php-gd php-curl php-json php-mbstring php-xml php-zip php-intl php-bcmath php-imagick php-redis php-smbclient php-ldap
Verifique la versión de PHP:
php --version
Verifique las extensiones:
php -m
Configure PHP-FPM para Nextcloud:
sudo nano /etc/php/8.0/fpm/php.ini
Actualice la configuración crítica:
memory_limit = 512M
max_execution_time = 300
upload_max_filesize = 500M
post_max_size = 500M
default_phone_number_prefix = "+1"
date.timezone = UTC
Configure el grupo PHP-FPM:
sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Actualice la configuración:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.process_idle_timeout = 10s
Reinicie PHP-FPM:
sudo systemctl restart php8.0-fpm
Configuración de la base de datos
Instale MariaDB:
sudo apt install -y mariadb-server mariadb-client
Inicie y asegure la base de datos:
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo mysql_secure_installation
Cree la base de datos de Nextcloud:
sudo mysql -u root -p << EOF
CREATE DATABASE nextcloud;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'SecurePass123!';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF
Alternativamente, use PostgreSQL:
sudo apt install -y postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql
Cree la base de datos PostgreSQL:
sudo -u postgres psql << EOF
CREATE DATABASE nextcloud;
CREATE USER nextcloud WITH PASSWORD 'SecurePass123!';
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;
\q
EOF
Instalación de Nextcloud
Cree el directorio de instalación:
sudo mkdir -p /var/www/nextcloud
sudo chown www-data:www-data /var/www/nextcloud
cd /var/www/nextcloud
Descargue Nextcloud:
cd /tmp
wget https://download.nextcloud.com/server/releases/latest-26.tar.bz2
tar -xjf latest-26.tar.bz2
sudo cp -r nextcloud/* /var/www/nextcloud/
Establezca los permisos correctos:
sudo chown -R www-data:www-data /var/www/nextcloud
sudo find /var/www/nextcloud -type f -exec chmod 640 {} \;
sudo find /var/www/nextcloud -type d -exec chmod 750 {} \;
Cree el directorio de datos fuera de la raíz web:
sudo mkdir -p /var/www/nextcloud_data
sudo chown -R www-data:www-data /var/www/nextcloud_data
sudo chmod 700 /var/www/nextcloud_data
Configuración del servidor web
Cree la configuración de Nginx:
sudo nano /etc/nginx/sites-available/nextcloud.conf
Agregue la configuración:
upstream php-handler {
server unix:/var/run/php/php8.0-fpm.sock;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
root /var/www/nextcloud;
index index.html index.php;
client_max_body_size 512M;
client_body_buffer_size 128k;
fastcgi_buffers 64 4k;
location / {
rewrite ^ /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|autotest|occ|issue|indie|db_|console).php(?:$|/) {
return 404;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater|ocs-provider|\.well-known)\.php(?:$|/) {
fastcgi_pass php-handler;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ \.php(?:$|/) {
return 404;
}
location ~ ^/(?:updater|vendor)(?:$|/) {
return 404;
}
location ~ /\.(?!well-known) {
deny all;
}
}
Habilite la configuración:
sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Configuración del certificado SSL
Instale Certbot:
sudo apt install -y certbot python3-certbot-nginx
Obtenga un certificado SSL:
sudo certbot certonly --nginx -d example.com -d www.example.com
La configuración de Nginx ya hace referencia a estos certificados. Pruebe la configuración:
sudo openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -dates
Configure la renovación automática:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
Configuración del almacenamiento
Acceda a la interfaz de administración de Nextcloud:
Navegue a https://example.com en su navegador y complete el asistente de configuración con:
- Nombre de usuario del administrador
- Contraseña del administrador
- Base de datos: MariaDB/MySQL
- Nombre de la base de datos: nextcloud
- Usuario de la base de datos: nextcloud
- Contraseña de la base de datos: SecurePass123!
Configure el directorio de almacenamiento adicional:
- Inicie sesión en el panel de administración
- Configuración → Administración → Sistema
- Configure la ubicación de almacenamiento de archivos a /var/www/nextcloud_data
Habilite almacenamiento externo:
- Configuración → Administración → Almacenamiento externo
- Agregue backends de almacenamiento SMB/CIFS, WebDAV u otros
Instalación de aplicaciones
Instale aplicaciones esenciales a través del panel de administración:
- Aplicación de calendario y contactos
- Documentos colaborativos (integración de Collabora Online)
- Talk (plataforma de comunicación)
- Notas
Instale desde la línea de comandos:
sudo -u www-data php /var/www/nextcloud/occ app:install calendar
sudo -u www-data php /var/www/nextcloud/occ app:install contacts
sudo -u www-data php /var/www/nextcloud/occ app:install tasks
sudo -u www-data php /var/www/nextcloud/occ app:install notes
Habilite las aplicaciones:
sudo -u www-data php /var/www/nextcloud/occ app:enable calendar
sudo -u www-data php /var/www/nextcloud/occ app:enable contacts
Liste todas las aplicaciones instaladas:
sudo -u www-data php /var/www/nextcloud/occ app:list
Endurecimiento de seguridad
Configure proxies de confianza si está detrás de un proxy inverso:
sudo nano /var/www/nextcloud/config/config.php
Agregue:
'trusted_proxies' => ['127.0.0.1', '::1'],
'overwritehost' => 'example.com',
'overwriteprotocol' => 'https',
Deshabilite servicios innecesarios:
sudo -u www-data php /var/www/nextcloud/occ app:disable sharebymail
Habilite la protección contra fuerza bruta:
- Configuración → Administración → Seguridad
- Habilite "Brute-force protection"
Configure el límite de velocidad en Nginx:
sudo nano /etc/nginx/sites-available/nextcloud.conf
Agregue al bloque de servidor:
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location /login {
limit_req zone=login burst=10;
}
location / {
limit_req zone=general burst=20;
}
Copia de seguridad y mantenimiento
Cree un script de copia de seguridad:
sudo nano /usr/local/bin/nextcloud-backup.sh
Agregue:
#!/bin/bash
BACKUP_DIR="/backups/nextcloud"
NEXTCLOUD_DIR="/var/www/nextcloud"
DATA_DIR="/var/www/nextcloud_data"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Coloque Nextcloud en modo de mantenimiento
sudo -u www-data php $NEXTCLOUD_DIR/occ maintenance:mode --on
# Copia de seguridad de la base de datos
mysqldump -u nextcloud -p'SecurePass123!' nextcloud | gzip > "$BACKUP_DIR/nextcloud-db-$DATE.sql.gz"
# Copia de seguridad de archivos
tar -czf "$BACKUP_DIR/nextcloud-config-$DATE.tar.gz" "$NEXTCLOUD_DIR/config"
tar -czf "$BACKUP_DIR/nextcloud-data-$DATE.tar.gz" "$DATA_DIR"
# Deshabilite el modo de mantenimiento
sudo -u www-data php $NEXTCLOUD_DIR/occ maintenance:mode --off
# Mantenga solo 30 días de copias de seguridad
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Backup completed: $DATE"
Haga ejecutable:
sudo chmod +x /usr/local/bin/nextcloud-backup.sh
Programe las copias de seguridad:
sudo crontab -e
Agregue:
0 3 * * * /usr/local/bin/nextcloud-backup.sh >> /var/log/nextcloud-backup.log 2>&1
Actualice Nextcloud:
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
sudo -u www-data php /var/www/nextcloud/occ upgrade
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Conclusión
Nextcloud ahora está completamente configurado como una plataforma autohospedada de almacenamiento en la nube y colaboración. Con el endurecimiento de seguridad adecuado, copias de seguridad periódicas e instalación de aplicaciones, tiene una alternativa rica en características a los servicios en la nube comerciales. Mantenga actualizaciones periódicas, monitoree el uso de almacenamiento y configure copias de seguridad automáticas para asegurar la integridad y disponibilidad de los datos. Nextcloud le permite mantener control total sobre su espacio de trabajo digital.


