====== Debian - Installation de Nextcloud ======
====== Prérequis ======
* Une machine virtuelle sous Debian
* Une entrée DNS valide. (Par default, Nextcloud ne répond qu'a son nom)
* Les ports 80 et 443 redirigés vers Nextcloud (80 pour Let's Encrypt)
* curl (apt install curl)
* unzip (apt install unzip)
====== Procédure d'Installation ======
===== Installation d'apache =====
Si Apache a été installé via l'installeur de Debian, passer directement à l'installation des modules supplémentaires.
* Mise à jour des repository Debian
apt update
* Installation d'apache
apt install apache2
Après l'installation, on vérifie qu'apache est activé au démarre et lancé
systemctl is-enabled apache2
systemctl status apache2
==== Installation des modules ====
* On active les modules nécessaire à l'utilisation de nextcloud (ssl, rewrite et headers)
a2enmod ssl rewrite headers
* On redémarre apache
systemctl restart apache2
* On vérifie que ces modules soient bien chargés.
apachectl -M | egrep "ssl|rewrite|headers"
* On devrait voir des lignes similaires à celles ci dans la sortie
headers_module (shared)
rewrite_module (shared)
ssl_module (shared)
===== Installation de PHP ====
* Installation des paquets de base + les paquets nécessaires à Nextcloud
apt install -y php php-curl php-cli php-mysql php-gd php-common php-xml php-json php-intl php-pear php-imagick php-dev php-common php-mbstring php-zip php-soap php-bz2 php-ldap php-bcmath php-gmp php-apcu libmagickcore-dev
===== Installation de MariaDB =====
* Installation du client et du serveur
apt install mariadb-server mariadb-client
* Vérifier que MariaDB est activé au démarrage et lancé
systemctl is-enabled mariadb
systemctl status mariadb
* Une fois installé, on exécute l'assistant de sécurisation de MariaDB
mysql_secure_installation
* On valide simplement vu qu'il n'y a pas de mot de passe root pour le moment
Enter current password for root (enter for none):
OK, successfully used password, moving on...
* On répond oui à la connexion via socket
witch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
... Success!
* On choisi un mot de passe pour l'utilisateur root
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
* On interdit les connexions anonymes.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
* On interdit à l'utilisateur root de se connecter à distance. (cela ne devrait jamais être nécessaire)
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
* On supprime la base de test qui ne sert a rien
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
* On accepte de recharger les privilèges pour que les modifications prennent effet immédiatement.
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
===== Création de la base de données pour Nextcloud =====
* On se connecte à MariaDB
mysql -u root -p
Dans certain cas, le paramètre -p doit être omis car l'utilisateur root du système peut se connecter en tant que root de MariaDB sans avoir a entrer le mot de passe.
* On crée la base de données pour Nextcloud.
CREATE DATABASE nextcloud_db;
* On crée l'utilisateur de service pour l'accès à la base nouvellement créée. (Remplacer UTILISATEURNEXCLOUD et PASSWORD)
CREATE USER UTILISATEURNEXCLOUD@localhost IDENTIFIED BY 'PASSWORD';
* On donne les droits au nouvel utilisateur sur la nouvelle base de données. (Remplacer UTILISATEURNEXTCLOUD par celui choisi précédement)
GRANT ALL PRIVILEGES ON nextcloud_db.* TO UTILISATEURNEXTCLOUD@localhost;
* On applique les nouveau privilèges.
FLUSH PRIVILEGES;
* On se déconnecte de MariaDB avec la commande "quit"
====== Installation de Nextcloud ======
On se place dans /var/www
cd /var/www
On télécharge la dernière version de Nextcloud (Adapter le lien en fonction de la dernière version)
curl -o nextcloud.zip https://download.nextcloud.com/server/releases/latest-25.zip
On extrait le fichier zip
unzip nextcloud.zip
On donne les droits d'accès aux fichiers à apache
chown -R www-data:www-data nextcloud
====== Installation d'un certificat Let's Encrypt ======
Cela permet de tester son installation via SSL même si la solution Let's Encrypt n'est pas définitive.
On installe Certbot
apt install certbot
Une fois installé, on crée les répertoires nécessaire et on ajuste les droits
mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt
On crée un Vhost pour Let's Encrypt avec son editeur préféré. (Exécuter l'éditeur en indiquant un fichier qui n'existe pas le crée automatiquement)
vi /etc/apache2/conf-available/well-known.conf
ou
nano /etc/apache2/conf-available/well-known.conf
Copier/coller le contenu suivant
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/"
AllowOverride None
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
Activer le nouveau Vhost en créant un lien symbolique dans le dossier "conf_enable" (c'est une convention d'Apache)
a2ensite well-known.conf
ou
ln -s /etc/apache2/conf-available/well-known.conf /etc/apache2/conf-enabled/
On redémarre apache
systemctl restart apache2
On génère un certificat (Remplacer UTILISATEUR@DOMAINE.COM et DOMAINE.COM)
certbot certonly --agree-tos --email UTILISATEUR@DOMAINE.COM --webroot -w /var/lib/letsencrypt/ -d DOMAINE.COM
====== Création des Virtual Hosts Apache ======
Pour simplifier la configuration, les Vhosts pour les ports 80 et 443 sont configurés dans le même fichiers.
les connexions sur le ports 80 sont automatiquement redirigés vers la connexion 443.
Créer le fichier de configuration des Vhosts avec votre éditeur préféré. (Exécuter l'éditeur en indiquant un fichier qui n'existe pas le crée automatiquement)
vi /etc/apache2/sites-available/nextcloud.conf
ou
nano /etc/apache2/sites-available/nextcloud.conf
Coller le contenu suivant en remplaçant "DOMAINE.COM" par le nom de domaine utilisé.
ServerName DOMAINE.COM
ServerAlias www.DOMAINE.COM
# auto redirect HTTP to HTTPS
Redirect permanent / https://DOMAINE.COM/
ServerName DOMAINE.COM
ServerAlias www.DOMAINE.COM
DocumentRoot /var/www/nextcloud/
Protocols h2 http/1.1
# log files
ErrorLog /var/log/apache2/DOMAINE.COM-error.log
CustomLog /var/log/apache2/DOMAINE.COM-access.log combined
SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/DOMAINE.COM/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/DOMAINE.COM/privkey.pem
# HSTS
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Options +FollowSymlinks
AllowOverride All
Dav off
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
On active les Vhosts
a2ensite nextcloud.conf
ou
ln -s /etc/apache2/conf-available/nextcloud.conf /etc/apache2/conf-enabled/
Il est possible de tester toute la configuration d'Apache avec cette commande
apachectl configtest
Redémarrer Apache
systemctl restart apache2
====== Configuration de Nextcloud ======
Si la procédure d'Installation standardisé de Debian a été suivi, c'est le répertoire /DATA qui sera utilisé stocker les données de Nextcloud.
Il est donc nécessaire de donner les droits d'accès a Apache pour ce répertoire.
Donner les droits à Apache sur le répertoire /DATA (Si il n'est pas dans le répertoire de Nextcloud)
chown -R www-data:www-data /DATA
A ce stade l'instance Nextcloud devrait être accessible via son URL
* Ouvrer un navigateur est entrer l'URL définitive.
* L'assistant de configuration de Nextcloud s'ouvre.
* **Créer un compte adminstrateur.**
* Indiquer** /DATA** en tant que **répertoire de données.**
* Indiquer le nom de la base de données crée précédement
* Indiquer l'utilisateur de la base de données créé précédement.
* Indiquer le mot de passe défini précédement pour l'utilisateur de la base de données.
* l'adresse de la base de données peut rester sur "localhost"
===== Configuration des tâches planifiées =====
* Rendez-vous dans l'interface web de Nextcloud
* Cliquer sur le logo de profil (en haut à droite)
* Cliquer sur **Administration Settings** puis **Paramêtres de base**
* Sélectionner **Cron (Recommandé)**
* Se connecter en SSH au serveur
* Créer la tâche planifiée
crontab -u www-data -e
Ajouter la ligne suivante à la fin du fichier et quitter **(Remplacer par le chemin vers le fichier cron.php)**
*/5 * * * * php -f /var/www/NEXTCLOUDFOLDER/cron.php
Il est possible de vérifier que la modification est bien enregistrée avec la commande suivante
crontab -u www-data -l
Il est possible de vérifié que la tâche s'exécute en se rendant de nouveau sur la page **Paramètres de base** de la **page d'administration**
====== Configuration du cache (Optionnel) ======
La méthode la plus courant et la plus simple est d'utiliser Redis Server
Installer Redis Server et php-redis
apt install redis-server php-redis
Éditer le fichier de configuration de redis-server
vi /etc/redis/redis.conf
Dé-commenter et modifier les lignes suivantes
On enlève "/var" de la première ligne
On remplace 700 par 770 sur la seconde
unixsocket /run/redis/redis-server.sock
unixsocketperm 770
Dé-commenter et modifier également
On remplace 6379 par 0
port 0
Ajouter l’utilisateur www-data (Utiliser par Nextcloud au groupe Redis)
usermod -a -G redis www-data
Éditer le fichier de configuration de nextcloud pour y ajouter l'utilisation de Redis server comme cache
vi /var/www/NEXTCLOUDFOLDER/config/config.php
Ajouter les lignes suivante en fin de fichier mais avant le dernier **");**"
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => '/run/redis/redis-server.sock',
'port' => 0,
'dbindex' => 0,
'timeout' => 1.5,
),
Démarrer redis-server
service redis-server start
Redémarrer le serveur web Apache
service apache2 restart
====== Notes ======
Emplacement des fichiers
/etc/apache2/sites-available/ <- Fichiers de configuration Vhosts
/etc/apache2/sites-enabled/ <- Fichiers de configuration Vhosts actifs
====== Commandes utiles ======
Statut Apache
systemctl status apache2
Statut Let's Encrypt
systemctl status certbot.timer
Test de renouvellement du certificat
certbot renew --dry-run
Activer un site Apache
a2ensite nomduvhost.conf
ou
ln -s /etc/apache2/conf-available/nomduvhost.conf /etc/apache2/conf-enabled/