GNU/Linux >> Linux Esercitazione >  >> Fedora

Come installare e configurare Nextcloud su Fedora 32

Nextcloud è un software opensource per l'archiviazione e la sincronizzazione dei dati su più dispositivi. Puoi considerarlo come il tuo clone Dropbox. Ma oltre all'archiviazione dei file, fornisce anche funzionalità aggiuntive come Calendario, Contatti, Attività pianificate, streaming multimediale ecc.

Nextcloud fornisce app per Windows, Linux, MacOS e app mobili per Android e iOS che puoi utilizzare per sincronizzare i file tra i tuoi vari dispositivi.

In questo tutorial impareremo come installare e configurare Nextcloud su un server basato su Fedora 32. Installeremo anche il server web Nginx insieme a PHP 7.4 e MariaDB

Prerequisiti

  • Un server che esegue Fedora 32.

  • Un utente sudo non root.

  • Assicurati che tutto sia aggiornato.

    $ sudo dnf update
    
  • Pacchetti essenziali.

    $ sudo dnf install wget curl bzip2 nano unzip policycoreutils-python-utils -y
    

    Alcuni di questi pacchetti potrebbero essere già sul tuo sistema.

Configura Firewall

Il primo passo è configurare il firewall. Il server Fedora viene fornito con il firewall Firewalld preinstallato.

Controlla se il firewall è in esecuzione.

$ sudo firewall-cmd --state
running

Controlla i servizi/porte attualmente consentiti.

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

Dovrebbe mostrare il seguente output.

dhcpv6-client mdns ssh

Consenti porte HTTP e HTTPS.

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

Ricontrolla lo stato del firewall.

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

Dovresti vedere un output simile.

dhcpv6-client http https mdns ssh

Ricarica il firewall.

$ sudo systemctl reload firewalld

Installa PHP

Fedora 32 per impostazione predefinita viene fornito con PHP 7.4 ma per avere un repository PHP aggiornato, aggiungeremo il repository REMI.

Installa il repository REMI che è il repository ufficiale di Fedora per l'installazione dei pacchetti PHP.

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

Abilita il remi repository e disabilitare il remi-modular deposito. Ciò abilita il repository richiesto per installare i pacchetti PHP 7.4.

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

Installa PHP 7.4 insieme ad alcuni pacchetti aggiuntivi.

$ 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

Controlla se PHP funziona correttamente.

$ 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

Configura PHP

Apri il file /etc/php-fpm.d/www.conf .

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

Dobbiamo impostare l'utente/gruppo di processi PHP Unix su nginx . Trova user=apache e group=apache righe nel file e cambiale in 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
...

Decommenta le variabili di ambiente PHP di seguito.

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

Decommenta la configurazione di opcache nell'ultima riga.

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

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Ora modifica la configurazione di PHP opcache /etc/php.d/10-opcache.ini .

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

Modifica la configurazione come di seguito.

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

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Esegui i seguenti comandi per aumentare il caricamento file e i limiti di memoria per 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

Per impostazione predefinita, ci sono 3 file in /var/lib/php/ directory il cui proprietario del gruppo è impostato su apache , ma stiamo usando Nginx. Quindi dobbiamo concedere all'utente nginx i permessi per leggere e scrivere nelle 3 directory 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/

Abilita e avvia il processo php-fpm.

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

Installa Nginx

Fedora 32 per impostazione predefinita viene fornito con l'ultima versione Stable di Nginx.

Installa Nginx.

$ sudo dnf install nginx -y

Controlla se funziona correttamente.

$ nginx -v
nginx version: nginx/1.18.0

Avvia e abilita Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Apri l'indirizzo IP del tuo server in un browser per vedere la pagina seguente. Significa che Nginx funziona correttamente.

Installa MariaDB

MariaDB è un sostituto drop-in di MySQL, il che significa che i comandi per eseguire e far funzionare MariaDB sono gli stessi di MySQL.

Fedora 32 per impostazione predefinita viene fornito con MariaDB 10.4 che è quella che useremo.

Installa il server MariaDB.

$ sudo dnf install mariadb-server

Verifica se MariaDB è stata installata correttamente.

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

Abilita e avvia il servizio MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Esegui il comando seguente per eseguire la configurazione predefinita, ad esempio fornire una password di root, rimuovere utenti anonimi, impedire l'accesso come root in remoto e eliminare le tabelle di test.

$ sudo mysql_secure_installation

Premendo Invio si sceglie l'opzione di default (quella che è maiuscola, in questo caso Y).

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]

Questo è tutto. La prossima volta che vuoi accedere a MySQL, usa il seguente comando

$ sudo mysql

Inserisci la tua password di root quando richiesto.

Configura MariaDB

Immettere il comando seguente per accedere alla shell MySQL.

$ sudo mysql

Crea un utente MySQL per gestire il database NextCloud.

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

Crea il database NextCloud.

mysql> CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Concedi tutti i privilegi al database Nextcloud all'utente che abbiamo creato.

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

