Nextcloud és un programari en codi obert que ens permet tenir el nostre propi núvol, gestionat per nosaltres mateixos, on mantenir-hi sincronitzats documents, imatges, vídeos etc però també els nostres contactes i calendari.  

Explicaré pas a pas com l'he instal·lat en un servidor dedicat amb sistema operatiu Centos 8, on Nginx serveix les pàgines, Postgresql gestiona la base de dades i PHP el programari de Nextcloud.

Nextcloud

El primer de tot és descarregar el zip des de Nextcloud. En el moment d'escriure aquesta entrada la darrera versió és la 18.0.4

Acte seguit el descomprimim amb 'unzip' i el copiem en el directori /var/www/nextcloud:

unzip nextcloud-18.0.4.zip
cp -R nextcloud/ /var/www/nextcloud/

Creem el directori 'data' i li donem a Nginx permisos de propietat i grup amb 'chown':

mkdir /var/www/nextcloud/data
chown -R nginx:nginx /var/www/nextcloud

Let's Encrypt

Cal que el subdomini i per tant Nextcloud tinguin certificat SSL. Afegim el certificat SSL del subdomini al del domini principal amb Let's Encrypt. Amb terminologia Let's Encrypt el que farem és un 'expand'. El paquet 'cerbot' ens 'expandirà' el certificat del domini 'domini.cat' afegint-hi el del subdomini que estem creant, 'nextcloud.domini.cat':

certbot -d domini.cat -d subdomini.dominit.cat certonly

Si tot ha anat bé Let's Encrypt ha escrit el nou certificat dins del directori '/etc/letsencrypt/live/domini.cat/'. D'aquest directori necessitarem dos fitxers per a la configuració del nou subdomini 'nextcloud': 'fullchain.pem' i 'privkey.pem'.

PHP-FPM

Per a executar el codi PHP de Nextcloud amb Nginx necessitem el paquet php-fpm. Com que volem que Nextcloud tingui el seu propi socket, copiem el fitxer '/etc/php-fpm.d/www.conf' en un nou fitxer '/etc/php-fpm.d/nextcloud.conf':

cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/nextcloud.conf

i editem 'nextcloud.conf' canviat el nom del 'pool' a 'nextcloud' i configurant l'usuari i grup com 'nginx'.  Anomenem el socket com a 'nextcloud.sock':

; Start a new pool named 'www'.
; the variable $pool can be used in any directive and will be replaced by the
; pool name ('www' here)
[nextcloud]

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on
; a specific port;
; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses
; (IPv6 and IPv4-mapped) on a specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /run/php-fpm/nextcloud.sock

Ajustem els permisos que tindrà el socket:

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

És important des comentar les variables d'entorn que Nextcloud demana, quedant així:

; Pass environment variables like LDLIBRARYPATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Guardem els canvis fets a 'nextcloud.conf' i sortim del editor per a reiniciar el servei php-fpm amb 'systemctl restart php-fpm'. Confirmem que el nou 'pool' està escoltant peticions amb ' systemctl status php-fpm':

Perfecte! Seguim!

La darrera configuració de PHP recomanada com a "server tuning' per Nextcloud és la de opcache. Cal tenir opcache activat i amb aquests paràmetres mínims:

opcache.enable=1
opcache.internedstringsbuffer=8
opcache.maxacceleratedfiles=10000
opcache.memoryconsumption=128
opcache.savecomments=1
opcache.revalidatefreq=1

El fitxer a editar és a '/etc/php.d/10-opcache.ini'. Reiniciem php-fpm de nou amb 'systemctl restart php-fpm'.

Nginx, configuració del subdomini

Nginx el configurem segons la recomanació, creant en el directori corresponent un nou fitxer anomenat 'nextcloud': '/var/nginx/sites-available/nextcloud'. De la configuració recomanada cal assegurar que hem comentat la línia 'server 127.0.0.1:9000' i activat la següent que apunta al socket que hem definit en el paràgraf anterior. Quedaría així:

upstream php-handler {
   #server 127.0.0.1:9000;
   server unix:/run/php-fpm/nextcloud.sock;
}

Del mateix fitxer canviem el paràmetre 'server_name' dues vegades, la primera en el 'server block' del port 80 i la segona en el del port 443, posant-hi el nostre subdomini, en l'exemple, 'nextcloud.domini.cat'. :

