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

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:

  1. Inicie sesión en el panel de administración
  2. Configuración → Administración → Sistema
  3. Configure la ubicación de almacenamiento de archivos a /var/www/nextcloud_data

Habilite almacenamiento externo:

  1. Configuración → Administración → Almacenamiento externo
  2. Agregue backends de almacenamiento SMB/CIFS, WebDAV u otros

Instalación de aplicaciones

Instale aplicaciones esenciales a través del panel de administración:

  1. Aplicación de calendario y contactos
  2. Documentos colaborativos (integración de Collabora Online)
  3. Talk (plataforma de comunicación)
  4. 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:

  1. Configuración → Administración → Seguridad
  2. 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.