Ricerca nel sito web

Come installare e configurare Nextcloud su Fedora 32


Su questa pagina

  1. Prerequisiti
  2. Configura firewall
  3. Installa PHP
  4. Configura PHP
  5. Installa Nginx
  6. Installa MariaDB
  7. Configura MariaDB
  8. Scarica Nextcloud
  9. Installa SSL
  10. Configura SELinux/Autorizzazioni
  11. Configura Nginx per Nextcloud
  12. Installa Nextcloud
  13. Conclusione

Nextcloud è un software opensource per l'archiviazione e la sincronizzazione dei dati su più dispositivi. Puoi considerarlo come il tuo clone di 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

  • A server running Fedora 32.

  • A non-root sudo user.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Essential packages.

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

    Some of these packages may already be on your system.

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 gli attuali servizi/porte 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

Controlla di nuovo 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 repository remi e disabilita il repository remi-modular. Ciò abilita il repository necessario 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 Unix di processi PHP su nginx. Trova le righe user=apache e group=apache nel file e modificale 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
...

Rimuovere il commento dalle 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

Rimuovere il commento dalla configurazione di opcache nell'ultima riga.

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

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

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

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

Modificare 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 immettendo Y quando richiesto.

Esegui i seguenti comandi per aumentare i limiti di caricamento file e 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 nella directory /var/lib/php/ il cui proprietario del gruppo è impostato su apache, ma stiamo usando Nginx. Quindi dobbiamo dare all'utente nginx le autorizzazioni 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 stabile 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 immediato di MySQL, il che significa che i comandi per eseguire e far funzionare MariaDB sono gli stessi di MySQL.

Fedora 32 di default viene fornito con MariaDB 10.4 che è quello che useremo.

Installa il server MariaDB.

$ sudo dnf install mariadb-server

Controlla se MariaDB è installato 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

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

$ sudo mysql_secure_installation

Premendo Invio si sceglie l'opzione predefinita (quella in maiuscolo, Y in questo 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]

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 seguente comando 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 dalla shell MySQL.

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

Arresta Nginx perché interferirà con il processo Certbot.

$ sudo systemctl stop nginx

Genera il certificato. Creiamo anche un certificato DHParams.

$ export LDOMAIN="nextcloud.example.com"
$ export LEMAIL=""
$ 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

Dobbiamo anche impostare un cron job per il rinnovo automatico di SSL. Per aprire l'editor crontab, eseguire il seguente comando

$ sudo EDITOR=nano crontab -e

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

Incolla la seguente riga in basso.

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

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

Salva il file premendo Ctrl + X e immettendo 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 seguente comando.

$ 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 risiederanno i blocchi del server.

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

Apri il file /etc/nginx/nginx.conf 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 premi Y quando ti viene chiesto 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 seguente codice nell'editor. Assicurati di sostituire il dominio di esempio con il tuo dominio reale prima di incollare.

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 premi Y quando ti viene chiesto di salvare il file.

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

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

Testare la configurazione di Nginx.

$ sudo nginx -t

Ricarica il servizio Nginx se tutto va bene.

$ sudo systemctl reload nginx

Installa Nextcloud

Esistono due modi per configurare Nextcloud: tramite la 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 seguente comando 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 utente nginx perché ha i permessi di scrittura sulla cartella Nextcloud.

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

$ sudo nano config/config.php

Modifica il valore della variabile trusted_domains aggiungendo il tuo indirizzo IP del server e il tuo dominio Nextcloud nextcloud.example.com 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 premi Y quando ti viene chiesto di salvare il file.

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

Inserisci i tuoi dati di accesso all'amministrazione. Scorri i banner introduttivi di Nextcloud, imposta la posizione e lo stato del 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.