====== 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/