GNU/Linux >> Tutoriales Linux >  >> Fedora

Cómo instalar y configurar Nextcloud en Fedora 32

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 entre 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

  • 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

Verifique 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ía ver un resultado 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

Habilitar el remi repositorio y deshabilite el remi-modular repositorio. 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 procesos PHP de Unix en nginx . Encuentra el user=apache y group=apache líneas 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 Ctrl + X e ingresando Y cuando se le solicite.

Ahora edite la configuración de PHP opcache /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 Ctrl + X e ingresando Y cuando se le solicite.

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

$ 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

Por defecto, hay 3 archivos en /var/lib/php/ directorio cuyo propietario de grupo está establecido 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 se envía de manera predeterminada 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 funciona correctamente.

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 Intro se elige la opción predeterminada (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

Introduzca su contraseña raíz 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, debemos 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 Ctrl + X e ingresando 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 /etc/nginx/nginx.conf archivo para editar.

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

Presiona Ctrl + X para cerrar el editor y presiona Y cuando se le solicite guardar el archivo.

Cree el archivo /etc/nginx/sites-available/nextcloud.conf utilizando 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;
    }
}

Presiona Ctrl + X para cerrar el editor y presiona Y cuando se le solicite guardar el archivo.

Active este archivo de configuración vinculándolo a sites-enabled directorio.

$ 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 nginx usuario 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 /var/www/html/nextcloud/config/config.php archivo.

$ sudo nano config/config.php

Cambiar el valor de trusted_domains variable 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',
  ),

Presiona Ctrl + X para cerrar el editor y presiona 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.

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

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.


Fedora
  1. Cómo instalar Phorum con Nginx en Fedora 30

  2. Cómo instalar y configurar Redis 6 en Fedora 34

  3. Cómo instalar y configurar Ansible en Fedora 35

  4. Cómo instalar y configurar Mariadb en Fedora 35

  5. Cómo instalar PHP 8 en Fedora 35

Cómo instalar Nginx con PHP y MariaDB (LEMP Stack) en Fedora 31

Cómo instalar y configurar el servidor web Caddy con PHP en Fedora 34 / CentOS 8

Cómo instalar y configurar Drupal en Fedora 35/34

Cómo instalar y configurar Git en Fedora 35

Cómo instalar y usar Telnet en Fedora 35

Cómo instalar Redis y configurar en Fedora 35