Esci da MySQL Shell.

mysql> exit

Scarica Nextcloud

È ora di scaricare e configurare le cartelle Nextcloud.

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

Successivamente, dobbiamo creare una cartella di dati.

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

Installa SSL

Installeremo SSL utilizzando il servizio Let's Encrypt.

Per questo, installa Certbot.

$ sudo dnf install certbot

Interrompi Nginx perché interferirà con il processo di Certbot.

$ sudo systemctl stop nginx

Genera il certificato. Creiamo anche un certificato 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

Abbiamo anche bisogno di impostare un cron job per rinnovare automaticamente SSL. Per aprire l'editor crontab, esegui il seguente comando

$ sudo EDITOR=nano crontab -e

Il comando precedente apre Crontab con l'editor Nano invece dell'editor Vim predefinito.

Incolla la riga seguente in basso.

25 2 * * * /usr/bin/certbot renew --quiet --pre-hook “systemctl stop nginx” --post-hook “systemctl start nginx”

Il processo cron di cui sopra verrà eseguito certbot ogni giorno alle 2:25. Puoi cambiarlo in qualsiasi cosa tu voglia.

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Configura SELinux/Autorizzazioni

SELinux deve essere configurato per far funzionare Nextcloud su Fedora. Immettere i seguenti comandi per le impostazioni di base di SELinux che dovrebbero funzionare per tutti.

Assicurati di regolare i percorsi dei file se sono diversi nel tuo 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/'

Per abilitare gli aggiornamenti tramite l'interfaccia web di Nextcloud, esegui anche il comando seguente.

$ sudo setsebool -P httpd_unified on

Configura Nginx per Nextcloud

Successivamente, dobbiamo configurare Nginx per l'hosting di Nextcloud.

Per il nostro scopo, Nextcloud sarà ospitato nel dominio http://nextcloud.example.com ,

Imposta le directory in cui rimarranno i blocchi del server.

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

Apri il /etc/nginx/nginx.conf file per la modifica.

$ sudo nano /etc/nginx/nginx.conf	

Incolla le seguenti righe dopo la riga include /etc/nginx/conf.d/*.conf

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

Premi Ctrl + X per chiudere l'editor e premere Y quando viene richiesto di salvare il file.

Crea il file /etc/nginx/sites-available/nextcloud.conf utilizzando l'editor Nano.

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

Incolla il codice seguente nell'editor. Assicurati di sostituire il dominio di esempio con il tuo dominio reale prima di incollarlo.

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

Premi Ctrl + X per chiudere l'editor e premere Y quando viene richiesto di salvare il file.

Attiva questo file di configurazione collegandolo a sites-enabled directory.

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

Testa la configurazione di Nginx.

$ sudo nginx -t

Ricarica il servizio Nginx se tutto è a posto.

$ sudo systemctl reload nginx

Installa Nextcloud

Esistono due modi per configurare Nextcloud:tramite riga di comando o tramite l'interfaccia grafica. Opteremo per il metodo della riga di comando.

Entra nella directory Nextcloud.

$ cd /var/www/html/nextcloud

Esegui il comando seguente per installare 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"

Questo comando viene eseguito come nginx utente perché ha i permessi di scrittura nella cartella Nextcloud.

Successivamente, dobbiamo aggiungere il nostro dominio all'elenco dei domini attendibili. Apri il /var/www/html/nextcloud/config/config.php file.

$ sudo nano config/config.php

Modifica il valore di trusted_domains variabile aggiungendo il tuo indirizzo IP del server e il tuo dominio Nextcloud nextcloud.example.com ad esso in modo da poter accedere alla tua installazione dal tuo dominio.

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

Premi Ctrl + X per chiudere l'editor e premere Y quando viene richiesto di salvare il file.

Avvia la tua installazione di Nextcloud aprendo https://nextcloud.example.com nel tuo browser e vedrai la seguente schermata.

Inserisci i dettagli di accesso dell'amministrazione. Scorri i banner introduttivi di Nextcloud, imposta la posizione e lo stato meteo e scegli uno sfondo e una volta terminato dovresti essere accolto con una schermata simile.

Conclusione

Questo conclude il nostro tutorial sull'installazione di Nextcloud sul server Fedora 32. Se hai domande, pubblicale nei commenti qui sotto.


Fedora
  1. Come installare Phorum con Nginx su Fedora 30

  2. Come installare e configurare Redis 6 su Fedora 34

  3. Come installare e configurare Ansible su Fedora 35

  4. Come installare e configurare Mariadb in Fedora 35

  5. Come installare PHP 8 su Fedora 35

Come installare Nginx con PHP e MariaDB (LEMP Stack) su Fedora 31

Come installare e configurare Caddy Web Server con PHP su Fedora 34 / CentOS 8

Come installare e configurare Drupal su Fedora 35/34

Come installare e configurare Git su Fedora 35

Come installare e utilizzare Telnet su Fedora 35

Come installare Redis e configurare su Fedora 35