Cómo instalar y configurar Nextcloud en Fedora 32

P√°gina Nginx predeterminada de Fedora

Nextcloud es un software de c√≥digo abierto para almacenar y sincronizar sus datos en m√ļltiples dispositivos. Puedes considerarlo como tu propio clon de Dropbox. Pero adem√°s de almacenar archivos, tambi√©n proporciona funciones adicionales como Calendario, Contactos, Tareas programadas, transmisi√≥n de medios, etc.

Nextcloud proporciona aplicaciones para Windows, Linux, MacOS y aplicaciones móviles para Android e iOS que puede usar para sincronizar archivos en sus diversos dispositivos.

En este tutorial, aprenderemos cómo instalar y configurar Nextcloud en un servidor basado en Fedora 32. También instalaremos el servidor web Nginx junto con PHP 7.4 y MariaDB

requisitos previos

  • Un servidor que ejecuta Fedora 32.
  • Un usuario sudo no root.
  • Aseg√ļrate de que todo est√© actualizado.
    $ sudo dnf update
    
  • Paquetes esenciales.
    $ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
    

    Es posible que algunos de estos paquetes ya estén en su sistema.

Configurar cortafuegos

El primer paso es configurar el cortafuegos. El servidor Fedora viene con el cortafuegos Firewalld preinstalado.

Compruebe si el cortafuegos se est√° ejecutando.

$ sudo firewall-cmd --state
running

Compruebe los servicios/puertos permitidos actualmente.

$ sudo firewall-cmd --permanent --list-services

Debería mostrar el siguiente resultado.

dhcpv6-client mdns ssh

Permitir puertos HTTP y HTTPS.

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

Vuelva a comprobar el estado del cortafuegos.

$ sudo firewall-cmd --permanent --list-services

Deberías ver una salida similar.

dhcpv6-client http https mdns ssh

Vuelva a cargar el cortafuegos.

$ sudo systemctl reload firewalld

Instalar PHP

Fedora 32 por defecto viene con PHP 7.4 pero para tener un repositorio PHP actualizado, agregaremos el repositorio REMI.

Instale el repositorio REMI, que es el repositorio oficial de Fedora para instalar paquetes PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Habilite el repositorio remi y deshabilite el repositorio remi-modular. Esto habilita el repositorio requerido para instalar paquetes de PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Instale PHP 7.4 junto con algunos paquetes adicionales.

$ sudo dnf install php-fpm php-cli php-gd php-mbstring php-intl php-mysqlnd php-imagick php-zip php-json php-process php-xml php-bcmath php-gmp php-ftp php-smbclient php-opcache

Compruebe si PHP funciona correctamente.

$ php --version
PHP 7.4.11 (cli) (built: Sep 29 2020 10:17:06) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies

Configurar PHP

Abra el archivo /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Necesitamos configurar el usuario/grupo de Unix de procesos PHP para nginx. Busque las líneas user=apache y group=apache en el archivo y cámbielas a nginx.

...
; 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
...

Descomente las variables 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

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

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

$ sudo nano /etc/php.d/10-opcache.ini

Cambie la configuración como se muestra a continuación.

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

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Ejecute los siguientes comandos para aumentar la carga de archivos y los límites de memoria para PHP.Advertisement

$ sudo cp /etc/php.ini /etc/php.ini.bak
$ sudo sed -i "s/memory_limit = 128M/memory_limit = 512M/" /etc/php.ini
$ sudo sed -i "s/post_max_size = 8M/post_max_size = 100M/" /etc/php.ini
$ sudo sed -i "s/upload_max_filesize = 2M/upload_max_filesize = 100M/" /etc/php.ini

De forma predeterminada, hay 3 archivos en el directorio /var/lib/php/ cuyo propietario de grupo est√° configurado en apache, pero estamos usando Nginx. Entonces, debemos otorgar permisos de usuario de nginx para leer y escribir en los 3 directorios con setfacl.

$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/opcache/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/session/
$ sudo setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/

Habilite e inicie el proceso php-fpm.

$ sudo systemctl enable php-fpm
$ sudo systemctl start php-fpm

