Avec un seul script, vous pouvez installer votre propre Nextcloud comme un pro!


Les exigences  pour ces scripts sont minimales :
- Debian 10.x, Ubuntu 18.04.x ​​(AMD64 / ARM64 (test à venir sur Rpi4)).
- Un utilisateur avec des autorisations sudo.

Le script contient Nginx, MariaDB, Redis, Fail2ban, UFW.

Comment faire ?

Passez à votre utilisateur privilégié à l'aide de sudo :

Ubuntu : sudo -s
Debian : su -

Téléchargez le script d'installation dans /usr/local/src :

cd /usr/local/src && apt install wget -y

Debian:
wget https://it-services.c-rieger.de/s/QCzDbdip4qM388P/download -O install.zip
Ubuntu:
wget https://it-services.c-rieger.de/s/kX56nntHoWWoPps/download -O install.zip

Ensuite, décompressez le script :

apt install unzip -y && unzip install.zip

Marquer le script comme "exécutable" :

chmod +x install.sh

Exécutez-le pour l'installation :

./install.sh

L'installation va plutôt vite, selon la configuration du serveur.

Il vous sera demandé :

  • un nom d'administrateur Nextcloud (votre administrateur Nextcloud),
  • le mot de passe associé (votre mot de passe administrateur Nextcloud),
  • le chemin de données (votre chemin d’accès Nextcloud).

Un résumé d'installation s'affiche alors :

Afin de renforcer le futur certificat SSL, lancez la commande suivante :

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Cela peut prendre quelques minutes le temps de générer la clé.

Configuration de SSL via Let's Encrypt

Veuillez vous assurer que votre serveur est accessible de l'extérieur via le port 80 / TCP ainsi que via le port 443 / TCP.

Vous pouvez vérifier ça avec la commande suivante depuis un poste externe :

nmap IP -Pn

Il faut ensuite créer un utilisateur dédié pour la gestion des certificats et l'ajouter au groupe www-data:

adduser acmeuser
usermod -a -G www-data acmeuser

Basculer vers le shell du nouvel utilisateur pour installer le logiciel qui génère le certificat, puis quitter à nouveau ce shell:

su - acmeuser
curl https://get.acme.sh | sh
exit

Créer ensuite trois répertoires avec les autorisations appropriées pour pouvoir y enregistrer les nouveaux certificats :

mkdir -p /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs
chmod -R 775 /var/www/letsencrypt /etc/letsencrypt && chown -R www-data:www-data /var/www/ /etc/letsencrypt

Basculer à nouveau vers le shell du nouvel utilisateur :

su - acmeuser

Demander les certificats SSL.

Il faut remplacer your.dedyn.io par votre domaine:

acme.sh --issue -d your.dedyn.io --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/rsa-certs/privkey.pem --ca-file /etc/letsencrypt/rsa-certs/chain.pem --cert-file /etc/letsencrypt/rsa-certs/cert.pem --fullchain-file /etc/letsencrypt/rsa-certs/fullchain.pem

acme.sh --issue -d your.dedyn.io --keylength ec-384 -w /var/www/letsencrypt --key-file /etc/letsencrypt/ecc-certs/privkey.pem --ca-file /etc/letsencrypt/ecc-certs/chain.pem --cert-file /etc/letsencrypt/ecc-certs/cert.pem --fullchain-file /etc/letsencrypt/ecc-certs/fullchain.pem

Quitter le shell du nouvel utilisateur :

exit

Il faut ensuite créer un script qui vérifie les autorisations à l' avenir :

nano /root/permissions.sh

Copier toutes les lignes dans le fichier :

#!/bin/bash
find /var/www/ -type f -print0 | xargs -0 chmod 0640
find /var/www/ -type d -print0 | xargs -0 chmod 0750
chmod -R 775 /var/www/letsencrypt 
chmod -R 755 /etc/letsencrypt 
chown -R www-data:www-data /var/www/
chown -R www-data:www-data /var/nc_data/
chmod 0644 /var/www/nextcloud/.htaccess
chmod 0644 /var/www/nextcloud/.user.ini
chmod 600 /etc/letsencrypt/rsa-certs/fullchain.pem
chmod 600 /etc/letsencrypt/rsa-certs/privkey.pem
chmod 600 /etc/letsencrypt/rsa-certs/chain.pem
chmod 600 /etc/letsencrypt/rsa-certs/cert.pem
chmod 600 /etc/letsencrypt/ecc-certs/fullchain.pem
chmod 600 /etc/letsencrypt/ecc-certs/privkey.pem
chmod 600 /etc/letsencrypt/ecc-certs/chain.pem
chmod 600 /etc/letsencrypt/ecc-certs/cert.pem
chmod 600 /etc/ssl/certs/dhparam.pem
exit 0
Remarque: Ajuster le répertoire de données dans le script si nécessaire /var/nc_data par le chemin d'accès paramétré plus tôt.

Marquer le script comme exécutable et lancer-le :

chmod +x /root/permissions.sh
/root/permissions.sh

Il faut après supprimer les certificats auto-signés précédemment utilisés de nginx et activer les nouveaux certificats SSL complets et déjà valides de Let's Encrypt :

sed -i '/ssl-cert-snakeoil/d' /etc/nginx/ssl.conf
sed -i s/\#\ssl/\ssl/g /etc/nginx/ssl.conf
service nginx restart
Félicitations, c'est tout !

Un grand merci à Carsten Rieger qui m'a autorisé à rédiger cet article !

NB : si l’erreur (cURL error 28: Operation timed out after 30000 milliseconds with 73837972 out of 305964280 bytes received (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)) apparaît lors du téléchargement d'applications lourdes, comme Community Document Server, il faut procéder comme de la façon suivante :

sudo -u www-data nano /var/www/nextcloud/lib/private/Http/Client/Client.php

Remplacer :

RequestOptions::TIMEOUT => 30,

par :

RequestOptions::TIMEOUT => 600,