informatique:installation_et_securisation_d_un_serveur_nextcloud_et_nginx_sur_un_raspberrypi_2_et_disque_ssd
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
informatique:installation_et_securisation_d_un_serveur_nextcloud_et_nginx_sur_un_raspberrypi_2_et_disque_ssd [2021/03/28 18:19] – créée Pascal Delrot | informatique:installation_et_securisation_d_un_serveur_nextcloud_et_nginx_sur_un_raspberrypi_2_et_disque_ssd [2022/11/10 01:38] (Version actuelle) – Compléments sur les versions de Nextcloud Pascal Delrot | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
FIXME Cette page est en cours de rédaction ! | FIXME Cette page est en cours de rédaction ! | ||
+ | |||
===== Mes objectifs ===== | ===== Mes objectifs ===== | ||
- | La création de ce serveur répond à quelques objectifs personnels : | + | L' |
* serveur de sauvegarde de mes documents, séparé de ma machine principale (auparavant mon serveur Nextcloud de sauvegarde tournait sur ma tour, et servait à synchroniser ma tour et mon portable). En cas de défaillance de la tour, la plupart des données étaient perdues | * serveur de sauvegarde de mes documents, séparé de ma machine principale (auparavant mon serveur Nextcloud de sauvegarde tournait sur ma tour, et servait à synchroniser ma tour et mon portable). En cas de défaillance de la tour, la plupart des données étaient perdues | ||
- | * soulager mon nextcloud | + | * soulager mon Nextcloud |
+ | * dont l' | ||
+ | * nombreux messages d' | ||
+ | * absence d' | ||
* éventuellement remplacer mon Nextcloud chez Ouvaton | * éventuellement remplacer mon Nextcloud chez Ouvaton | ||
* apprendre ! | * apprendre ! | ||
+ | * utiliser la carte RaspberryPi 2 achetée il y a déjà 8 ans (2012) ! et du matériel d' | ||
Quelques difficultés ou apprentissages à faire : | Quelques difficultés ou apprentissages à faire : | ||
Ligne 16: | Ligne 21: | ||
* rediriger un sous-domaine vers ma box | * rediriger un sous-domaine vers ma box | ||
* en cas de défaillance du nouveau serveur, il n'y a toujours pas de sauvegarde prévue | * en cas de défaillance du nouveau serveur, il n'y a toujours pas de sauvegarde prévue | ||
+ | |||
+ | Il y a de nombreux blogs traitant du sujet. | ||
+ | La plupart sont orientés Nextcloud+Apache et promettent d' | ||
+ | Il est classique d' | ||
+ | C' | ||
+ | |||
+ | En ayant en tête que ma RPi2 n'est pas aussi puissante que les derniers modèles, j'ai choisi d' | ||
+ | |||
+ | *Avant de poursuivre :* La RPi2 fonctionne avec un OS 32 bits. A date de novembre 2022, l' | ||
+ | |||
+ | ===== Installations ===== | ||
+ | Construction du système : | ||
+ | |||
+ | * boot et système sur carte SD (ext4), | ||
+ | * données et base de données sur SSD (ext4 ou btrfs) | ||
+ | |||
+ | ==== Installation Raspbian OS ==== | ||
+ | Rien de particulier à signaler sur cette partie. | ||
+ | |||
+ | A date de rédation et réalisation (mars 2021) la version est Raspbian basée sur Debian buster. | ||
+ | |||
+ | Fichiers de configuration sur la clé au premier démarrage : | ||
+ | SSH, Wifi (FIXME liens vers sites tiers pour explications) | ||
+ | |||
+ | FIXME Réinstallation été 2022 | ||
+ | |||
+ | ==== Installation serveur nginx ==== | ||
+ | |||
+ | Sur la RaspberryPi, | ||
+ | |||
+ | FIXME décrire particularités RPi2, nginx | ||
+ | |||
+ | ==== Installation serveur Mysql/ | ||
+ | FIXME décrire particularités RPi2, nginx | ||
+ | |||
+ | [[https:// | ||
+ | |||
+ | |||
+ | Afin d' | ||
+ | |||
+ | Les étapes sont les suivantes : | ||
+ | |||
+ | - Si l' | ||
+ | - Arrêt sur serveur mysql `sudo systemctl stop mysql` | ||
+ | - Copie à l' | ||
+ | - Renommer le répertoire par défaut par sécurité | ||
+ | - Modification du fichier de configuration de MariaDB | ||
+ | - Redémarrage du serveur mysql `sudo systemctl start mysql` | ||
+ | - Vérification du fonctionnement | ||
+ | - Effacement de l' | ||
+ | |||
+ | Le fichier de configuration MariaDB contient alors une ligne similaire à ceci : | ||
+ | |||
+ | / | ||
+ | datadir = / | ||
+ | |||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | ==== Installation Nextcloud ==== | ||
+ | FIXME décrire particularités RPi2, nginx | ||
+ | |||
+ | A date : Nextcloud 21 | ||
+ | FIXME Réinstallation et migration Nextcloud 23 été 2022 | ||
+ | |||
+ | === Messages d' | ||
+ | |||
+ | La page de paramètres de Nextcloud affiche assez souvent au départ quelques alertes concernant les réglages. Rien de grave et tout a pu se régler en suivant la documentation. | ||
+ | |||
+ | > Vous accédez à votre instance via une connexion sécurisée, | ||
+ | Accès non sécurisé au site via HTTP. Il est fortement conseillé de configurer votre serveur pour exiger HTTPS à la place, comme décrit dans les conseils de sécurité. | ||
+ | |||
+ | Un fichier de configuration correct de nginx évite normalement ce type de messages (avec les certificats associés). | ||
+ | |||
+ | > Le module php-imagick n’a aucun support SVG dans cette instance. Pour une meilleure compatibilité, | ||
+ | |||
+ | sudo apt install php-imagick imagemagick | ||
+ | |||
+ | :-) | ||
+ | |||
+ | > Aucun cache mémoire n'est configuré. Si possible, configurez un " | ||
+ | |||
+ | Il a suffit de suivre la documentation qui se trouve plus bas. | ||
+ | J'ai choisi Redis pour le cache local et distribué, ainsi que pour le verrouillage des fichiers. | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | Le fichier de configuration `config.php` contient alors les lignes suivantes : | ||
+ | |||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ), | ||
+ | ' | ||
+ | ' | ||
+ | |||
+ | ou encore | ||
+ | | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ], | ||
+ | |||
+ | en prenant garde à bien configurer | ||
+ | / | ||
+ | | ||
+ | avec | ||
+ | unixsocket / | ||
+ | unixsocketperm 770 | ||
+ | |||
+ | et sudo usermod -a -G redis www-data | ||
+ | | ||
+ | Voici 2 autres tutoriels sur le sujet : | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | L' | ||
+ | |||
+ | La documentation PHP est utile à lire : https:// | ||
+ | |||
+ | Il a d' | ||
+ | |||
+ | utilisateur@hote: | ||
+ | Configuration File (php.ini) Path => / | ||
+ | Loaded Configuration File => / | ||
+ | |||
+ | L' | ||
+ | |||
+ | Par défaut l' | ||
+ | |||
+ | utilisateur@hote: | ||
+ | [opcache] | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | ... | ||
+ | |||
+ | |||
+ | Les seules lignes activées après modifications sont : | ||
+ | |||
+ | utilisateur@hote: | ||
+ | [opcache] | ||
+ | opcache.enable=1 | ||
+ | opcache.memory_consumption=128 | ||
+ | opcache.interned_strings_buffer=8 | ||
+ | opcache.max_accelerated_files=10000 | ||
+ | opcache.revalidate_freq=2 | ||
+ | opcache.save_comments=1 | ||
+ | |||
+ | > La limite de mémoire PHP est inférieure à la valeur recommandée de 512 Mo. | ||
+ | |||
+ | J'ai suivi ce tutoriel, c'est l' | ||
+ | https:// | ||
+ | |||
+ | utilisateur@hote: | ||
+ | memory_limit = 512M | ||
+ | |||
+ | > Votre installation n’a pas de préfixe de région par défaut. C’est nécessaire pour valider les numéros de téléphone dans les paramètres du profil sans code pays. Pour autoriser les numéros sans code pays, veuillez ajouter " | ||
+ | |||
+ | Il suffit d' | ||
+ | |||
+ | ' | ||
+ | |||
+ | Pour d' | ||
+ | |||
+ | |||
+ | > La configuration du serveur web ne permet pas d' | ||
+ | > La configuration du serveur web ne permet pas d' | ||
+ | |||
+ | Ces alertes semblent activées car j' | ||
+ | |||
+ | |||
+ | ===== Tests de performances ===== | ||
+ | FIXME à faire | ||
+ | |||
+ | Les performances peuvent concerner les disques, le serveur, le temps de réactivité, | ||
+ | |||
+ | Pour les accès disques : [[http:// | ||
+ | |||
+ | Sur mon MacBookAir (2013) qui fonctionne sur Debian, disque SSD : | ||
+ | |||
+ | Test via `hdparm` : | ||
+ | |||
+ | HOTE:/ | ||
+ | /dev/sda: | ||
+ | Timing cached reads: | ||
+ | Timing buffered disk reads: 1710 MB in 3.00 seconds = 569.95 MB/sec | ||
+ | |||
+ | Ecriture d'un fichier de 1GB aléatoire (attention la commande `dd` peut être très dangereuse si utilisée avec des droits administrateurs) : | ||
+ | |||
+ | HOTE:/ | ||
+ | 1024+0 enregistrements lus | ||
+ | 1024+0 enregistrements écrits | ||
+ | 1073741824 octets (1,1 GB, 1,0 GiB) copiés, 5,88258 s, 183 MB/s | ||
+ | |||
+ | Sur la RaspberryPi 2 | ||
+ | |||
+ | utilisateur@raspberrypi2:/ | ||
+ | / | ||
+ | Timing cached reads: | ||
+ | Timing buffered disk reads: | ||
+ | |||
+ | |||
+ | ^ Test ^ MacBook Air ^ RaspberryPi 2 ^ RaspberryPi 2 ^ RaspberryPi 2 | ||
+ | | Type disque | ||
+ | | hdparm (en cache) | ||
+ | | hdparm (buffer) | ||
+ | | Ecriture (dd) | 183 MB/s (1GB) | 197 MB/s (51Mo) | 13,8 MB/s (1GB) | 22.6 MB/s | ||
+ | |||
+ | En conclusion : les performances sont largement en dessous d'un PC, il ne faut pas oublier que la RPi2 n'est qu'un nano-ordinateur. Les performances des disques SSD et HDD sont assez proches, et en fait les valeurs de débit sont proches des débits de la liaison USB. Sans surprise, c'est la liaison USB 2.0 qui limite les débits des disques SATA 3GB/s. | ||
+ | |||
+ | ==== Délai d' | ||
+ | |||
+ | Les délais d' | ||
+ | |||
+ | UTILISATEUR@HOTE: | ||
+ | PATTERN: 0x180800 | ||
+ | PING XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX) 56(84) octets de données. | ||
+ | 64 octets de XXX.XXX.XXX.XXX : | ||
+ | 64 octets de XXX.XXX.XXX.XXX : | ||
+ | 64 octets de XXX.XXX.XXX.XXX : | ||
+ | 64 octets de XXX.XXX.XXX.XXX : | ||
+ | 64 octets de XXX.XXX.XXX.XXX : | ||
+ | ^C | ||
+ | --- statistiques ping XXX.XXX.XXX.XXX --- | ||
+ | 5 paquets transmis, 5 reçus, 0% packet loss, time 4006ms | ||
+ | rtt min/ | ||
+ | |||
+ | ==== Conclusion pour les performances ==== | ||
+ | Le serveur est accessible depuis l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | ===== Optimisations ===== | ||
+ | FIXME à écrire | ||
+ | === Système de fichiers EXT4 === | ||
+ | Pour diminuer le nombre d' | ||
+ | |||
+ | FIXME https:// | ||
+ | |||
+ | FIXME à réaliser | ||
+ | |||
+ | FIXME pour des raisons de taille, un disque HDD a ensuite été utilisé | ||
+ | |||
+ | === Utilisation de la swap === | ||
+ | C'est un sujet de discussion sur des blogs. A voir, la RPi2 ayant une quantité de RAM limitée. | ||
+ | Le choix qui a été réalisé est de créer un fichier de swap de 100MB (puis 256MB). Par rapport à une partition dédiée, le fichier peut " | ||
+ | |||
+ | sudo dphys-swapfile swapoff | ||
+ | sudo nano / | ||
+ | CONF_SWAPFILE=256 | ||
+ | sudo dphys-swapfile setup | ||
+ | want / | ||
+ | sudo dphys-swapfile swapon | ||
+ | | ||
+ | Ne pas oublier les commandes | ||
+ | |||
+ | Il est aussi possible de ne pas modifier le fichier de configuration, | ||
+ | |||
+ | Swap ou pas, la discussion est ouverte : | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | === Ecriture des journaux systèmes en décalé === | ||
+ | FIXME à essayer | ||
+ | L' | ||
+ | |||
+ | |||
+ | |||
+ | ===== Sécurisation ===== | ||
+ | FIXME page dédiée : openSSH, fail2ban, accès utilisateurs, | ||
+ | |||
+ | IMPORTANT: https:// | ||
+ | |||
+ | * [ ] Penser à filtrage par MAC address pour l' | ||
+ | * [ ] Authentification à 2 facteurs est intéressante aussi | ||
+ | |||
+ | ===== Transfert serveur " | ||
+ | |||
+ | Mes précédents fichiers étaient hebergés sur ma tour, un serveur Apache+MySQL+Nextcloud. | ||
+ | Le transfert était la finalité du projet. | ||
+ | |||
+ | Nextcloud propose des guides de migration qui ont été efficaces, moyennant quelques éléments ci-dessous : | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * et aussi https:// | ||
+ | |||
+ | A date, le serveur de test heberge 8Go de données et donne satisfaction en temps de réponse et en durée de fonctionnement. | ||
+ | Les données à transférer sont de 135Go, ce qui représente une marche conséquente (base de données, plus contenu du dossier `data` de Nextcloud). | ||
+ | |||
+ | Pour ne pas réinstaller et reconfigurer tout le serveur de test il a été choisi de : | ||
+ | |||
+ | * remplacer la base de données de test par la nouvelle | ||
+ | * remplacer les données par les nouvelles | ||
+ | * tout cela via le fichier config.php de Nextcloud | ||
+ | |||
+ | Les étapes dans l' | ||
+ | |||
+ | - Stopper nginx | ||
+ | - S' | ||
+ | - Sauvegarder les données (une copie des fichiers de la base données n'a pas réussi, à cause de versions de MySql/ | ||
+ | - Transférer les sauvegardes vers le nouveau disque (rsync a été bien utile) | ||
+ | - Recréer la table dans la base de données (mysql) | ||
+ | - Donner les droits à l' | ||
+ | - Modifier le fichier config.php par rapport au nouveau répertoire `data` | ||
+ | - Vérifier avec php occ que la connexion à la base de données est correcte | ||
+ | - Relancer nginx et tester ! | ||
+ | |||
+ | Normalement il est possible de se logger et d' | ||
+ | |||
+ | Les 4 CPU sont montés à 100% pendant 5 minutes durant le premier login, mais cela n'a pas empéché la navigation sur le site Nextcloud. La swap, auparavant proche de 0Mo, est désormais utilisée (88% des 100Mo parfois). | ||
+ | |||
+ | Ménage : | ||
+ | |||
+ | * suppression base de données serveur de test | ||
+ | * suppression des données de test | ||
+ | |||
+ | ====== Ressenti à l' | ||
+ | A l' | ||
+ | |||
+ | La mise à jour du Nextcloud (21.0.4) via l' | ||
+ | |||
+ | * rafraîchir la page, et ne pas cliquer " | ||
+ | * parfois se reconnecter sur l' | ||
+ | * [[https:// | ||
+ | | ||
+ | ====== Les différentes versions de Nextcloud ====== | ||
+ | |||
+ | Le premier serveur a été installé avec Nextcloud 21. J'ai pu y réaliser toutes les mises à jour jusqu' | ||
+ | |||
+ | Nextcloud 25 ne fonctionne que sur un système à 64 bits ([[https:// | ||
+ | ). J'en ai eu la désagréable expérience lorsque j'ai réalisé cette mise à jour : | ||
+ | |||
+ | * Nextcloud semble fonctionner | ||
+ | * malheureusement les fichiers ne sont plus accessibles sur l' | ||
+ | |||
+ | > It seems like you are running a 32-bit PHP version. Nextcloud needs 64-bit to run well. Please upgrade your OS and PHP to 64-bit! For further details read the documentation page about this. | ||
+ | |||
+ | Il existe cependant une solution que j'ai pu appliquer ([[https:// | ||
+ | |||
+ | |||
/var/www/vhosts/kadavrhusky.net/httpdocs/data/attic/informatique/installation_et_securisation_d_un_serveur_nextcloud_et_nginx_sur_un_raspberrypi_2_et_disque_ssd.1616948360.txt.gz · Dernière modification : 2021/03/28 18:19 de Pascal Delrot