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.