En route vers la création de notre propre service cloud, alors que nous nous
sommes habitués au système Debian et avons
créé un serveur web . Il est maintenant temps pour la dernière étape - créer et configurer un cloud personnel basé sur le serveur Nextcloud.

Table des matières
Partie 1. Configurer votre environnement Debian pour un usage quotidienPartie 2. Créer un serveur - configurer LAMP dans DebianPartie 3. Création d'un cloud personnel - installation et configuration de NextcloudPartie 4. Mise à jour 2018 - Debian 9 et Nextcloud 13Partie 5. Mise à jour 2019 - PHP 7.2, MariaDB 10.4 et Nextcloud 17
Navigation rapide dans les chapitres
PréfacePréparation d'un serveur pour installer NextcloudInstaller NextcloudOrganisation du stockage NextcloudConfigurer l'accès à la machine virtuelle Nextcloud à partir du réseau localConfiguration de NextcloudRéglage avancé NextcloudProtection pour NextcloudSmartphone Cloud SyncSynchronisation avec le cloud de l'ordinateur personnelPostface
Préface
Nous sommes donc arrivés à la chose même pour laquelle tout a commencé et à laquelle nous n'avons pas avancé rapidement. Cette partie décrira l'installation et certains points de la configuration du serveur Nextcloud dans la machine virtuelle VMWare, ainsi qu'une petite expérience de travail sous la forme de la synchronisation du contenu d'une paire de smartphones et de dossiers Windows sur un ordinateur de bureau. Les instructions d'installation suivantes pour Nextcloud impliquent que le service est déployé sur un serveur qui a été créé selon les instructions de la partie précédente de mon histoire.
Initialement, ce chapitre était prévu pour être petit, car je voulais me limiter à décrire simplement l'installation et la configuration de Nextcloud, mettant fin essentiellement à cette histoire de «juste entrer dans Linux pour une tâche spécifique». Mais, pensant que cela pouvait sembler intéressant pour quelqu'un, il a décidé de montrer comment j'avais résolu le problème de la synchronisation des dossiers de mon ordinateur personnel, donc ce dernier chapitre découlait en douceur d'instructions claires sur quoi et comment faire en programmation. Cela explique une certaine «vinaigrette» dans cette partie - elle commence par le travail et les paramètres sous Linux, coule au niveau des paramètres du réseau et des logiciels virtuels, et se termine avec des béquilles de rabotage sous Windows. Par contre, cette série d'articles a pour titre «Histoire de la création ...» et j'ai décidé de la raconter jusqu'au bout.
RemarqueSuite à la lecture des constructions du formulaire http: // 127.0.0.1 (https: // 127.0.0.1), l'espace après http: // (https: //) doit être supprimé lors de la saisie de la barre d'adresse du navigateur. Un espace a été inséré lors de la publication de cet article afin d'empêcher le moteur de convertir automatiquement le texte en liens.
Préparation d'un serveur pour installer Nextcloud
Nextcloud est une application Web qui possède un ensemble de fichiers et fonctionne avec une base de données MySQL donnée. L'application Web est installée en tant que site standard, pour l'installation dont vous avez besoin de télécharger les fichiers «moteur» sur le serveur, exécutez le fichier d'installation et spécifiez les détails d'accès à la base de données précédemment créée pour ce site lors de l'installation.
Créez un répertoire dans lequel les fichiers Nextcloud seront placés:
# mkdir / var / www / nextcloudJ'ai décidé de refuser HTTP, ne laissant l'accès que via HTTPS. Pour ce faire, vous devez configurer apache.
Ouvrez le fichier:
# nano /etc/apache2/sites-available/default-ssl.confEt avant la balise, ajoutez le contenu suivant:
<Directory /var/www/nextcloud> Options FollowSymLinks AllowOverride All Require all granted </Directory>
Désactivez la configuration HTTP:
# a2dissite 000-default.confFermez le port 80:
# ufw delete allow 80Et redémarrez le serveur Web:
# service apache2 restartVous devez maintenant créer une base de données pour nextcloud. Nous entrons dans mysql en entrant le mot de passe du superutilisateur mysql:
# mysql -u root -pCréez une base de données appelée nextcloud:
mysql> CREATE DATABASE `nextcloud`;Créez un utilisateur avec le nom nextcloud et le mot de passe trivial nc123:
mysql> CREATE USER 'nextcloud' @ 'localhost' IDENTIFIED BY 'nc123';Nous donnons un accès complet à l'utilisateur nextcloud à la base de données nextcloud:
mysql> ACCORDER TOUS LES PRIVILÈGES SUR `nextcloud`. * TO 'nextcloud' @ 'localhost';Mettre à jour la table des privilèges:
mysql> FLUSH PRIVILEGES;Quittez mysql:
mysql: mysql> exitDe plus, vous devez installer des modules supplémentaires pour PHP:
# apt-get install curl libcurl3 libcurl3-dev php5-curl
# a2enmod réécritureDans la première partie de cette histoire, nous avons ouvert des ports pour l'interaction réseau et courrier, mais pour notre cible, ils ne sont pas requis et il est préférable de les fermer. Supprimez les règles:
# ufw delete allow 138 / udp
# ufw delete allow 139 / udp
# ufw delete allow 139 / tcp
# ufw delete allow 445 / tcp
# ufw delete allow 25
# ufw delete allow 465
# ufw delete allow 110
# ufw delete allow 143
# ufw delete allow 993
Installer Nextcloud
Téléchargez les fichiers et décompressez-les dans le répertoire prévu:
# wget download.nextcloud.com/server/releases/nextcloud-11.0.2.tar.bz2
# tar xjf nextcloud-11.0.2.tar.bz2 -C / var / wwwModifier les autorisations de dossier:
# chmod 755 / var / www / nextcloudEt nous attribuons au propriétaire de ce dossier un serveur Web afin qu'il n'y ait aucun problème à y écrire:
# chown -R www-data: www-data / var / www / nextcloudC’est tout! Le service est installé, si vous tapez dans le navigateur https: // 127.0.0.1/nextcloud, l'assistant d'installation s'ouvre. Mais attendons avec cela, ayant déjà préparé un endroit pour stocker les données utilisateur.
Il convient de mentionner que la version 11.0.2 de Nextcloud est actuellement assez obsolète et contient des vulnérabilités qui ne sont pas présentes dans les versions plus récentes et plus récentes, donc si vous installez la branche 11.x, il est préférable d'installer une version plus récente (au début de 2018 - ce version 11.0.7).
Organisation du stockage Nextcloud
Cette partie est facultative et peut être ignorée sans problème - tout fonctionnera sans elle. Cependant, si vous allez créer un répertoire de données en dehors de la machine virtuelle, je vous recommande de vous familiariser avec celui-ci.
Par défaut, le contenu synchronisé sera stocké dans le répertoire / var / www / nextcloud / nxcdata. Cette option ne me convenait pas tout de suite pour plusieurs raisons. D'une part, je ne voudrais pas augmenter constamment la taille de fichier d'un disque virtuel. D'un autre côté, j'aimerais avoir une solution de stockage des données de machine virtuelle distincte et indépendante. La chose la plus simple qui me vient immédiatement à l'esprit est l'utilisation d'une clé USB. S'il n'y a pas assez d'espace, le lecteur peut simplement être remplacé. Si nécessaire, il peut être connecté à un autre ordinateur et télécharger les fichiers nécessaires. Mobile et pratique. Cependant, je ne voulais pas utiliser l'USB 2.0 en raison de la bande passante relativement petite par rapport aux normes modernes, et je n'ai pas réussi avec l'USB 3.0 - les logiciels de virtualisation (WMVare et VirtualBox) ne voulaient pas transmettre normalement les appareils connectés via un contrôleur USB 3.0.
Mes appétits dans le processus de création du cloud ont augmenté et je n'avais pas moins d'un téraoctet, donc j'ai finalement décidé de connecter un disque dur ordinaire de deux téraoctets à la machine virtuelle, qui était déjà située et connectée à l'intérieur de l'ordinateur. Si nécessaire, il peut être retiré sans problème et connecté via l'adaptateur SATA <-> USB 3.0 existant.
Ainsi, l'idée principale est d'organiser un point permanent pour connecter un répertoire avec un contenu utilisateur en dehors du répertoire / var / www / nextcloud, dans lequel un lien symbolique appelé nxcdata est créé qui fait référence au répertoire de données réelles, qui peut être connecté de différentes manières sur différents supports.
Créez un répertoire:
# mkdir / mnt / nxcdataNous changeons les droits:
# chmod 770 / mnt / nxcdataNous faisons le propriétaire du serveur web:
# chown www-data: www-data / mnt / nxcdataJe peux placer les données n'importe où et n'importe où, l'essentiel est de placer un lien symbolique vers ce répertoire dans le répertoire / mnt / nxcdata et de le nommer nxcdata, c'est-à-dire le chemin complet ressemblera à / mnt / nxcdata / nxcdata.
J'ai d'abord testé la solution du dossier local que j'ai créé dans le répertoire personnel.
Créé un dossier au bon endroit:
$ mkdir / home / user / nxcdataChangé les droits:
# chmod 755 / home / user / nxcdataPropriétaire du serveur Web:
# chown -R www-data: www-data / home / user / nxcdataCréation d'un lien symbolique:
# ln -s / home / user / nxcdata / mnt / nxcdata / nxcdataCette solution était réalisable, vous pouvez donc continuer. Le répertoire de données externe peut être connecté de deux manières - via le service partagé VMWare ou directement en tant que disque physique ou partition. Il faut comprendre que la première solution n'est possible que si les outils vmware sont installés, qui sont installés sans problème uniquement s'il existe une interface graphique du système d'exploitation (sinon, vous devrez éditer les scripts d'installation des outils vmware). Si nous abandonnons l'interface graphique, il ne reste alors que la possibilité de connecter le lecteur directement à la machine virtuelle, mais avec cette solution j'ai dû beaucoup souffrir. Après un certain temps, j'ai toujours trouvé une version de travail stable, en tenant compte du fait qu'un script universel a été inventé, qui incorporait les deux options de connexion.
Pour un dossier connecté via VMWare Shared Folders dans la section Dossiers partagés des paramètres de la machine virtuelle, vous devez connecter le dossier nécessaire à partir du système hôte et lui donner le nom vmw-nxcdata. Ce dossier peut faire référence à un répertoire du disque dur ou directement au répertoire racine d'un disque du système hôte.
Le dossier monté apparaîtra automatiquement dans le système virtuel le long du chemin / mnt / hgfs / vmw-nxcdata. Cependant, le problème est que le serveur Web ne disposera pas de droits suffisants pour écrire des fichiers sur ce chemin et que les moyens standard du système ne peuvent pas réaffecter les droits à ce répertoire. Par conséquent, j'ai dû trouver comment monter manuellement de telles ressources.
Créez un dossier:
# mkdir / mnt / vmw-nxcdataNous montons en utilisant le module vmhgfs, qui a été installé avec vmware-tools:
# mount -t vmhgfs -o uid = www-data, gid = www-data, fmask = 007, dmask = 007 .host: / vmw-nxcdata / mnt / vmw-nxcdataLe montage doit être effectué avec exactement ces paramètres pour un fonctionnement sans problème du serveur Web à l'avenir. Au départ, je montais sans spécifier uid / gid et masques, mais ensuite cela ne conduisait à rien de bon, car il n'était plus possible de changer les droits après le montage. Une fois le montage terminé, il peut s'afficher: «Impossible d'ajouter une entrée à mtab, en continuant», mais il se montera et fonctionnera.
Super, nous avons monté le répertoire. Vous pouvez maintenant placer un lien symbolique vers ce répertoire dans / mnt / nxcdata. Mais je ne voudrais pas le faire manuellement chaque fois que je démarre ou redémarre le serveur. La manière la plus simple consiste à entrer la commande ci-dessus dans le fichier /etc/rc.local pour la monter sur la ligne «exit 0». Cependant, je voulais que le démontage automatique ait lieu lorsque la machine virtuelle était éteinte pour une sécurité des données fiable. Et j'ai décidé de tout faire au niveau du service et de m'occuper un peu des mécanismes init / update-rc, d'autant plus j'étais curieux et ça s'est avéré assez intéressant.
La signification des actions suivantes est de créer un service système qui serait appelé et exécuter des commandes prédéfinies lorsque le système est allumé ou éteint. Le service est décrit par un script compilé selon certaines règles et se trouve dans /etc/init.d. Le bloc INIT INFO est situé au tout début du script et contient des informations auxiliaires dans lesquelles je voudrais mentionner les directives Default-Start et Default-Stop - elles spécifient les niveaux d'exécution auxquels le script doit être démarré ou arrêté par défaut.
Niveaux d'exécution:
0 - exécution de script lorsque le système est éteint
1 - exécution de script au démarrage du système en mode mono-utilisateur
2 - exécution de script au démarrage du système en mode multi-utilisateur
3 - 5 - réservé
6 - exécution de script au redémarrage du système
Après avoir écrit le script, il est activé à l'aide du mécanisme update-rc, qui, en fait, crée des liens vers le script dans les répertoires nécessaires /etc/rc0.d - /etc/rc6.d, dont le contenu correspond aux tâches effectuées par les niveaux d'exécution. Les liens peuvent être créés indépendamment, mais, contrairement à l'activation ou la désactivation des configurations de serveur Web Apache, vous devez prendre en compte de nombreuses nuances ici, vous devez donc activer ou désactiver le service via update-rc.
Alors, créez un fichier:
# nano /etc/init.d/nxcdata_automount.shEt écrivez-y le contenu suivant:
Faites attention à quelques équipes commentées dans la section perform_start - c'est notre travail de base pour l'avenir. De plus, après le montage, le service fail2ban est redémarré.
Le paradoxe est qu'après un an, je ne me souviens plus pourquoi j'ai fait ça, mais je doute beaucoup que cela se soit fait comme ça. De toute évidence, après le montage du service, pour une raison quelconque, le service s'est écrasé ou n'a pas pu démarrer initialement et a dû être redémarré manuellement.
Après une telle distraction, nous continuons de configurer davantage. Créez un lien symbolique:
# ln -s / mnt / vmw-nxcdata / mnt / nxcdata / nxcdataNous rendons notre script exécutable:
# chmod + x /etc/init.d/nxcdata_automount.shAjoutez le script au démarrage:
# update-rc.d nxcdata_automount.sh par défautNous redémarrons le système et nous assurons que le montage automatique a réussi et que tout est accessible de la bonne manière.
Pour supprimer le script, vous devrez exécuter quelques commandes:
# update-rc.d -f nxcdata_automount.sh supprimer
# rm -f /etc/init.d/nxcdata_automount.shDans le cas du montage d'un lecteur non via des dossiers partagés VMWare, vous devez suivre directement les mêmes étapes que lors du montage via des dossiers partagés VMWare, mais en tenant compte du fait qu'un deuxième lecteur complet apparaît dans le système. Comment trouver la lettre de lecteur?
La plupart des périphériques de blocs Linux sont connectés via l'interface SCSI, donc dans la plupart des cas, les disques commencent par les lettres sd. La troisième lettre du nom du disque signifie son numéro de série dans le système et est indiquée par ordre alphabétique: sda - le premier disque, sdb - le deuxième disque, sdc - le troisième et ainsi de suite. Vient ensuite le numéro qui définit le numéro de partition sur le disque: sda1, sda2 et ainsi de suite. La façon la plus simple de voir tous les lecteurs mappés est de regarder le contenu du répertoire / dev / et de filtrer les périphériques sd:
$ ls -l / dev / | grep sdPar exemple, nous devons connecter un lecteur sdb1 avec un système de fichiers NTFS.
Créez un répertoire et montez le disque dedans:
# mkdir / mnt / sdb1
# mount -t ext4 / dev / sdb1 / mnt / sdb1Créez un répertoire pour les données, définissez les droits et l'utilisateur correspondant:
# mkdir / mnt / sdb1 / nxcdata & chmod 770 / mnt / sdb1 / nxcdata & chown -R www-data: www-data / mnt / sdb1 / nxcdataEnsuite, vous devez également créer un script pour le montage automatique et ajuster la commande de montage dans le script (des exemples de connexion d'un lecteur avec NTFS et EXT4 sont déjà dans le script et commentés) et ajoutez le script au chargement automatique.
B créer un lien symbolique vers le répertoire de données:
# ln -s / mnt / sdb1 / nxcdata / mnt / nxcdata / nxcdataEn fait, tous ces problèmes avec un tas de répertoires nxcdata sont conçus pour une chose: pour fournir un transfert simple du répertoire de données à l'avenir - vous n'aurez pas besoin de modifier la configuration dans le moteur Nextcloud et généralement d'y grimper - tout ce que vous devez faire est de connecter un nouveau disque, de le copier sur lui des données et recréer un lien symbolique menant à un nouveau répertoire avec des données. En même temps, toutes les actions ne dépassent pas le répertoire / mnt. Donc, tout s'est avéré compliqué sur le plan évolutif, je ne voulais tout simplement pas perdre les solutions que j'avais.
Quelle est la meilleure façon de transférer des données en dehors de la machine virtuelle? Je vais partager mon expérience sur quelle option j'ai arrêté et pourquoi.
Les clés USB ont été automatiquement capturées lorsque la machine virtuelle a démarré, se sont correctement et complètement jetées à l'intérieur, et tout a toujours fonctionné, mais uniquement jusqu'à ce que le disque soit déconnecté du système pour une raison quelconque. Le redémarrage ou la déconnexion physique et la connexion d'un disque ont aidé. La décision s'est avérée peu fiable. Il n'y avait pas un tel problème avec les lecteurs flash, mais leur volume et leur vitesse de travail ne me convenaient absolument pas. Peut-être que cela valait la peine d'essayer un disque externe avec une alimentation autonome.
Le transfert d'annuaire via VMWare Shared Folders a fonctionné de manière stable et parfaite. Cette solution a complètement satisfait la tâche de synchronisation de deux smartphones. Tout a fonctionné pendant plusieurs jours, des dizaines de gigaoctets de données ont été pompés. Cependant, lorsque j'ai décidé d'ajouter des données de l'ordinateur au cloud, j'ai soudainement trouvé un problème avec les longs chemins d'accès et les noms de fichiers. En théorie, la limite de nom de fichier / dossier NTFS est de 255 caractères, mais en pratique, l'API Windows la limite à 244 caractères. En théorie, la limite de la longueur du chemin d'accès à un fichier ou un dossier dans NTFS est de 32 767 caractères, mais en pratique, l'API Windows la limite à 245 caractères. Étant donné que je suis un grand fan d'informations structurantes, la longueur de mon chemin peut être très grande. Le titre non abrégé des livres peut également facilement contenir de 100 à 150 caractères, espaces compris. Cette restriction est un problème connu des dossiers partagés VMWare, qui ne pouvait pas être résolu même lorsque vous utilisez Windows 10 avec toutes sortes de clés intelligentes dans le registre pour supprimer la limite de 255 caractères. Une raison possible est les limitations de vmhgfs. Cette manière pratique de se connecter a dû être abandonnée. La raison est résolue à coup sûr - le problème est dans le système de fichiers virtuel, qui est utilisé dans le mécanisme des dossiers partagés VMWare.
La solution suivante consiste à connecter le disque dur directement à la machine virtuelle. Cela n'a pas non plus fonctionné sans problème. La structure des données (ou système de fichiers, et cela était évident pour NTFS et EXT2 / 3/4) est constamment tombée en panne soit lorsque le disque ou sa partition a été «capturé» par le logiciel de la machine virtuelle, soit lorsqu'il a été renvoyé au système hôte même si j'ai transféré l'ensemble Conduisez hors ligne sur le système hôte. Dans certains modes, je n’écris ni ne lis les données - je ne pouvais même pas formater correctement le disque dur ou la partition transférés. Cependant, nous avons réussi à trouver un mode de fonctionnement: un disque dur physique avec une partition, formaté en NTFS, était connecté à la machine virtuelle dans un certain mode de connexion: SATA / Indépendant / Persistant / Utiliser une partition individuelle. Le dossier nxcdata contenant les données doit se trouver sur le disque dur.
Configurer l'accès à la machine virtuelle Nextcloud à partir du réseau local
Nous n'avons aucun problème à ouvrir des sites Web sur une machine virtuelle ou à partir d'un système hôte. Mais comment ouvrir le site créé à partir d'un autre ordinateur sur le réseau local? Examinons la structure de notre réseau, illustrée ci-dessous.

