Come installare e configurare Nextcloud su Fedora 32
Su questa pagina
- Prerequisiti
- Configura firewall
- Installa PHP
- Configura PHP
- Installa Nginx
- Installa MariaDB
- Configura MariaDB
- Scarica Nextcloud
- Installa SSL
- Configura SELinux/Autorizzazioni
- Configura Nginx per Nextcloud
- Installa Nextcloud
- 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.