Ajustes recomendados para nuestra instalación de Nextcloud

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

https://docs.nextcloud.com/server/latest/admin_manual/

Dejar un comentario