L'image montre que le routeur est directement connecté à Internet et configuré de sorte qu'il distribue automatiquement les adresses IP aux appareils connectés dans la plage 192.168.0.2-192.168.0.254. L'adresse 192.168.0.2 a été reçue par notre ordinateur, et 192.168.0.3 - le deuxième ordinateur sur lequel nous faisons le serveur. Cependant, le logiciel de virtualisation est installé sur le deuxième ordinateur, qui a créé son propre routeur virtuel et configuré son
DHCP sur le sous-réseau 192.168.233.0/24. Notre serveur virtuel a reçu l'IP 192.168.133.138.
Je peux facilement ouvrir le site à l'intérieur de la machine virtuelle 192.168.233.138. Je peux facilement ouvrir le site à partir de la machine 192.168.0.3 en entrant simplement l'adresse IP souhaitée dans le navigateur - le logiciel de virtualisation a déjà pris en charge la configuration correcte de l'environnement réseau sur la machine hôte. Mais comment puis-je accéder au site à partir de l'ordinateur 192.168.0.2? Si j'entre l'adresse IP 192.168.233.138, rien ne s'ouvrira pour moi, car ni mon ordinateur ni le vrai routeur ne savent quoi que ce soit sur ce sous-réseau. Si j'entre l'adresse 192.168.0.3, rien ne m'ouvrira non plus, car il n'y a vraiment pas de site sur cet ordinateur - il est à l'intérieur de sa machine virtuelle.
Pour résoudre ce problème, vous devez configurer le routeur virtuel de l'ordinateur 192.168.0.3. Nous savons déjà que l'accès aux sites se fait sur les ports 80 et 443. Lorsque vous accédez à ces ports à une machine 192.168.0.3, nous devons créer un routage afin que les requêtes soient transmises à la machine virtuelle 192.168.233.138. Heureusement pour cela, nous avons les outils disponibles. VMWare Workstation dispose d'un outil Virtual Network Editor qui peut être ouvert à partir du menu de la machine virtuelle (Edition -> Virtual Network Editor).

