Attention, cet article a plus d'une année d'ancienneté. Il est possible que les informations présentées ne soient plus à jour, spécialement dans le cadre d'un article technique.
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 :
- Avoir suivi l’article pour monter son serveur Web avec Debian 9
- Remplacer cloud.yaute.ninja par votre nom de domaine dans toute la procédure (oui c’est un vrai domaine)
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 :
- Déployer TLSA
- Déployer HPKP
- Faire des sauvegardes (sauf que ça c’est pas du bonus)
Merci pour cet article ! Il m’a permit de peaufiner certaines chose sur mon Nextcloud.
Cependant, est-ce que tu rencontres une erreur quand tu veux télécharger un fichier de ton cloud ? Moi il me sors ça : « Fichier non trouvé. Impossible de trouver le document spécifié sur le serveur. » et ce pour n’importe quel fichier. Pourtant via l’application bureau la synchronisation fonctionne parfaitement et j’ai bien mes fichiers…
ça me dit un truc, il me semble avoir eu ça au début. Nginx est compilé avec le module webdav ?
En faisant nginx -V je ne vois nul part « webdav » donc je pense que non. Après le téléchargement fonctionne si je clique directement sur le fichier donc en soit ce n’est pas si grave.
Par contre tu n’as pas de problème de renouvellement du certificat Let’s Encrypt ? Car j’ai repris ton fichier de configuration et mon cloud est le seul site pour lequel le renouvellement ne fonctionne pas… « Failed authorization procedure. »
Voici les lignes que j’ai dû commenter pour que le renouvellement fonctionne :
location / {
rewrite ^ /index.php$uri;
}
# Accès refusé à tous
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
# Accès refusé à tous
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
Hello, tu n’a pas besoin de commenter ces lignes normalement, j’utilise la configuration suivante et je n’ai aucun soucis : https://github.com/stylersnico/my-webserver/blob/master/etc/nginx/sites-enabled/nextcloud.vhost
Hej Thank you for your great tut after install nextcloud i get this two error: php does not seem to be setup properly to query system environment variables. The test with getenv(« PATH ») only returns an empty response. Please check the installation documentation ↗ for php configuration notes and the php configuration of your server, especially when using php-fpm. No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our documentation. Please double check the installation guides ↗, and check for any errors or warnings in the log. any… Voir plus »
Hi,
What if you try to add this to the FPM pool configuration file?
Thank you for replay i add this and the php error its fixed 🙂 i still get only about the memcache, what you think we use redis server for cache?
If you’re the only one on the server, you don’t have to use a cache. PHP7.0 and NGINX are fast enough to use Nextcloud without caring about a cache system for me.
Cache system really improve performance even if you are alone to use nextcloud. Especially when you have thousands of files ^^
Salut,
Il faut aussi savoir que cette doc a été écrite pour Apache et pour du PHP single thread 🙂
Ici on utilise Nginx et PHP-FPM qui sont quand même vachement plus rapides que les loustiques cités précédemment et pour l’instant je n’ai aucun souci en ayant 4961 fichiers, je verrais donc par la suite si un système de cache est nécessaire ou non si je vois des ralentissements sur mon instance 🙂