Amo avere il controllo dei miei strumenti e anche il mio cloud non fa eccezione. Il plugin fornito da FreeNAS (provatelo, non tornerete mai più indietro) era perfetto ma limitante.
Ecco dunque come installare manualmente Nextcloud su PHP7.4 e MySQL8.
1. Su FreeNAS creiamo una jail con iocage e una volta entrati aggiorniamo i suoi repository
pkg update && pkg upgrade
Installiamo i pacchetti necessari al funzionamento di nextcloud
pkg install php74-mysqli-7.4.0 php74-ctype-7.4.0 php74-curl-7.4.0 php74-dom-7.4.0 php74-gd-7.4.0 php74-iconv-7.4.0 php74-json-7.4.0 php74-iconv-7.4.0 php74-mbstring-7.4.0 php74-openssl-7.4.0 php74-posix-7.4.0 php74-session-7.4.0 php74-simplexml-7.4.0 php74-xmlreader-7.4.0 php74-xmlwriter-7.4.0 php74-zip-7.4.0 php74-zlib-7.4.0 php74-pdo_mysql-7.4.0 php74-fileinfo-7.4.0 php74-bz2-7.4.0 php74-intl-7.4.0 php74-imap-7.4.0 php74-pecl-imagick-im7-3.4.4 php74-xml-7.4.0 php74-filter-7.4.0 php74-readline-7.4.0 php74-pdo-7.4.0 php74-pecl-APCu
Installiamo MySQL8
pkg install mysql80-server-8.0.17
Installiamo il webserver (e qualche utility)
pkg install nginx nano sudo
Mettiamo tutto in auto-start nella jail
sysrc -f /etc/rc.conf nginx_enable="YES" sysrc -f /etc/rc.conf mysql_enable="YES" sysrc -f /etc/rc.conf php_fpm_enable="YES"
2. Configuriamo i local PATH per PHP modificando il file www.conf
nano /usr/local/etc/php-fpm.d/www.conf
Rimuoviamo il commento a
env[PATH] = /usr/local/bin:/usr/bin:/bin
3. Avviamo il server SQL e avviamo la procedura di messa in sicurezza di base
service mysql-server start mysql_secure_installation
Qui verrà richiesto il livello di sicurezza e la password per l’utente root e una serie di domande alle quali potrete rispondere sempre YES 😉
Creiamo un utente nel db di nextcloud modificando prima la modalità di autenticazione (MySQL8 introduce una nuova modalità non ancora supportata da nextcloud)
nano /usr/local/etc/mysql/my.cnf default_authentication_plugin=mysql_native_password (da inserire dentro sezione mysqld)
Effettuiamo il login sul server MySQL con l’utente di root creato al punto 7
mysql -u root -p Password: create database nextcloud; create user 'dbadmin'@'localhost' identified by '<password-per-utente-dbadmin>'; grant all privileges on nextcloud.* to 'dbadmin'@'localhost'; flush privileges; quit;
4. Richiediamo un nuovo certificato per far girare il web server su HTTPS:
mkdir /usr/local/etc/ssl/openssl cd /usr/local/etc/ssl/openssl openssl req -new > cert.csr
Completata la procedura effettuiamo qualche rename
openssl rsa -in privkey.pem -out key.pem openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 1825 cat key.pem>>cert.pem openssl dhparam 2048 -out dhparam.pem
Modifichiamo nginx.conf in modo da utilizzare https
touch /usr/local/etc/nextcloud_ssl.conf nano /usr/local/etc/nginx/nextcloud_ssl.conf
E inseriamo la configurazione del server in SSL:
server {
listen 443 ssl http2;
server_name nextcloud.local;
ssl_certificate /usr/local/etc/ssl/openssl/cert.pem;
ssl_certificate_key /usr/local/etc/ssl/openssl/key.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
ssl_dhparam /usr/local/etc/ssl/openssl/dhparam.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
#ssl_ciphers HIGH:!aNULL:!MD5;
# Path to the root of your installation
root /usr/local/www/nextcloud/;
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
rewrite ^/caldav(.)$ /remote.php/caldav$1 redirect; rewrite ^/carddav(.)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:.htaccess|data|config|db_structure.xml|README){
deny all;
}
location / {
The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ =404;
}
location ~ .php(?:$|/) {
fastcgi_split_path_info ^(.+.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/var/run/nextcloud-php-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_intercept_errors on;
}
Adding the cache control header for js and css files
Make sure it is BELOW the location ~ .php(?:$|/) { block
location ~* .(?:css|js)$ {
add_header Cache-Control "public, max-age=7200";
Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
Optional: Don't log access to assets
access_log off;
}
Optional: Don't log access to other assets
location ~* .(?:jpg|jpeg|gif|bmp|ico|png|swf)$ {
access_log off;
}
}
Ricordiamoci di fare un include di nextcloud_ssl.conf dentro nginx.conf
nano /usr/local/etc/nginx/nginx.conf include /usr/local/etc/nginx/nextcloud_ssl.conf; (da scrivere in fondo dentro al file)
5. Configuriamo la cache PHP
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini # Modify opcache settings in php.ini according to Nextcloud documentation (remove comment and set recommended value) # https://docs.nextcloud.com/server/15/admin_manual/configuration_server/server_tuning.html#enable-php-opcache sed -i '' 's/.opcache.enable_cli=./opcache.enable_cli=1/' /usr/local/etc/php.ini sed -i '' 's/.opcache.opcache.file_cache=./opcache.opcache.file_cache=\/tmp\/.opcache\//' /usr/local/etc/php.ini sed -i '' 's/.opcache.interned_strings_buffer=./opcache.interned_strings_buffer=8/' /usr/local/etc/php.ini sed -i '' 's/.opcache.max_accelerated_files=./opcache.max_accelerated_files=10000/' /usr/local/etc/php.ini sed -i '' 's/.opcache.memory_consumption=./opcache.memory_consumption=128/' /usr/local/etc/php.ini sed -i '' 's/.opcache.save_comments=./opcache.save_comments=1/' /usr/local/etc/php.ini sed -i '' 's/.opcache.revalidate_freq=./opcache.revalidate_freq=1/' /usr/local/etc/php.ini # recommended value of 512MB for php memory limit (avoid warning when running occ) sed -i '' 's/.memory_limit./memory_limit=512M/' /usr/local/etc/php.ini
6. Scarichiamo, estraiamo e modifichiamo i permessi per nextcloud
cd fetch nextcloud-17.0.2.tar.bz2 https://download.nextcloud.com/server/releases/nextcloud-17.0.1.tar.bz2 tar -jxf nextcloud-17.0.2.tar.bz2 cp -rf nextcloud /usr/local/www/nextcloud chown -R www:www /usr/local/www/nextcloud/
7. Installiamo nextcloud specificando il dataset nel quale registrare i dati del software e la cartella di destinazione dei file degli utenti
sudo -u www php /usr/local/www/nextcloud/occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "dbadmin" --database-pass "<passsword-utente-dbadmin>" --admin-user "NextCloud_Admin" --admin-pass "<password-utente-NextCloud_Admin>" --data-dir "/mnt/nextcloud"
Nel mio caso, il dataset accessibile alla jail da FreeNAS è stato montato dentro /mnt/nextcloud.
8. Modifichiamo il file di configurazione di NextCloud esplicitando l’indirizzo e l’eventuale DNS al quale verrà contattato
nano /usr/local/www/nextcloud/config/config.php e modificare l'array in questo modo: array ( 0 => 'localhost', 1 => '192.168.0.100', 2 => 'nextcloud.local', ),
9. Diamo il via ai servizi e, tramite browser, godiamoci il nostro nuovo cloud pronto ad esser riempito.
service nginx start service php-fpm start
That’s all folks.
Emanuele