server {
   listen 80;
   listen [::]:80;
   servername nextcloud.domini.cat;
   # enforce https
   return 301 https://$servername:443$requesturi;
}
server {
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   servername nextcloud.domini.cat;
...

El darrer canvi del mateix fitxer és posar-li on tenim els certificats SSL que ens ha creat Let's Encrypt. Abans hem vist que els tenim en el directori '/etc/letsencrypt/live/domini.cat/'.  Seguint amb l'exemple seria així:

...
   # Use Mozilla's guidelines for SSL/TLS settings
   # https://mozilla.github.io/server-side-tls/ssl-config-generator/
   # NOTE: some settings below might be redundant

   ssl_certificate /etc/letsencrypt/live/domini.cat/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/domini.cat/privkey.pem;
...

Ja podem guardar els canvis i sortir del nostre editor preferit.

Nginx

Ara editarem el fitxer /etc/nginx/nginx.conf' per afegir-hi una línia 'include' que carregarà la configuració del nou subdomini on hi tenim Nextcloud. Al final del fitxer i dins del bloc 'http' hi afegim aquesta línia:

http {
...
include /etc/nginx/sites-available/nextcloud;
}

L'ortodòxia diu que hauríem de crear un enllaç a '/etc/nginx/sites-enabled/nextcloud'  de '/etc/nginx/sites-available/nextcloud' però tinc el vici de no fer-ho. Bé, guardem el canvi i sortim del editor. Assegurem que tant la configuració del subdomini com la del 'include' tenen la sintaxi correcte executant 'nginx -t' com a root des de la consola. Si és correcte ja podem reiniciar nginx per a que carregi les novetats:

systemctl restart nginx.service

Redis

Nextcloud recomana Redis per a gestionar la memòria cau. El paquet necessari es diu curiosament 'redis'. Un cop instal·lat l'activem i verifiquem que està executant-se:

systemctl enable redis.service
systemctl status redis.service

El port per defecte on escolta Redis és el 6379. Més endavant ho recordarem per a configurar Nextcloud.

Postgresql

Com a usuari 'postgres' creem el nou 'role' nextcloud amb permís per a accedir a la base de dades nova 'nextcloud':

sudo -u postgres psql -d template1

i dins de psql creem l'usuari i la base de dades:

template1=# CREATE USER nextcloud CREATEDB;
template1=# CREATE DATABASE nextcloud OWNER nextcloud;

Sortim de psql amb '\q' i tornem a root amb 'control + d'. Cal configurar Postgresql perquè accepti l'usuari 'nextcloud' i li deixi connectar-se a la base de dades 'nextcloud'. Editem el fitxer '/var/lib/pgsql/data/pg_hba.conf' i afegim aquesta línia

#TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host nextcloud nextcloud 127.0.0.1/32 trust

Guardem els canvis, sortim del editor i reiniciem Postgresql amb 'systemctl restart postgresql'.

Ja per fi visitem amb el navegador el nou subdomini https://nextcloud.domini.cat per a continuar el procés d'instal·lació de Nextcloud. Omplim les dades que ens demana, usuari (que serà l'admin) i contrasenya que vulguem. Com a tipus de base de dades triem Postgresql fent clic on ho diu i posem el nom de la base de dades (nextcloud), l'usuari de la base de dades (nextcloud), servidor i port (amb el format 'localhost:5432'). Fem clic a 'acabar la configuració'. Trigarà una estona a crear totes les taules de la base de dades i si tot ha anat bé ja tenim el nostre Nextcloud funcionant.

Si et passa com a mí que quan vols iniciar sessió no fa res de res mira que els fitxers php d'inici de sessió siguin del usuari correcte:

Ara ja funcionarà però et recomano que un cop dins vagis al menú admin/resum on Nextcloud et dirà sí hi ha alguna cosa de la teva configuració que no li acaba d'agradar (memcached, opcache etc). El ideal és que tot estigui conforme:

No ho oblido! encara no hem configurat el nostre flamant núvol Nextcloud per a que faci servir la memòria cau de Redis. Editem el fitxer '/var/www/nextcloud/config/config.php' i hi afegim aquest bloc:

'memcache.local' => '\OC\Memcache\APCu',
'filelocking.enabled' => true,
'memcache.locking' => '\OC\Memcache\Redis',
'redis' =>
array (
   'host' => 'localhost',
   'port' => 6379,
   'timeout' => 0.0,
   'password' => '',
   'dbindex' => 0,
),

Ja està! A gaudir del teu propi núvol!