Cómo instalar Nextcloud con Nginx y PHP 7.3 en CentOS 8

Nextcloud es un software gratuito (de código abierto) similar a Dropbox, una bifurcación del proyecto ownCloud. Nextcloud está escrito en PHP y JavaScript, y es compatible con muchos sistemas de bases de datos como MySQL/MariaDB, PostgreSQL, la base de datos Oracle y SQLite.

Para mantener tus archivos sincronizados entre el escritorio y el servidor, Nextcloud ofrece aplicaciones para escritorios de Windows, Linux y Mac y una aplicación móvil para Android e iOS.

En este tutorial, te mostramos cómo instalar Nextcloud 17 con el servidor web Nginx, PHP 7.3 y la base de datos MariaDB en un servidor CentOS 8. Instalaremos Nextcloud y lo aseguraremos con un certificado SSL gratuito de Let’s Encrypt.

Requisitos previos

Para esta guía, instalaremos Nextcloud en el servidor CentOS 8 con 2GB de RAM, 25GB de espacio libre y 2CPUs.

Qué vamos a hacer

  • Instalar el servidor web Nginx
  • Instalar PHP-FPM 7.3
  • Configurar PHP-FPM 7.3
  • Instalar y configurar la base de datos MariaDB
  • Generar SSL Letsencrypt
  • Descargar Nextcloud 17
  • Configurar Nginx Virtualhost para Nextcloud
  • Configurar SELinux para Nextcloud
  • Post-Instalación de Nextcloud

Paso 1 – Instalar Nginx

En primer lugar, instalaremos el servidor web Nginx en el servidor CentOS 8 y abriremos el puerto HTTP y HTTPS en el firewalld.

Instala Nginx desde el repositorio de AppStream utilizando el comando dnf que aparece a continuación.

sudo dnf install nginx

Una vez completada la instalación, inicia el servicio nginx y añádelo al arranque del sistema.

systemctl start nginx
systemctl enable nginx

Ahora comprueba el estado del servicio nginx utilizando el siguiente comando.

systemctl status nginx

Obtendrás que el servicio nginx está en funcionamiento en el servidor CentOS 8.

Iniciar Nginx con systemd

A continuación, añadiremos los servicios HTTP y HTTPS al firewalld.

Añade los servicios HTTP y HTTPS al firewalld utilizando el comando firewall-cmd que aparece a continuación.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

Después, recarga los servicios del firewalld.

firewall-cmd --reload

Como resultado, has instalado con éxito el servidor web Nginx y has abierto los puertos HTTP y HTTPS en el servidor CentOS 8.

Configurar el cortafuegos

Paso 2 – Instalar PHP-FPM

De acuerdo con los requisitos del sistema Nextcloud, se recomienda utilizar PHP 7.2 o PHP 7.3 para su instalación.

Para esta guía, utilizaremos el PHP 7.3 que se puede instalar desde el repositorio REMI.

Antes de continuar, habilitaremos el repositorio ‘PowerTools’ y añadiremos los repositorios EPEL y REMI para el servidor CentOS 8.

Ejecuta el siguiente comando dnf.

sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Ahora comprueba todos los repositorios disponibles en el sistema.

dnf repolist

Y obtendrás el resultado que se indica a continuación.

Comprueba los repositorios de DNF

Has habilitado el repositorio ‘PowerTools’ y has añadido los repositorios EPEL y REMI para CentOS 8.

A continuación, habilitaremos el repositorio REMI de PHP 7.3.

Comprueba todos los módulos disponibles para los paquetes de PHP.

dnf module list php

Ahora habilita el módulo del repositorio PHP 7.3 REMI.

dnf module enable php:remi-7.3

Añadir el repositorio Remi en CentOS 8

Después, instala los paquetes PHP y PHP-FPM 7.3 para Nextcloud utilizando el comando dnf que aparece a continuación.

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

Y ya has instalado PHP y PHP-FPM 7.3 en el sistema CentOS 8.

Paso 3 – Configurar PHP-FPM 7.3

En este paso, configuraremos el despliegue de PHP-FPM para Nextcloud.

Edita la configuración ‘php.ini’ con el siguiente comando.

