Bonjour à tous,

Aujourd’hui, on va voir comment installer Nextcloud 12 sur Debian 9 avec NGINX, PHP 7 et MariaDB. On va évidemment passer un coup de Let’s Encrypt sur la chose.

 

C’est quoi Nextcloud ?

Nextcloud est une alternative à Dropbox, Google Drive, Onedrive, Owncloud, etc … que vous hébergez vous-même dans vos locaux ou chez un provider.

C’est une des plateformes les plus complètes du marché en termes de fonctionnalités, de sécurité et de compatibilité au niveau des clients pour les différents OS.

Pour la liste des fonctionnalités : https://nextcloud.com/compare/

 

Enfin, un support entreprise est disponible moyennant finance.

 

Prérequis :

 

 

Préparation de l’installation :

Créez d’abord un utilisateur Linux pour l’application et ajoutez-le dans le groupe www-data :

useradd nextcloud
usermod -a -G www-data nextcloud

 

Maintenant, créez le dossier qui accueillera l’application :

mkdir -p /var/www/nextcloud

 

Téléchargez l’installateur depuis le site de Nextcloud et appliquez les droits nécessaires :

cd /var/www/nextcloud
wget https://download.nextcloud.com/server/installer/setup-nextcloud.php
mv setup-nextcloud.php index.php
chown nextcloud:www-data -R /var/www/nextcloud

 

Maintenant, ajoutez la configuration Opcache dans PHP7.0-FPM :

echo "opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1" >> /etc/php/7.0/fpm/php.ini

 

Créez un nouveau pool fpm :

nano /etc/php/7.0/fpm/pool.d/nextcloud.conf

 

Et remplissez avec les informations suivantes :

[nextcloud]

listen = /var/lib/php7.0-fpm/nextcloud.sock
listen.owner = nextcloud
listen.group = www-data
listen.mode = 0660

user = nextcloud
group = www-data

pm = dynamic
pm.max_children = 32
pm.start_servers = 8
pm.min_spare_servers = 4
pm.max_spare_servers = 16
pm.max_requests = 40000

chdir = /

pm.status_path = /status

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

Et redémarrez le service pour appliquer les modifications :

service php7.0-fpm restart

 

Maintenant, on va créer un vhost de base :

nano /etc/nginx/sites-enabled/nextcloud.vhost

 

Ajoutez la configuration suivante :

upstream php-handler {
        server unix:/var/lib/php7.0-fpm/nextcloud.sock;
}

server {
        listen 62.210.106.114:80;
        listen [2001:bc8:3d8b:100::100]:80;

        server_name cloud.yaute.ninja;

        root /var/www/nextcloud/;

		
        location ~ ^/.well-known/acme-challenge/* {
                allow all;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location / {
                rewrite ^ /index.php$uri;
        }

}

 

Maintenant, redémarrez NGINX :

service nginx restart

 

Créez le répertoire pour les certificats Let’s Encrypt :

mkdir -p /etc/letsencrypt/live-ecdsa/cloud.yaute.ninja
cd /etc/letsencrypt/live-ecdsa/cloud.yaute.ninja
mkdir letmp

 

Maintenant, créez la clé privée pour votre certificat en indiquant la courbe que vous souhaitez utiliser :

openssl ecparam -genkey -name secp384r1 > privkey-p384.pem

 

Maintenant, créez un CSR, indiquez votre domaine correctement :

openssl req -new -sha256 -key privkey-p384.pem -subj "/CN=cloud.yaute.ninja" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:cloud.yaute.ninja")) -outform der -out csr-p384.der

 

Rendez-vous dans le dossier temporaire « letmp » et créez votre certificat avec Let’s Encrypt (ça serra aussi les commandes pour renouveller le certificat) :

cd letmp
/etc/letsencrypt/letsencrypt-auto certonly -a webroot --email yolo@caramail.zbeul --webroot-path /var/www/nextcloud/ --csr /etc/letsencrypt/live-ecdsa/cloud.yaute.ninja/csr-p384.der --renew-by-default --agree-tos
cat 0001* > /etc/letsencrypt/live-ecdsa/cloud.yaute.ninja/chain.pem

 

Maintenant, modifiez le vhost :

cd /tmp 
wget https://raw.githubusercontent.com/stylersnico/my-webserver/master/etc/nginx/sites-enabled/nextcloud.vhost
echo nextcloud.vhost > /etc/nginx/sites-enabled/nextcloud.vhost

 

Modifiez le server_name et supprimez la ligne suivante :

more_set_headers 'Public-Key-Pins pin-sha256="gIsBx1PSnbUuCsBhf+a/v3O85Yl0lRDfdKrSYqT2k8o="; pin-sha256="gafXTxG2GETsC0h9EJxIijiD+4btWJVA0viEU57ofvY="; pin-sha256="s+rGULHGe6BS8PNbK3ftd336qy+m3hud63WJN4F/yI4="; max-age=5184000';

 

Maintenant, redémarrez nginx :

service nginx restart

 

Connectez-vous en root sur MariaDB :

mysql -uroot -p

 

Et créez la base de données (modifiez le mot de passe):

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
exit

 

Et mettez en place le (futur) cron :

crontab -u nextcloud -e

 

et ajoutez ceci à la fin du fichier :

*/15 * * * * php -f /var/www/nextcloud/cron.php

 

 

Installation de Nextcloud 12 :

Rendez-vous maintenant sur l’URL d’installation :

https://cloud.yaute.ninja/

 

Cliquez sur Next :

 

Maintenant, rentrez un . dans la barre de texte, nous n’installerons pas Nextcloud dans un sous-dossier :

 

Créez le compte d’administration et remplissez les informations pour la base de données :

 

Si tout se passe bien, vous aurez cette vue et pourrez utiliser Nextcloud :

 

Configuration de Nextcloud 12 :

Dans un premier temps, on va ajouter le chiffrement de tous les fichiers envoyés par les utilisateurs.

Il ne faudra pas qu’ils oublient leurs mots de passe 🙂

 

Allez dans Apps et activez le Default Encryption Module :

 

Ensuite, allez dans Admin -> Encryption et activez le server-side encryption :

 

Comme ça, l’administrateur du serveur ne pourra pas consulter le contenu des fichiers stockés sans le mot de passe de l’utilisateur :

 

 

Maintenant, allez dans Apps -> Authentification and authorization et activez les deux applications suivantes : Two Factor TOTP Provider et Two Factor U2F

 

Allez ensuite dans Personal et suivez le guide :

 

Créez les codes de sauvegarde et configurez la double authentification :

Maintenant, profitez de votre application 🙂

 

En bonus, vous pouvez :