Instalar Nginx

Fedora 32 viene por defecto con la √ļltima versi√≥n estable de Nginx.

Instala Nginx.

$ sudo dnf install nginx -y

Compruebe si funciona correctamente.

$ nginx -v
nginx version: nginx/1.18.0

Inicie y habilite Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Abra la dirección IP de su servidor en un navegador para ver la siguiente página. Significa que Nginx está funcionando correctamente.

P√°gina Nginx predeterminada de Fedora

Instalar MariaDB

MariaDB es un reemplazo directo de MySQL, lo que significa que los comandos para ejecutar y operar MariaDB son los mismos que para MySQL.

Fedora 32 viene por defecto con MariaDB 10.4, que es el que usaremos.

Instale el servidor MariaDB.

$ sudo dnf install mariadb-server

Compruebe si MariaDB se instaló correctamente.

$ mysql --version
mysql  Ver 15.1 Distrib 10.4.14-MariaDB, for Linux (x86_64) using  EditLine wrapper

Habilite e inicie el servicio MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Ejecute el siguiente comando para realizar la configuraci√≥n predeterminada, como proporcionar una contrase√Īa de root, eliminar usuarios an√≥nimos, prohibir el inicio de sesi√≥n de root de forma remota y descartar tablas de prueba.

$ sudo mysql_secure_installation

Al pulsar Enter se elige la opci√≥n por defecto (la que est√° en may√ļsculas, Y en este caso).

Enter current password for root (enter for none): [PRESS ENTER]
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Change the root password? [Y/n] [ANSWER n]
Remove anonymous users? [Y/n] [PRESS ENTER]
Disallow root login remotely? [Y/n] [PRESS ENTER]
Remove test database and access to it? [Y/n] [PRESS ENTER]
Reload privilege tables now? [Y/n] [PRESS ENTER]

Eso es todo. La próxima vez que desee iniciar sesión en MySQL, use el siguiente comando

$ sudo mysql

Ingrese su contrase√Īa de root cuando se le solicite.

Configurar MariaDB

Ingrese el siguiente comando para ingresar al shell de MySQL.

$ sudo mysql

Cree un usuario MySQL para manejar la base de datos NextCloud.

mysql> CREATE USER 'nextuser'@'localhost' IDENTIFIED BY 'yourpassword';

Cree la base de datos de NextCloud.

mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Otorgue todos los privilegios a la base de datos de Nextcloud al usuario que creamos.

mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextuser'@'localhost';

Salga de MySQL Shell.

mysql> exit

Descargar Nextcloud

Es hora de descargar y configurar las carpetas de Nextcloud.

$ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
$ tar -jxvf latest.tar.bz2
$ sudo mv nextcloud /var/www/html/

A continuación, necesitamos crear una carpeta de datos.

$ sudo mkdir /var/www/html/nextcloud/data
$ sudo chown -R nginx:nginx /var/www/html/nextcloud

Instalar SSL

Instalaremos SSL utilizando el servicio Let’s Encrypt.

Para eso, instale Certbot.

$ sudo dnf install certbot

Detenga Nginx porque interferir√° con el proceso de Certbot.

$ sudo systemctl stop nginx

Generar el certificado. También creamos un certificado DHParams.

$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL="[email protected]"
$ sudo certbot certonly --standalone -d $LDOMAIN --preferred-challenges http --agree-tos -n -m $LEMAIL --keep-until-expiring 
$ sudo systemctl start nginx
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

También necesitamos configurar un trabajo cron para renovar el SSL automáticamente. Para abrir el editor crontab, ejecute el siguiente comando

$ sudo EDITOR=nano crontab -e

El comando anterior abre Crontab con el editor Nano en lugar del editor Vim predeterminado.

Pegue la siguiente línea en la parte inferior.

25 2 * * * /usr/bin/certbot renew --quiet --pre-hook ‚Äúsystemctl stop nginx‚ÄĚ --post-hook ‚Äúsystemctl start nginx‚ÄĚ

El trabajo cron anterior ejecutará certbot a las 2:25 am todos los días. Puedes cambiarlo a lo que quieras.