vim /etc/php.ini

Descomenta y cambia la configuración como se indica a continuación.

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

Guarda y cierra.

Ahora edita la configuración de PHP opcache ‘/etc/php.d/10-opcache.ini’.

vim /etc/php.d/10-opcache.ini

Cambia la configuración como se indica a continuación.

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Guarda y cierra.

A continuación, edita la configuración de PHP-FPM ‘/etc/php-fpm.d/www.conf’.

vim /etc/php-fpm.d/www.conf

Cambia el ‘usuario’ y el ‘grupo’ por ‘nginx’.

user = nginx
group = nginx

Cambia la configuración de ‘listen’ al archivo sock como se indica a continuación.

listen = /run/php-fpm/www.sock

Descomenta la variable de entorno PHP de abajo.

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Descomenta la configuración de opcache en la última línea.

php_value[opcache.file_cache] = /var/lib/php/opcache

Guarda y cierra.

Ahora crea un nuevo directorio para la sesión PHP y el opcache, y cambia el propietario de esos directorios al usuario y grupo ‘nginx’.

mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}

Y ya has completado la configuración de PHP-FPM para la instalación de Nextcloud.

Inicia el servicio PHP-FPM y añádelo al arranque del sistema.

systemctl enable php-fpm
systemctl start php-fpm

Configurar PHP 7.3

Ahora comprueba el archivo sock de PHP-FPM y el estado del servicio.

netstat -pl | grep php
systemctl status php-fpm

Y obtendrás el resultado que se muestra a continuación.

Configurar PHP-FPM

Como resultado, el PHP-FPM está funcionando bajo el archivo sock ‘/run/php-fpm/www.sock’.

Paso 4 – Instalar y configurar MariaDB

En este paso, instalaremos el servidor de base de datos MariaDB, configuraremos la autenticación de la contraseña de root y crearemos una nueva base de datos y un usuario para Nextcloud.

Instala la base de datos MariaDB utilizando el comando dnf que aparece a continuación.

sudo dnf install mariadb mariadb-server

Una vez completada la instalación, inicia el servicio MariaDB y añádelo al arranque del sistema.

systemctl start mariadb
systemctl enable mariadb

Y el servicio MariaDB ya está en marcha.

Configurar MariaDB

A continuación, configuraremos la autenticación de la contraseña de root utilizando el comando ‘mysql_secure_installation’ que aparece a continuación.

mysql_secure_installation

Escribe tu contraseña de root y teclea ‘Y’ para el resto de la configuración.

Set a root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Y la contraseña de root de MariaDB ha sido configurada.

Ahora entra en el shell de MySQL utilizando el comando mysql que aparece a continuación.

mysql -u root -p
TYPE YOUR ROOT PASSWORD

Ahora crea una nueva base de datos ‘nextcloud_db’ y crea un nuevo usuario ‘nextclouduser’ con la contraseña ‘nextcloudpassdb’ utilizando las consultas de abajo.

create database nextcloud_db;
create user nextclouduser@localhost identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextcloudpassdb';
flush privileges;

Y ya has creado la base de datos y el usuario para la instalación de Nextcloud.

Configurar la base de datos de Nextcloud

Paso 4 – Generar SSL Letsencrypt

En este paso, generaremos el SSL letsencrypt utilizando el ‘certbot’. Los certificados SSL se utilizarán para asegurar el acceso a Nextcloud.

Instala certbot desde el repositorio de EPEL utilizando el comando dnf que aparece a continuación.

sudo dnf install certbot

Una vez completada la instalación, genera los certificados SSL para el nombre de dominio de Nextcloud utilizando el comando de abajo y asegúrate de cambiar el nombre de dominio y la dirección de correo electrónico por los tuyos.

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io

Una vez completado, todos los certificados SSL generados se encuentran en el directorio ‘/etc/letsencrypt/live/cloud.hakase-labs.io’.

Compruébalo con el siguiente comando.

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

Y ya has generado el letsencrypt SSL con la herramienta certbot.

Paso 5 – Descargar e instalar Nextcloud

En este paso, descargaremos la última versión de Nextcloud 17.

