
En el pasado he publicado un par de tutoriales con las instrucciones para instalar Nextcloud en un servidor con Ubuntu 20.04 o Debian 10 (el primer tutorial utiliza Apache y el segundo utiliza NGINX). Al entrar al panel de administración de Nextcloud podemos encontrar unas advertencias indicando una serie de consejos para mejorar el rendimiento y seguridad de nuestra instancia de Nextcloud

Una de las recomendaciones es establecer el límite de memoria de PHP por lo menos en 512 MB. Si utilizamos NGINX en Ubuntu 20.04 el archivo a configurar está en la siguiente ubicación
/etc/php/7.4/fpm/php.ini
En caso de usar Apache el archivo está en
/etc/php/7.4/apache2/php.ini
En caso de usar Debian 10 se cambiaría 7.4 por 7.3 en este tutorial
Buscamos la siguiente línea
memory_limit = 128M
La dejamos así
memory_limit = 512M
Reiniciamos el motor PHP en caso de usar NGINX
sudo systemctl restart php7.4-fpm
En caso de usar Apache lo reiniciamos
sudo systemctl restart apache2
Para mejorar la seguridad de nuestra instalación de Nextcloud se recomienda establecer el encabezado “Strict-Transport-Security”. En caso de usar Apache editamos el archivo correspondiente a nuestro host virtual y agregamos lo siguiente
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
Nos quedaría parecido a esto
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /var/www/nextcloud
ServerName cloud.asgardius.company
<Directory /var/www/nextcloud>
Options -Indexes +FollowSymLinks
AllowOverride All
</Directory>
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
SSLCertificateFile /etc/letsencrypt/live/cloud.asgardius.company/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cloud.asgardius.company/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Habilitamos el módulo Headers y reiniciamos Apache
sudo a2enmod headers
sudo systemctl restart apache2
En caso de utilizar NGINX editamos el archivo correspondiente al host virtual y buscamos la siguiente sección
# HSTS settings
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
Habilitamos la última línea y la dejamos así
# HSTS settings
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
Reiniciamos NGINX
sudo systemctl restart nginx
Se recomienda configurar un cache de memoria. Entre las opciones disponibles APCu es una de las más fáciles de configurar. Sólo necesitamos instalar el módulo correspondiente para PHP (en ambos tutoriales de instalación se incluye este módulo entre los recomendados). Para configurarlo editamos el archivo de configuración
sudo nano /var/www/nextcloud/config/config.php
Agregamos la siguiente línea antes de “);”
'memcache.local' => '\OC\Memcache\APCu',
Necesitamos establecer el país predeterminado para los números de teléfono en el formato ISO 3166-1, lo cual haremos agregando la siguiente línea al archivo de configuración reemplazando MX por el país correspondiente (ES en el caso de España, US en Estados Unidos de América, etc)
'default_phone_region' => 'MX',
En caso de usar NGINX PHP no podrá obtener las variables del entorno, lo cual podremos solucionar editando el archivo de configuración de PHP-FPM
sudo nano /etc/php/7.4/fpm/php-fpm.conf
Agregamos las siguientes líneas al final del archivo
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Reiniciamos el motor PHP
sudo systemctl restart php7.4-fpm
Por defecto Nextcloud realiza trabajos en segundo plano cada vez que carga una página, lo cual tiene varios inconvenientes. La mejor alternativa consiste en configurar una tarea programada que realice esas actividades cada 5 minutos, lo cual en este caso haremos utilizando el temporizador de Systemd. Primero vamos a crear un servicio de Systemd
sudo nano /etc/systemd/system/nextcloudcron.service
Lo dejamos parecido a esto
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
Configuramos el temporizador
sudo nano /etc/systemd/system/nextcloudcron.timer
Agregamos el siguiente contenido
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service
[Install]
WantedBy=timers.target
Activamos la tarea programada
sudo systemctl enable --now nextcloudcron.timer
Referencias