Cet outil vous permet de gérer de manière assez flexible les paramètres réseau. Nous devons sélectionner la carte réseau virtuelle VMNet8 et cliquer sur le bouton "Paramètres NAT ..." qui est devenu disponible. Dans la fenêtre qui s'ouvre, vous devez ajouter des règles pour créer le routage dont nous avons besoin.

Spécifiez le port du système hôte, puis spécifiez l'adresse IP et le port de la machine virtuelle où les demandes doivent être redirigées. Pour transférer le trafic HTTPS, vous devez spécifier le port du système hôte 443 et le port 443 et l'adresse de la machine virtuelle 192.168.233.138. Après avoir créé les règles, cliquez sur «OK» dans toutes les fenêtres - l'environnement de réseau virtuel est reconfiguré automatiquement.
Après ces modifications, nos sites commenceront à s'ouvrir à partir de la machine 192.168.0.2 lors de l'accès à l'adresse 192.168.0.3.
Des paramètres similaires pour la redirection de port sont disponibles non seulement pour VMWare, mais aussi pour VirtualBox (Paramètres → Réseau → sélectionnez l'adaptateur requis → Avancé → Redirection de port). Cependant, lors des expériences de connexion du disque dur à cette étape, j'ai trouvé le lecteur VMWare gratuit installé, dans lequel l'éditeur de réseau virtuel ne l'était pas. Je n'ai rien trouvé sur la redirection de port pour VMWare Player sur Internet et j'ai dû utiliser une version d'essai de VMWare Workstation - lors de l'installation du produit, cela donne 30 jours d'utilisation gratuite. Après 30 jours, le produit peut être retiré, nettoyé et réinstallé, mais une telle attention au serveur est en quelque sorte redondante et clairement indésirable.
Et puis je suis allé à un petit (ou gros) truc. L'ensemble de fichiers VMWare Workstation contient l'utilitaire vmnetcfg, qui s'exécute essentiellement via l'élément Virtual Network Editor. Cependant, il ne faisait pas partie du jeu de fichiers VMWare Player. Mais lors de l'installation de VMWare Player, est-ce qu'il configure en quelque sorte son environnement réseau? Je viens de prendre cet utilitaire et de le copier dans le dossier avec VMWare Player, puis de le lancer. Étonnamment, tout a fonctionné. Il est possible que les paramètres réseau légers dans l'environnement VMWare Player ne fonctionnent pas, mais la redirection de port est fournie, et je n'en ai pas besoin de plus.Pour accéder à notre serveur depuis Internet, vous devez rediriger les ports sur un routeur connecté à Internet de la même manière. Dans le firmware de la grande majorité des routeurs, il existe une section de redirection de port où vous pouvez configurer le routage en spécifiant le port externe et le port et l'adresse IP de la machine interne. Cependant, il y a une légère nuance. Si le fournisseur nous a donné une véritable adresse IP ou que nous l'avons achetée chez lui, il n'y aura aucun problème - nous entrons cette adresse IP depuis un ordinateur de n'importe où dans le monde, le vrai routeur redirigera le trafic vers un ordinateur avec une machine virtuelle sur laquelle le routeur virtuel redirigera le trafic directement vers le virtuel une voiture. Mais que faire à quelqu'un qui n'a pas la possibilité d'obtenir une véritable adresse IP et qui obtient des adresses dynamiques ou est derrière NATfournisseur, obtenir une adresse IP "grise"? Je n'ai pas eu à résoudre un tel problème, car j'ai une adresse IP "blanche" statique. Quiconque doit résoudre un tel problème d'une manière ou d'une autre devra y faire face. Je conseillerais de regarder dans le sens de dyndns ou freedns.afraid.org dans le cas d'adresses dynamiques, ou d'acheter un VDS bon marché pour essayer de trouver vous-même une sorte de routage, car dans tous les cas, sans serveur externe avec une adresse IP statique, ce problème ne peut pas être résolu.Après avoir configuré le routage, j'ai corrigé les adresses IP des ordinateurs 192.168.0.3 et 192.168.233.138, en les écrivant manuellement dans les paramètres de la carte réseau de ces machines afin d'exclure leur réaffectation automatique.
Configuration de Nextcloud
Il est maintenant temps d'ouvrir https: // 127.0.0.1/nextcloud dans le navigateur à l'intérieur de la machine virtuelle, https: // 192.168.233.138/nextcloud depuis le système hôte ou, en fonction du routage configuré décrit ci-dessus, https: // 192.168.0.3/nextcloud depuis n'importe quel ordinateur sur le réseau local.Ensuite, nous définissons le login / mot de passe de l'administrateur, l'accès à la base de données précédemment créée et comme emplacement de stockage, spécifions le chemin d'accès complet au répertoire nxcdata: / mnt / nxcdata / nxcdata. Cette étape de configuration n'est pas différente de l'installation d'un site.Dans les paramètres d'administration, j'ai apporté les modifications simples suivantes:- Personnel → choisi le russe et spécifié un e-mail pour l'utilisateur administrateur @ localhost- Administration → Accès général → désactivé tous les éléments- Administration → Enquête d'utilisation → désactivé tous les éléments- Administration → Paramètres avancés → Gestion des fichiers: «Taille maximale du fichier de téléchargement» défini sur 25 Go- Utilisateurs → créé le groupe d'utilisateurs et ajouté un nouvel utilisateur à celui-ciAprès le réglage, vous devez activer la mise en cache.Ouvrez le fichier:# nano /var/www/nextcloud/config/config.phpEt tout à la fin, avant ");" ajoutez ce qui suit: Vous devez maintenant autoriser l'accès externe au site au niveau de son "moteur". Ouvrez le fichier: # nano /var/www/nextcloud/config/config.php Dans la section trusted_domains, vous devez ajouter l'adresse IP du serveur à la baie, ajoutez l'adresse sur laquelle Nexcloud est installé. La section trusted_domains dans notre cas ressemblera à ceci:'memcache.local' => '\OC\Memcache\Memcached',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
array('localhost', 11211),
),
'trusted_domains' =>
array (
0 => '127.0.0.1',
1 => '192.168.233.138',
),
Vous pouvez maintenant vérifier le bon fonctionnement du service - ouvrez le site et connectez-vous en tant qu'utilisateur utilisateur. Si l'autorisation a réussi, le service est prêt pour la bataille - vous pouvez installer l'application de synchronisation sur les ordinateurs et les smartphones, pour accéder, entrez l'adresse IP 192.168.0.3 et les détails d'accès au compte créés pour chaque appareil.Heureusement ou malheureusement, je n'ai pas eu à utiliser tout le potentiel du service créé, car au départ j'avais besoin d'un système de sauvegarde avec vérification et au départ je voulais seulement me débrouiller avec subversion, mais la vitesse de validation d'un nombre particulièrement important de petits fichiers m'a beaucoup attristé. J'ai tout fait pour grandir, mais je n'allais pas en profiter, et puis, d'une manière ou d'une autre, ce n'est plus du tout le cloud.Un utilisateur plus détaillé de l'utilisation du service a été réalisé fin 2017 par l'utilisateur de wtigga dans son article «Comment télécharger VPS: votre« cloud »Nextcloud . Du point de vue de l'utilisateur, l'article donne un aperçu du nouveau serveur Nextcloud, version 12.
Réglage avancé Nextcloud
Lors du fonctionnement du cloud pendant le premier mois de travail, certains problèmes sont apparus que j'ai dû résoudre avec l'aide de la communauté ou par moi-même. Je dois dire que j'ai utilisé le service très dur et en fait vérifié sa résistance au stress. La synchronisation de quelques gigaoctets de données de téléphones au cours de la soirée et jusqu'à un million de petits fichiers à partir d'un ordinateur était chose courante. En général, le service m'a fait une impression très positive.Je ne dirais pas que les solutions ci-dessous sont correctes et belles, mais ces béquilles fonctionnent au moins pour la version 11.0.2, sinon il serait impossible d'utiliser le service. Dans la version 12.x, quelque chose peut avoir été amélioré et corrigé, donc je ne recommanderais pas de définir ces paramètres immédiatement dans le cadre du paramètre de démarrage, tandis que pour la ligne 11.x, ils peuvent être appliqués immédiatement.Problème 1Une erreur comme «le fichier est verrouillé» se produit pendant la synchronisation. La synchronisation s'arrête. Le problème est connu - il est nécessaire d'effacer le contenu de la table oc_file_locks en exécutant la requête suivante à partir de la console mysql (lors de l'autorisation de l'utilisateur nextcloud):mysql> DELETE FROM oc_file_locks WHERE 1Comme de telles erreurs ne sont pas rares, je n'ai rien trouvé de mieux que de créer un script et de le placer directement dans le dossier racine:# nano / root / empty_oc_file_locks Contenu du script:
Le script peut être exécuté manuellement, mais ce n'est pas notre méthode. J'ai décidé de l'exécuter automatiquement toutes les 15 minutes en utilisant cron (https://ru.wikipedia.org/wiki/Cron).Pour ce faire, créez un fichier:# nano / root / crontabAvec le contenu suivant: Vous devez maintenant apporter des modifications au planificateur: # crontab / root / crontab Vous pouvez vérifier des changements comme celui-ci: # crontab -l Problème 2 Lors de la synchronisation via webDAV dans les journaux (voir panneau d'administration, autorisé par l'administrateur), les erreurs suivantes peuvent apparaître:*/15 * * * * root bash /root/empty_oc_file_locks
Error PHP reset() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#783
Error PHP ksort() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#782
Error PHP Invalid argument supplied for foreach() at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: by_file at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: all at /var/www/nextcloud/apps/files_versions/lib/Storage.php#757
Cette fois, la communauté n'a rien fait et a dû mener l'enquête seule. La raison réside dans l'erreur "Index non défini ... Storage.php # 757", qui entraîne plusieurs autres erreurs. Nous regardons le code de ce fichier. Tout le problème était dans le quota. Sur cette ligne du code (Storage.php # 757), l'espace libre est calculé en tenant compte du volume des fichiers d'archive. Quelque chose ne va pas dans le calcul, bien que le quota soit défini sur "illimité". Pour corriger l'erreur dans le panneau d'administration, j'ai défini un quota «infini mais numérique» pour chaque utilisateur, par exemple, 100 To.Problème 3Le problème avec la synchronisation des fichiers .htaccess - ils ne se synchronisent tout simplement pas! Et je n'étais pas seul, dans certains forums, ils ont posé des questions similaires. Cependant, je n'ai pas rencontré de solution toute faite. J'ai dû repenser moi-même. À la suite de la recherche sur Google, de la visualisation des journaux, de l'analyse de code, je n'ai rien trouvé de mieux que la façon de réparer le fichier du moteur nextcloud.Dans le fichier /var/www/nextcloud/lib/private/Files/filesystem.php nous recherchons la ligne suivante: Et nous la mettons sous la forme suivante:$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array('.htaccess'));
$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array(''));
Protection pour Nextcloud
Vous pouvez protéger notre service contre la sélection de mots de passe pour le panneau d'administration à l'aide de fail2ban. Pour ce faire, vous devez décrire l'expression caractéristique qui se produit dans les journaux nextcloud lorsque l'authentification échoue, selon laquelle le déclencheur correspondant se déclenchera.Créez le fichier:# nano /etc/fail2ban/filter.d/nextcloud.confAvec le contenu suivant:[Definition]failregex = {"reqId": ". *", "RemoteAddr": ". *", "App": " core "," message ":" Échec de la connexion: '. *' \ (IP distante: '' \) "," level ": 2," time ":". * "}ignoreregex =Ouvrez le fichier:# nano / etc /fail2ban/jail.localEt à la fin du fichier, ajoutez ce qui suit: Redémarrez le service: # service fail2ban restart Vérifiez un filtre actif:# nextcloud
[nextcloud]
enabled = true
port = http,https
protocol = tcp
filter = nextcloud
logpath = /var/log/nextcloud.log
# fail2ban-client status nextcloudN'oubliez pas que, conformément aux paramètres fail2ban de la partie précédente, si le mot de passe est entré sans succès six fois de suite pendant 12 heures, votre adresse IP sera bloquée pendant 30 jours. J'ai en quelque sorte passé deux soirées en raison d'un mot de passe incorrect sur l'un des téléphones, jusqu'à ce que je découvre ce simple fait dans les journaux système.
Smartphone Cloud Sync
Pour synchroniser le contenu des téléphones fonctionnant sous Android, il existe une merveilleuse application FolderSync. Le programme justifie pleinement son bas prix.Vous devez d'abord créer un nouveau compte dans lequel spécifier https: // 192.168.0.3/nextcloud comme adresse de serveur, entrez le login et le mot de passe du compte créé précédemment et activez le certificat auto-signé. Cliquez sur le bouton "Test" et assurez-vous que la connexion au serveur est en ordre.Ensuite, vous devez créer une tâche. Dans la tâche, spécifiez le compte créé précédemment et sélectionnez le type de synchronisation - «Vers le dossier distant». Spécifiez le dossier distant (vous pouvez le créer directement à partir de l'application "et sélectionnez le dossier local pour la synchronisation. J'ai fixé le planning à 2 heures du matin tous les jours. Dans les paramètres de synchronisation, j'ai activé" Synchronisation des sous-dossiers "et" Synchronisation des dossiers inclus ", j'ai également sélectionné l'option de toujours remplacer les anciens fichiers et en cas de conflit j'ai autorisé à utiliser le fichier local par défaut. Dans la section "Connexions", j'ai désactivé toutes les connexions sauf le Wi-Fi, et j'ai enregistré le SSID de mon réseau Wi-Fi domestique dans la section "SSID WiFi autorisés" - application bourgeon Je ne peux synchroniser que sur mon réseau domestique et ne pas essayer de rechercher le serveur sur d'autres réseaux, j'ai laissé le reste des paramètres par défaut.Ici, vous pouvez ajouter un filtrage. J'ai créé un nouveau filtre, «Le nom du dossier contient» et spécifié la valeur [nosync]. Ainsi, je peux exclure certains dossiers du dossier local spécifié de la synchronisation en ajoutant simplement le nom «[nosync]» à la fin.Ce paramètre a été fait pour des dossiers locaux tels que DCIM, Download, Telegram, viber, WhatsApp. Plus quelques dossiers utilisateur de plusieurs gigaoctets. Une fois par jour, le contenu de ces dossiers est synchronisé avec le serveur et les anciennes versions des fichiers sur le serveur ne sont pas supprimées, mais sont renommées et déplacées vers l'archive. Cela m'a permis de récupérer rapidement un fichier supprimé accidentellement ou d'annuler des modifications dans d'autres fichiers.
Synchronisation avec le cloud de l'ordinateur personnel
Je ne me considère pas comme un vrai programmeur. Au cours des dix dernières années, j'ai programmé dans des langages de programmation qui ne sont utilisés que dans le développement de processeurs ou de chipsets. Étant donné que je n'avais rien fait en C / C ++ depuis 15 ans, mais que j'avais besoin d'automatiser quelque chose sur l'ordinateur, j'ai plutôt utilisé activement des langages de script tels que BAT / CMD ou des logiciels tels que Sign 0f Mistery ou xStarter. Une fois que j'ai découvert et essayé ce qu'est AutoIt, c'est devenu une nouvelle ère dans l'automatisation de mon PC.Après avoir été convaincu de la stabilité et de la fiabilité du système de synchronisation sur les smartphones, j'ai pensé que ce serait bien de synchroniser les données sur mon ordinateur personnel. Nextcloud a son propre client pour Windows et, naturellement, il est devenu le premier candidat aux tests. J'allais synchroniser un volume de données de l'ordre d'un téraoctet, composé de centaines de milliers de fichiers de tailles différentes. Les données étaient différentes: musique, images, documents, livres électroniques, distributions, sites de sauvegarde, etc., etc. Il serait raisonnable de réduire tout cela à la synchronisation de données plus critiques, telles que des documents, par exemple, mais l'enthousiasme s'est emparé de moi et j'ai voulu vérifier la force du service.Dix heures après le début de la synchronisation, et en fait le premier téléchargement de contenu sur le serveur, le client est tombé sur un fichier au nom long. À ce moment-là, sur le serveur, j'ai également utilisé la connexion de stockage externe via les dossiers partagés VMWare et j'ai dû essayer une douzaine de clients, puis faire des expériences simples sur la copie manuelle de fichiers sur le serveur afin de comprendre que le problème est du côté serveur. Ainsi, après une semaine de lancement réussi du service, j'ai dû revenir à la machine virtuelle de sauvegarde et abandonner le mécanisme VMWare Shared Folders, en recommençant à zéro. Au final, j'ai supprimé ce goulot d'étranglement côté serveur, testé la fiabilité de la solution pendant une semaine de synchronisation des smartphones, et décidé de revenir sur mon ordinateur personnel. Cette fois, le client n'a pas trébuché sur le dossier malheureux et j'étais déjà heureuxcependant, après une demi-journée de synchronisation de petits fichiers, le client s'est de nouveau figé. Maintenant, il s'est avéré que le chemin est trop long du côté de l'ordinateur domestique et que le client Nextcloud ne peut pas le traiter correctement. Malheureusement, le client natif Nextcloud ne fonctionnait pas et son contenu d'informations n'était pas très élevé, j'ai donc dû l'abandonner.J'ai passé un certain temps à essayer de trouver un programme de synchronisation pratique qui prend en charge la gestion en ligne de commande. Je voulais faire ma tâche pour chaque grand dossier sur l'ordinateur et les exécuter en mode batch. Auparavant, j'avais déjà créé et élaboré un ensemble de fichiers BAT pour la synchronisation à l'aide de scripts et la gestion de FreeFileSync via la ligne de commande. Le problème des chemins longs ou des noms de fichiers a été résolu en définissant des dossiers locaux de la forme "\\? \ D: \ Info", c'est-à-dire se référant essentiellement au dossier local en tant que dossier réseau. Cependant, ce qui est webdav FreeFileSync ne sait pas. Malheureusement, il n'y avait pas d'analogues complets de FolderSync pour Windows, mais plus d'une fois sur les forums, ils ont recommandé GoodSync et, après avoir lancé une douzaine d'autres programmes, j'ai décidé de l'essayer. Malheureusement, GoodSync est beaucoup plus cher,mais un gaspillage unique de 15 $ pour la sécurité de leurs précieuses données, en principe, un déchet réalisable. Le programme a un mode de test, vous pouvez donc d'abord vérifier ses performances et sa stabilité.GoodSync s'est avéré être un logiciel assez convivial. Il existe une version portable spéciale appelée GoodSync2Go. Elle m'a donc intéressé. Pendant l'installation, vous devez sélectionner la lettre de lecteur et le programme est installé dessus dans le dossier GoodSync. J'ai créé le dossier Sync dans le répertoire racine du lecteur, disons D, et j'ai déplacé le dossier GoodSync créé avec tout le contenu.[ Ce texte a été écrit spécifiquement pour le site geektimes.ru par AlexanderS .
Le lien vers la source est facultatif, mais sa référence est hautement souhaitable! ]Après l'installation, le programme doit créer des tâches: le dossier local et le dossier distant pour la synchronisation sont indiqués. Dans les paramètres du travail, j'ai sélectionné la synchronisation de gauche à droite avec le choix des options «Suppression synchrone» et «Enregistrer les versions précédentes des fichiers supprimés / remplacés». Dans les paramètres sur le côté gauche, j'ai sélectionné "Safe Copy" et "Ne pas créer le dossier _gsdata_", sur le côté droit - "Safe Copy" et "Quick Pre-Analysis by Timestamps". Ainsi, des tâches sont créées pour chaque dossier requis. Disons que j'ai configuré la tâche sur le dossier Info et l'ai nommée «bck_Info».Ensuite, dans le dossier D: \ Sync, le fichier bck_Info.bat est créé avec le contenu suivant: @set dir=%~dp0 @%dir%GoodSync\GoodSync2Go-v10.exe /miniwin /exit sync "%~n0"
Il s'agit du langage de script BAT. Dans la première ligne de code, le chemin actuel du script en cours d'exécution est défini sur la variable. La deuxième ligne démarre le fichier GoodSync2Go-v10.exe à partir du dossier GoodSync le long de ce chemin, dans lequel la tâche doit être exécutée avec le nom du fichier (bck_Info), la fenêtre d'exécution de la tâche est réduite et le programme doit se fermer automatiquement à la fin de la tâche. Je peux copier ce script plusieurs fois, en changeant à chaque fois uniquement son nom en celui d'une tâche précédemment créée dans GoodSync. Ainsi, en cliquant simplement sur le bouton Entrée du fichier BAT, je peux démarrer la synchronisation des dossiers dont j'ai besoin individuellement.Pour ajouter une nouvelle tâche dans FreeFileSync, je pouvais simplement copier le fichier de script xml et le corriger manuellement, c'est-à-dire l'exécution du shell graphique du programme n'était pas du tout nécessaire. Dans GoodSync, toutes les tâches sont enregistrées dans le fichier D: \ Sync \ GoodSync \ GoodSync \ Profile \ jobs.tic et pour ajouter une nouvelle tâche, vous devrez ouvrir le programme et le créer, car la modification de ce fichier est quelque peu problématique et on ne sait pas à quoi cela pourrait conduire.Pour synchroniser tous les dossiers, vous pouvez maintenant écrire un simple script bck_all.bat: @set dir=%~dp0 call %dir%bck_Info.bat call %dir%bck_Info2.bat call %dir%bck_Info3.bat call %dir%bck_Info4.bat
Chaque ligne du script provoque simplement l'exécution d'un script distinct, qui démarre la synchronisation.Tout cela fonctionne très bien et commodément, mais il n'y a pas de contrôle d'erreur pendant la synchronisation. Par exemple, si le serveur n'est pas allumé, toutes les tâches se termineront rapidement et moi, étant revenu après une heure, penserai que la synchronisation est déjà terminée. Dans le même temps, les journaux de toutes les tâches sont créés sur le chemin D: \ Sync \ GoodSync \ GoodSync \ Profile \ *. Log. Il suffit de regarder le journal de chaque synchronisation pour la présence du mot "ERREUR" - pour une raison quelconque, c'est ainsi que les échecs de synchronisation sont signalés dans le journal. Par conséquent, il a été décidé d'écrire un petit programme pour analyser ces journaux après toutes les synchronisations, qui devrait être démarré automatiquement après la synchronisation de tous les dossiers. Le programme a reçu le fier nom log_analayser et est écrit dans le langage de semi-scripting AutoIt . Si quelqu'un est intéressé, téléchargez sa version complèteVous pouvez le faire sur le site officiel d'AutoIt, qui contient les bibliothèques nécessaires, le compilateur et SciTE - un éditeur multiplateforme pour le code à partir duquel vous pouvez compiler le programme.Quel temps j'ai passé à développer et déboguer le code, le résultat a été un fichier log_analayser.au3 avec le contenu suivant: ; LOG Analyser 1.0 ; - #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|LOG Analyser #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|log_analyser.exe #AutoIt3Wrapper_Res_Comment= - #AutoIt3Wrapper_Res_Description= - ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ; ;#NoTrayIcon ; If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, " !"); ; ;WinActivate(' ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ; Local $msg_title = "LOG Analyser 1.0" Local $path = @ScriptDir Local $soft_open_log = "notepad.exe" Local $path, $dir_mode, $word, $file_analyse_name, $file_analyse_ext, $log_path, $log_msg_on Local $file_log, $word_detect, $file_analyse, $cnt_files, $i ; if ($CmdLine[0] < 6) then MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit else if (StringCompare($CmdLine[1], "file") = 0) then $dir_mode = 0 elseif (StringCompare($CmdLine[1], "dir") = 0) then $dir_mode = 1 else MsgBox(0x10, $msg_title, " 'file' 'dir'!" & @CRLF & @CRLF & " ") Exit endif $word = $CmdLine[2] if ($dir_mode = 0) then $file_analyse_name = $CmdLine[3] else $dir_analyse = $CmdLine[3] endif $file_analyse_ext = $CmdLine[4] $log_path = $CmdLine[5] if (StringCompare($CmdLine[6], "err_msg_on") = 0) then $log_msg_on = 1 elseif (StringCompare($CmdLine[6], "err_msg_off") = 0) then $log_msg_on = 0 else MsgBox(0x10, $msg_title, " 'log_msg_on' 'log_msg_off'!" & @CRLF & @CRLF & " ") Exit endif endIf ; $file_log = $log_path & "\" & "log_analyser" & "-" & @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & "-" & @MIN & "-" & @SEC & ".log" $word_detect = 0 ; if ($dir_mode = 0) then $file_analyse = $file_analyse_name & "." & $file_analyse_ext if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif else ; $dir_arr = _FileDirList($dir_analyse, "*."&$file_analyse_ext, 1, 1, 0) ;_ArrayDisplay($dir_arr) ; - if ($dir_arr = 0) then MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit endif $cnt_files = $dir_arr[0] ; $i = 0 While $i <> $cnt_files $i = $i + 1 $file_analyse = $dir_arr[$i] if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif WEnd endif ; if ($word_detect = 1) and ($log_msg_on = 1) then if (MsgBox (0x41034, $msg_title, " !" & @CRLF & " : " & $file_log & @CRLF & @CRLF & " ?")) = 6 then ShellExecuteWait($soft_open_log, $file_log) endif endif Exit ; ; , , Func _file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) Local $file1, $file2, $file_line, $write_once $word_detect = 0 $write_once = 0 $file1 = FileOpen($file_analyse, 0) ; If $file1 = -1 Then FileClose($file1) MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit EndIf ; While 1 $file_line = FileReadLine($file1) If @error = -1 Then ExitLoop if (StringInStr($file_line, $word) <> 0) then $word_detect = 1 ; if (FileExists($file_log) = 0) then $file2 = FileOpen($file_log, 1) FileClose($file2) endif ; if ($write_once = 0) then $write_once = 1 $file2 = FileOpen($file_log, 1) FileWriteLine($file2, " : " & $file_analyse) FileClose($file2) endif ; $file2 = FileOpen($file_log, 1) FileWriteLine($file2, $file_line) FileClose($file2) endif WEnd ; , if ($word_detect = 1) then $file2 = FileOpen($file_log, 1) FileWriteLine($file2, @CRLF) FileClose($file2) endif FileClose($file1) Return $word_detect EndFunc
Après avoir tapé le code, appuyez sur le bouton F7 dans l'éditeur SciTE et obtenez le fichier log_analayser.exe à la sortie.Le programme analyse le fichier pour la présence d'un mot, lorsqu'il est trouvé, un fichier journal est créé, dans lequel la ligne trouvée contenant ce mot est copiée.Le programme peut fonctionner en deux modes:- analyse d'un fichier spécifique- analyse du dossier contenant les fichiers à analyser (tous les sous-dossiers sont également analysés).Lorsque vous effectuez un appel de console, vous devez définir six paramètres pour le programme:1 - mode de fonctionnement [fichier = analyse de fichier; dir = analyse du dossier contenant les fichiers]2 - mot clé de recherche3 - nom du fichier ou chemin complet vers le dossier4 - extension de fichier ou fichiers à analyser dans le dossier5 - le chemin complet vers le dossier où se trouvera le journal du programme;6 - affichage de la fenêtre après analyse de tous les fichiers dans le cas de trouver le mot donné [err_msg_on = display; err_msg_off = ne pas afficher]Ainsi, nous avons obtenu un nouveau script bck_auto.bat: @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir %dir%GoodSync\Profile log %dir%LOG err_msg_on exit
Le script lance un fichier à partir duquel les tâches de synchronisation de tous les dossiers nécessaires sont appelées individuellement les unes après les autres, puis l'analyseur du journal de synchronisation est appelé, après quoi, en cas d'erreur, un message s'affiche vous demandant de regarder les lignes de journal où ces erreurs sont trouvées et vous pouvez comprendre quelle tâche des problèmes sont survenus. Ces lignes sont écrites dans un fichier journal distinct dans le dossier D: \ Sync \ LOG.Et puis j'ai subi un terrible échec. L'analyseur de journaux n'a pas fonctionné. Non, cela fonctionnait très bien sur les fichiers de test, mais ne voulait obstinément pas voir les erreurs dans les journaux. Pendant longtemps, je n'ai pas pu comprendre la raison jusqu'à ce que je découvre une chose terrible: non seulement que dans le journal en anglais, l'échec est affiché par le seul mot russe "ERROR", mais aussi l'encodage de cet alphabet cyrillique est Macintosh! Je ne sais pas pourquoi les programmeurs de Siber Systems ont fait cela; c'est probablement le résultat d'une terrible béquille à l'intérieur du logiciel. Eh bien, qui a dit que la programmation devait être ennuyeuse?Il n'y avait pas d'autre choix que de supporter une béquille avec une autre et, par conséquent, une construction fonctionnelle est apparue: @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit
Cependant, le problème suivant est apparu: GoodSync lui-même ne supprime pas les fichiers journaux, de nouveaux fichiers sont apparus à chaque nouvelle exécution de tâche. Et si une sorte de synchronisation a échoué, notre analyseur trouvera toujours ce fichier et signalera joyeusement l'erreur. Par conséquent, avant de démarrer la synchronisation, il a été décidé de nettoyer automatiquement le dossier D: \ Sync de tous les fichiers journaux. Un élégant script clean_logs.bat a été créé pour cela: @echo off set dir=%~dp0 For /R %dir% %%i in (*.log) Do ( Del /q "%%i") @echo on
Le script désactive la sortie de tous les messages, découvre le répertoire de lancement du script, analyse tous les fichiers (y compris les sous-dossiers) jusqu'à leur fin et supprime tous les fichiers avec l'extension de journal. À la fin du travail, la sortie du message est activée.Le script bck_auto.bat a changé: @echo Start Backup @set dir=%~dp0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit
Tout fonctionne très bien, mais le but est d'automatiser les actions de routine. Pourquoi ne pas simplement éteindre l'ordinateur la nuit et aller dormir, et il synchronisera lui-même un tas de fichiers, analysera et désactivera le chemin?Modifions notre script bck_auto.bat: @echo Start Backup & PCOFF @set dir=%~dp0 start MonitorOnOff.exe 0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_off shutdown /s /t 0 exit
Deux nouvelles lignes sont apparues dans le script. L'application MonitorOnOff éteint simplement le moniteur (afin qu'il n'éclaire pas la pièce, mais qu'il soit éteint manuellement tous les soirs et qu'il s'allume tous les matins est très paresseux), et la commande d'arrêt éteint l'ordinateur. Le paramètre responsable de l'affichage des messages lorsqu'une erreur a été trouvée a changé dans log_analyser, car après la synchronisation, il n'est pas nécessaire de ralentir l'exécution du script par ce message, mais de lui permettre d'éteindre l'ordinateur.MonitorOnOff est également écrit en AutoIt. ; Monitor On Off 1.0 ; / #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Monitor On Off #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|MonitorOnOff.exe #AutoIt3Wrapper_Res_Comment= / #AutoIt3Wrapper_Res_Description= / ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ; ;#NoTrayIcon ; If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, " !"); ; ;WinActivate(' ') Exit EndIf AutoItWinSetTitle(@ScriptName) HotKeySet("{F10}", "_Monitor_ON") HotKeySet("{F11}", "_Monitor_OFF") HotKeySet("{Esc}", "_Quit") Global Const $lciWM_SYSCommand = 274 Global Const $lciSC_MonitorPower = 61808 Global Const $lciPower_Off = 2 Global Const $lciPower_On = -1 Global $MonitorIsOff = False if ($CmdLine[0] <> 0) then _Monitor_OFF() endif While 1 Sleep(10) WEnd Func _Monitor_ON() $MonitorIsOff = False Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_On) EndFunc Func _Monitor_OFF() $MonitorIsOff = True Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') While $MonitorIsOff = True DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_Off) _IdleWaitCommit(0) Sleep(20) WEnd EndFunc Func _IdleWaitCommit($idlesec) Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword") DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo)) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Do $iSave = DllStructGetData ($LastInputInfo, 2) Sleep(60) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False Return DllStructGetData ($LastInputInfo, 2)-$iSave EndFunc Func _Quit() _Monitor_ON() Exit EndFunc
Le programme lancé est contrôlé par trois touches: F10 allume le moniteur, F11 - s'éteint et le bouton ESC termine le programme et le décharge de la mémoire. Si vous spécifiez un paramètre lors du démarrage du programme, le programme en cours éteint immédiatement l'écran.Maintenant, tout allait bien - avant d'aller me coucher, j'ai juste couru bck_all.bat, au lieu de "Éteindre l'ordinateur" et je me suis couché. Le moniteur n'a pas éclairé toute la pièce, la synchronisation a été effectuée automatiquement et son succès a été automatiquement analysé. Le matin, il suffisait de regarder le contenu du dossier D: \ Sync \ GoodSync \ LOG \ pour au moins certains fichiers. Mais ce n'est pas le cas non plus - pourquoi perdre du temps si tout va bien? Je dois créer un journal d'analyseur de journal d'analyseur de journal et le suspendre au démarrage du système afin qu'il fonctionne le lendemain lorsque l'ordinateur démarre et n'inquiète mon attention qu'en cas d'échec de la synchronisation. C'est ainsi qu'est né le programme check_file_exist. ; Check File Exist 1.0 ; #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Check File Exist #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|check_file_exist.exe #AutoIt3Wrapper_Res_Comment= #AutoIt3Wrapper_Res_Description= ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ; ;#NoTrayIcon ; If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, " !"); ; ;WinActivate(' ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ; Local $msg_title = "Check File Exist 1.0" Local $path = @ScriptDir Local $soft_open_dir = "explorer.exe" Local $path, $dir_analyse, $words, $msg_open ; if ($CmdLine[0] < 5) then MsgBox(0x10, $msg_title, " !" & @CRLF & @CRLF & " ") Exit else $dir_analyse = $CmdLine[1] $file = $CmdLine[2] $words0 = $CmdLine[3] $words1 = $CmdLine[4] if (StringCompare($CmdLine[5], "msg_on") = 0) then $msg_open = 1 elseif (StringCompare($CmdLine[5], "msg_off") = 0) then $msg_open = 0 else MsgBox(0x10, $msg_title, " 'msg_on' 'msg_off'!" & @CRLF & @CRLF & " ") Exit endif endIf ; $dir_arr = _FileDirList($dir_analyse, "*"&$file&"*", 1, 0, 0) ;_ArrayDisplay($dir_arr) ; if ($dir_arr = 0) then if (StringCompare($words0, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words0) else if (MsgBox(0x41034, $msg_title, $words0 & @CRLF & @CRLF & " ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif else if (StringCompare($words1, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words1) else if (MsgBox(0x41034, $msg_title, $words1 & @CRLF & @CRLF & " ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif endif Exit
Essentiellement, ce programme est une fonctionnalité log_analyser légèrement tronquée. Le programme analyse le dossier spécifié (à l'exclusion des sous-dossiers) pour les fichiers et les noms qui correspondent au moins partiellement au mot de recherche spécifié et affiche un message sur le résultat de l'analyse.Paramètres du programme:1 - le chemin d'accès complet au dossier (sans le caractère barre oblique - /)2 - le mot clé pour rechercher dans les noms de fichier, ou le nom de fichier complet3 - chaîne de texte affichée lorsque le fichier n'est pas trouvé, si = 0 - n'affiche pas le message4 - texte la ligne affichée lorsque le fichier est trouvé, si = 0 - n'affiche pas de message5 - sortie de message: msg_off - seul un message sur la présence / absence de fichiers est affiché, msg_on - dans la fenêtre affichée il est également proposé d'ouvrir le dossier dans lequel les fichiers sont détectés ou non.Maintenant, pour ce programme j'ai créé le script Check_LOG_from_log_analyser.bat, le lien dont j'ai placé à l'habituel Démarrage de Windows: @set dir=%~dp0LOG start check_file_exist.exe %dir% .log 0 " !" msg_on exit
Ainsi, au final, nous avons obtenu une solution complètement autonome qui ne dépend pas de l'emplacement du dossier Sync et fonctionnera correctement de n'importe où sur notre ordinateur. La solution est non seulement réalisable, mais également stable - sous Windows 7 x64, cet ensemble de scripts a fonctionné pendant un an et il n'y a eu absolument aucun problème.Peut-être que maintenant tout cela semble quelque peu monstrueux, mais cela n'a rien de compliqué. Si vous regardez attentivement le code AutoIt, la construction de base est les boucles si-alors-sinon-fin habituelles du même type pour n'importe quel langage de programmation, dans lesquelles certains opérateurs et fonctions AutoIt répétitifs sont appris, qui sont appris littéralement en quelques soirées. Le langage de script BAT ne peut même pas être enseigné, car la plupart des solutions sont standard et ont longtemps été décrites sur Internet. Pouvoir utiliser la programmation est non seulement intéressant, mais peut être très utile.Ode au code de Dark Dragon
Postface
Pour être honnête, je suppose, mais je ne m'attendais pas à un tel volume d'articles, que j'ai dû passer jusqu'à cinquante heures. En règle générale, l'installation de votre cloud sur Internet est réduite à des dictons comme: "Oui, vous devez y exécuter plusieurs commandes." C'est vrai - l'installation est banale. Lorsque vous savez quelles commandes entrer dans la console et ce qu'elles signifient. Lorsque vous comprenez l'essence du routage sur le réseau. Lorsque vous disposez déjà d'un serveur fonctionnel et que vous comprenez comment y ajouter un hôte. Lorsque vous savez comment créer un site. Autrement dit, pour appliquer ces plusieurs commandes, vous devez avoir une certaine quantité de connaissances et d'expérience. Le but de ces trois articles est de tenter de créer de tels bagages en collectant les informations suffisantes nécessaires en un seul endroit et en expliquant comment les utiliser correctement. J'espère sincèrementque cette série d'articles aidera quelqu'un à faire ses premiers pas conscients dans le monde du logiciel libre.
Revenez au début, à la table des matières .
L'histoire de la création d'un cloud domestique. Partie 3. Création d'un cloud personnel - installation et configuration de Nextcloud.Version textuelle: 1.2.1.Date de première publication: 02/08/2018.Dernière modification: 15/01/2020.Journal de mise à jour1.2.1 [15-01-2020]
Mise à jour de la table des matières.
1.2.0 [08-02-2018]
Correction du texte.
1.1.0 [08-02-2018]
Correction du texte.
1.0.0 [08-02-2018]
La première version.
Il décrit l'installation et la configuration de Nextcloud 11.0.2 dans la machine virtuelle VMWare, la configuration de l'environnement réseau VMWare et met en évidence certains des points de configuration qui sont apparus lors du fonctionnement de Nextcloud.
Informations pour l'administration de la ressource (bug suspect)- (, code blockquote)
:
[Definition]
failregex={«reqId»:".*",«remoteAddr»:".*",«app»:«core»,«message»:«Login failed: '.*' \(Remote IP: ''\)»,«level»:2,«time»:".*"}
ignoreregex =
! , .. . (/) — . :
—
—
— , « Nextcloud» , ,
— ,