Antes de descargar el código fuente de Nextcloud, instala el paquete zip en el sistema.

sudo dnf install unzip

Ahora ve al directorio ‘/var/www/’ y descarga el código fuente de Nextcloud utilizando el comando wget como se indica a continuación.

cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip

Extrae el código fuente de Nextcloud utilizando el siguiente comando.

unzip nextcloud-17.0.2.zip

Y obtendrás un nuevo directorio llamado ‘nextcloud’.

Ahora crea un nuevo directorio ‘data’ para Nextcloud. El directorio ‘data’ se utilizará para almacenar los datos de los usuarios.

mkdir -p /var/www/nextcloud/data/

Después, cambia el propietario del directorio ‘nextcloud’ al usuario y grupo ‘nginx’.

sudo chown -R nginx:nginx /var/www/nextcloud

Y has descargado el último Nextcloud 17 en el directorio ‘/var/www’.

Descargar NextCloud

Paso 6 – Configurar el host virtual Nginx para Nextcloud

Después de descargar el código fuente de Nextcloud, vamos a configurar el host virtual Nginx para Nextcloud.

Ve al directorio ‘/etc/nginx/conf.d’ y crea una nueva configuración ‘nextcloud.conf’.

cd /etc/nginx/conf.d/
vim nextcloud.conf

Ahora cambia el nombre de dominio y la ruta del certificado SSL por los tuyos y pega la siguiente configuración en él.

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

server {
listen 80;
listen [::]:80;
server_name cloud.hakase-labs.io;
# enforce https
return 301 https://$server_name:443$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cloud.hakase-labs.io;

# 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/ssl/nginx/fullchain.pem;
ssl_certificate_key /etc/ssl/nginx/privkey.pem;

# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# 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 Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;

# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;

# Path to the root of your installation
root /var/www/nextcloud;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}

# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;

# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

# Uncomment if your server is built with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;

location / {
rewrite ^ /index.php;
}

location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}

location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}

location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}

# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# 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 Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;

# Optional: Don't log access to assets
access_log off;
}

location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}

Guarda y cierra.

Después, prueba la configuración de nginx y reinicia el servicio Nginx. Y asegúrate de que no hay ningún error.

nginx -t
systemctl restart nginx

Ahora el servicio Nginx abrirá un nuevo puerto HTTPS en el sistema, compruébalo con el siguiente comando.

netstat -plntu

Y obtendrás el resultado que se muestra a continuación.

Configurar Nginx para Nextcloud

Como resultado, has añadido la configuración del host virtual Nginx para Nextcloud y has habilitado el HTTPS seguro sobre él.

Paso 7 – Configurar SELinux para Nextcloud

Para este tutorial, vamos a utilizar SELinux en el modo de «refuerzo». Y vamos a configurar el SELinux para la instalación de Nextcloud.

Instala la herramienta de gestión de SELinux utilizando el comando dnf que aparece a continuación.

sudo dnf install policycoreutils-python-utils

Ahora ejecuta el siguiente comando como root en tu servidor.

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'

restorecon -Rv '/var/www/nextcloud/'

Y la configuración de SELinux para Nextcloud se ha completado.

Configurar SELinux para Nextcloud

Paso 8 – Asistente de instalación de Nextcloud

Ahora abre tu navegador web y escribe el nombre de tu dominio Nextcloud en la barra de direcciones.

https://cloud.hakase-labs.io/

Ahora obtendrás la página de instalación de Nextcloud como se muestra a continuación.

Instalador web de Nextcloud

Escribe tu usuario y contraseña de administrador, luego elige ‘MySQL/MariaDB’ como base de datos y escribe los detalles de la base de datos que has creado en la parte superior.

Ahora haz clic en el botón «Finalizar la instalación» y comenzará la instalación.

Una vez que la instalación se haya completado, obtendrás el panel de control de Nextcloud como se muestra a continuación.

NextCloud en CentOS 8

Como resultado, has instalado con éxito la última versión de Nextcloud 17 con el servidor web Nginx, PHP-FPM 7.3 y la base de datos MariaDB en el servidor CentOS 8.

Referencia

También te podría gustar...