Nextcloud es un software similar a Dropbox gratuito (de código abierto), una bifurcación del proyecto ownCloud. Nextcloud está escrito en PHP y JavaScript, es compatible con muchos sistemas de bases de datos como MySQL/MariaDB, PostgreSQL, base de datos Oracle y SQLite.
Para mantener sus archivos sincronizados entre el escritorio y el servidor, Nextcloud ofrece aplicaciones para escritorios Windows, Linux y Mac y una aplicación móvil para Android e iOS.
En este tutorial, le 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 protegeremos con un certificado Let's Encrypt SSL gratuito.
Requisito previo
Para esta guía, instalaremos Nextcloud en el servidor CentOS 8 con 2 GB de RAM, 25 GB de espacio libre y 2 CPU.
Qué haremos:
- Instalar 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
Primero, instalaremos el servidor web Nginx en el servidor CentOS 8 y abriremos el puerto HTTP y HTTPS en el firewalld.
Instale Nginx desde el repositorio de AppStream con el siguiente comando dnf.
sudo dnf install nginx
Una vez completada la instalación, inicie el servicio nginx y agréguelo al inicio del sistema.
systemctl start nginx
systemctl enable nginx
Ahora verifique el estado del servicio nginx usando el siguiente comando.
systemctl status nginx
Obtendrá el servicio nginx funcionando en el servidor CentOS 8.
A continuación, agregaremos los servicios HTTP y HTTPS al firewalld.
Agregue los servicios HTTP y HTTPS al firewalld usando el comando firewall-cmd a continuación.
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
Después de eso, vuelva a cargar los servicios de firewalld.
firewall-cmd --reload
Como resultado, instaló correctamente el servidor web Nginx y abrió los puertos HTTP y HTTPS en el servidor CentOS 8.
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 PHP 7.3 que se puede instalar desde el repositorio de REMI.
Antes de continuar, habilitaremos el repositorio 'PowerTools' y agregaremos los repositorios EPEL y REMI para el servidor CentOS 8.
Ejecute el comando dnf a continuación.
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 verifique todos los repositorios disponibles en el sistema.
dnf repolist
Y obtendrá el resultado como se muestra a continuación.
Habilitó el repositorio 'PowerTools' y agregó los repositorios EPEL y REMI para CentOS 8.
A continuación, habilitaremos el repositorio PHP 7.3 REMI.
Verifique todos los módulos disponibles para paquetes PHP.
dnf module list php
Ahora habilite el módulo del repositorio PHP 7.3 REMI.
dnf module enable php:remi-7.3
Después de eso, instale los paquetes PHP y PHP-FPM 7.3 para Nextcloud usando el comando dnf 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 ha instalado PHP y PHP-FPM 7.3 en el sistema CentOS 8.
Paso 3:configurar PHP-FPM 7.3
En este paso, configuraremos PHP-FPM para la implementación de Nextcloud.
Edite la configuración de 'php.ini' usando el siguiente comando.
vim /etc/php.ini
Descomente y cambie la configuración como se muestra a continuación.
memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0
Guardar y cerrar.
Ahora edite la configuración de PHP opcache '/etc/php.d/10-opcache.ini'.
vim /etc/php.d/10-opcache.ini
Cambie la configuración como se muestra 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
Guardar y cerrar.
A continuación, edite la configuración de PHP-FPM '/etc/php-fpm.d/www.conf'.
vim /etc/php-fpm.d/www.conf
Cambie el 'usuario' y el 'grupo' a 'nginx'.
user = nginx
group = nginx
Cambie la configuración de 'escuchar' al archivo sock como se muestra a continuación.
listen = /run/php-fpm/www.sock
Quite el comentario de la variable de entorno de PHP a continuación.
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
Descomente la configuración de opcache en la última línea.
php_value[opcache.file_cache] = /var/lib/php/opcache
Guardar y cerrar.
Ahora cree un nuevo directorio para la sesión de PHP y opcache, luego cambie 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 ha completado la configuración de PHP-FPM para la instalación de Nextcloud.
Inicie el servicio PHP-FPM y agréguelo al arranque del sistema.
systemctl enable php-fpm
systemctl start php-fpm
Ahora verifique el archivo sock de PHP-FPM y el estado del servicio.
netstat -pl | grep php
systemctl status php-fpm
Y obtendrá el resultado como se muestra a continuación.
Como resultado, el PHP-FPM funciona bajo el archivo sock '/run/php-fpm/www.sock'.
Paso 4:instalar y configurar MariaDB
En este paso, instalaremos el servidor de la base de datos MariaDB, configuraremos la autenticación de contraseña raíz y crearemos una nueva base de datos y un usuario para Nextcloud.
Instale la base de datos MariaDB usando el comando dnf a continuación.
sudo dnf install mariadb mariadb-server
Una vez completada la instalación, inicie el servicio MariaDB y agréguelo al inicio del sistema.
systemctl start mariadb
systemctl enable mariadb
Y el servicio MariaDB está en funcionamiento.
A continuación, configuraremos la autenticación de la contraseña raíz usando el comando 'mysql_secure_installation' a continuación.
mysql_secure_installation
Escriba su contraseña de root y escriba '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 raíz de MariaDB ha sido configurada.
Ahora inicie sesión en el shell de MySQL usando el siguiente comando mysql.
mysql -u root -p
TYPE YOUR ROOT PASSWORD
Ahora cree una nueva base de datos 'nextcloud_db' y cree un nuevo usuario 'nextclouduser' con la contraseña 'nextcloudpassdb' utilizando las consultas a continuación.
create database nextcloud_db;
create user [email protected] identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to [email protected] identified by 'nextcloudpassdb';
flush privileges;
Y ha creado la base de datos y el usuario para la instalación de Nextcloud.
Paso 4:generar SSL Letsencrypt
En este paso, generaremos el SSL letsencrypt usando el 'certbot'. Los certificados SSL se utilizarán para asegurar el acceso a Nextcloud.
Instale certbot desde el repositorio de EPEL usando el comando dnf a continuación.
sudo dnf install certbot
Una vez que se complete la instalación, genere los certificados SSL para el nombre de dominio de Nextcloud usando el siguiente comando y asegúrese de cambiar el nombre de dominio y la dirección de correo electrónico con los suyos propios.
certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io
Una vez que se completa, todos los certificados SSL generados se ubican en el directorio '/etc/letsencrypt/live/cloud.hakase-labs.io'.
Compruébalo usando el siguiente comando.
ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/
Y ha generado el SSL letsencrypt usando la herramienta certbot.
Paso 5:descarga e instalación de Nextcloud
En este paso, descargaremos la última versión de Nextcloud 17.
Antes de descargar el código fuente de nextcloud, instale el paquete zip en el sistema.
sudo dnf install unzip
Ahora vaya al directorio '/var/www/' y descargue el código fuente de Nextcloud usando el comando wget como se muestra 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 usando el siguiente comando.
unzip nextcloud-17.0.2.zip
Y obtendrá un nuevo directorio llamado 'nextcloud'.
Ahora cree un nuevo directorio de 'datos' para Nextcloud. El directorio 'datos' se utilizará para almacenar datos de usuario.
mkdir -p /var/www/nextcloud/data/
Después de eso, cambie el propietario del directorio 'nextcloud' al usuario y grupo 'nginx'.
sudo chown -R nginx:nginx /var/www/nextcloud
Y ha descargado la última versión de Nextcloud 17 en el directorio '/var/www'.
Paso 6:configurar el host virtual de Nginx para Nextcloud
Después de descargar el código fuente de Nextcloud, configuraremos el host virtual Nginx para Nextcloud.
Vaya al directorio '/etc/nginx/conf.d' y cree una nueva configuración 'nextcloud.conf'.
cd /etc/nginx/conf.d/
vim nextcloud.conf
Ahora cambie el nombre de dominio y la ruta del certificado SSL con los suyos propios y pegue 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;
}
}
Guardar y cerrar.
Después de eso, pruebe la configuración de nginx y reinicie el servicio de Nginx. Y asegúrese de que no haya ningún error.
nginx -t
systemctl restart nginx
Ahora el servicio Nginx abrirá un nuevo puerto HTTPS en el sistema, verifíquelo con el siguiente comando.
netstat -plntu
Y obtendrá el resultado como se muestra a continuación.
Como resultado, agregó la configuración de host virtual de Nginx para Nextcloud y habilitó el HTTPS seguro en la parte superior.
Paso 7:configurar SELinux para Nextcloud
Para este tutorial, usaremos SELinux en el modo 'aplicar'. Y configuraremos SELinux para la instalación de Nextcloud.
Instale la herramienta de administración de SELinux usando el comando dnf a continuación.
sudo dnf install policycoreutils-python-utils
Ahora ejecute el siguiente comando como root en su 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.
Paso 8:asistente de instalación de Nextcloud
Ahora abra su navegador web y escriba su nombre de dominio Nextcloud en la barra de direcciones.
https://cloud.hakase-labs.io/
Ahora obtendrá la página de instalación de Nextcloud como se muestra a continuación.
Escriba su usuario y contraseña de administrador, luego elija 'MySQL/MariaDB' como su base de datos y escriba los detalles sobre la base de datos que ha creado en la parte superior.
Ahora haga clic en el botón 'Finalizar configuración' y comenzará la instalación.
Una vez que se complete la instalación, obtendrá el panel de Nextcloud como se muestra a continuación.
Como resultado, instaló 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.