Guarde el archivo presionando Control + X y entrando Y Cuando se le solicite.

Configurar SELinux/Permisos

SELinux debe configurarse para que Nextcloud funcione en Fedora. Ingrese los siguientes comandos para obtener la configuración básica de SELinux que debería funcionar para todos.

Aseg√ļrese de ajustar las rutas de los archivos si son diferentes en su caso.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

$ sudo restorecon -Rv '/var/www/html/nextcloud/'

Para habilitar las actualizaciones a través de la interfaz web de Nextcloud, ejecute también el siguiente comando.

$ sudo setsebool -P httpd_unified on

Configurar Nginx para Nextcloud

A continuación, debemos configurar Nginx para alojar Nextcloud.

Para nuestro propósito, Nextcloud se alojará en el dominio http://nextcloud.example.com,

Configure directorios donde vivir√°n los bloques del servidor.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Abra el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf	

Pegue las siguientes líneas después de la línea include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo.

Cree el archivo /etc/nginx/sites-available/nextcloud.conf usando el editor Nano.

$ sudo nano /etc/nginx/sites-available/nextcloud.conf

Pegue el siguiente c√≥digo en el editor. Aseg√ļrese de reemplazar el dominio de ejemplo con su dominio real antes de pegar.

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

server {
    listen 80;
    listen [::]:80;
    server_name nextcloud.example.com;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud.example.com;
	
	access_log /var/log/nginx/nextcloud.access.log;
    error_log /var/log/nginx/nextcloud.error.log;

    # 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/nextcloud.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nextcloud.example.com/privkey.pem;
	ssl_protocols TLSv1.2 TLSv1.3;
	ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;
	ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
	ssl_dhparam /etc/ssl/certs/dhparam.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/html/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 100M;
    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 build 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\/.+|.+\/richdocumentscode\/proxy)\.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_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|mp4|webm)$ {
        try_files $uri /index.php$request_uri;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo.

Active este archivo de configuración vinculándolo al directorio de sitios habilitados.

$ sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-enabled/

Pruebe la configuración de Nginx.

$ sudo nginx -t

Vuelva a cargar el servicio Nginx si todo est√° bien.

$ sudo systemctl reload nginx

Instalar Nextcloud

Hay dos formas de configurar Nextcloud: a través de la línea de comandos o a través de la interfaz gráfica. Optaremos por el método de línea de comandos.

Ingrese al directorio de Nextcloud.

$ cd /var/www/html/nextcloud

Ejecute el siguiente comando para instalar Nextcloud.

$ sudo -u nginx php occ  maintenance:install --database "mysql" --database-name "nextcloud"  --database-user "nextuser" --database-pass "yourpassword" --admin-user "admin" --admin-pass "password"

Este comando se ejecuta como usuario nginx porque tiene permisos de escritura en la carpeta Nextcloud.

A continuación, debemos agregar nuestro dominio a la lista de dominios de confianza. Abra el archivo /var/www/html/nextcloud/config/config.php.

$ sudo nano config/config.php

Cambie el valor de la variable trust_domains agregando la dirección IP de su servidor y su dominio Nextcloud nextcloud.example.com para que pueda acceder a su instalación desde su dominio.

'trusted_domains' =>
  array (
    0 => 'localhost',
    1 => '167.172.35.56',
    2 => 'nextcloud.example.com',
  ),

Prensa Control + X para cerrar el editor y pulsar Y cuando se le solicite guardar el archivo.

Inicie su instalación de Nextcloud abriendo https://nextcloud.example.com en su navegador y verá la siguiente pantalla.

Página de inicio de sesión de Nextcloud

Ingrese sus detalles de inicio de sesión de administración. Desplácese a través de los banners introductorios de Nextcloud, configure su ubicación y estado del clima y elija un fondo de pantalla y, una vez que haya terminado, debería recibir una pantalla similar.

P√°gina de inicio de Nextcloud

Conclusión

Esto concluye nuestro tutorial sobre la instalación de Nextcloud en el servidor Fedora 32. Si tiene alguna pregunta, publíquela en los comentarios a continuación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *