{"id":80224,"date":"2020-05-04T13:42:20","date_gmt":"2020-05-04T11:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov"},"modified":"2020-05-04T13:42:20","modified_gmt":"2020-05-04T11:42:20","slug":"storacle-deczentralizovannoe-hranilishhe-fajlov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2014 stockage de fichiers d\u00e9centralis\u00e9","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2014 stockage de fichiers d\u00e9centralis\u00e9\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Avant de commencer, je dois laisser <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">un lien vers l'article pr\u00e9c\u00e9dent<\/a><\/noindex>, afin que vous compreniez de quoi il s'agit.<\/p>\n<p><\/p>\n<p>Dans cet article, je voudrais examiner le niveau qui est responsable du stockage des fichiers, et comment cela peut \u00eatre utilis\u00e9 par n'importe qui. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle est une biblioth\u00e8que autonome<\/a><\/noindex>, il n'y a pas de lien direct avec la musique. Vous pouvez organiser le stockage de tout type de fichiers.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Dans l'article pr\u00e9c\u00e9dent, j'ai un peu \"critiqu\u00e9\" <strong>ipfs<\/strong>, mais cela s'est fait justement dans le contexte du probl\u00e8me que je r\u00e9solvais. Dans l'ensemble, je trouve ce projet formidable. J'appr\u00e9cie simplement plus la possibilit\u00e9 de cr\u00e9er diff\u00e9rentes r\u00e9seaux pour diff\u00e9rentes t\u00e2ches. Cela permet de mieux organiser la structure et de r\u00e9duire la charge sur les n\u0153uds individuels et le r\u00e9seau dans son ensemble. M\u00eame dans le cadre d'un projet, si n\u00e9cessaire, on peut diviser le r\u00e9seau en morceaux selon certains crit\u00e8res, r\u00e9duisant ainsi la charge globale.<\/p>\n<p><\/p>\n<p>Ainsi, storacle utilise le m\u00e9canisme <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> pour organiser le r\u00e9seau. Les principales caract\u00e9ristiques :<\/p>\n<p><\/p>\n<ul>\n<li>Les fichiers peuvent \u00eatre ajout\u00e9s au stockage via n'importe quel n\u0153ud.<\/li>\n<li>Les fichiers sont sauvegard\u00e9s dans leur int\u00e9gralit\u00e9, pas par blocs.<\/li>\n<li>Chaque fichier a son propre hachage unique bas\u00e9 sur son contenu pour un travail ult\u00e9rieur.<\/li>\n<li>Les fichiers peuvent \u00eatre dupliqu\u00e9s pour plus de fiabilit\u00e9.<\/li>\n<li>Le nombre de fichiers sur un n\u0153ud est limit\u00e9 uniquement par le syst\u00e8me de fichiers (il y a une exception, qui sera mentionn\u00e9e plus bas).<\/li>\n<li>Le nombre de fichiers dans le r\u00e9seau est limit\u00e9 par les capacit\u00e9s de spreadable quant au nombre de n\u0153uds autoris\u00e9s dans le r\u00e9seau, qui, dans la deuxi\u00e8me version, pourront permettre de travailler avec un nombre infini de n\u0153uds (de cela, dans un autre article).<\/li>\n<\/ul>\n<p><\/p>\n<p>Un exemple simple de la fa\u00e7on dont cela fonctionne dans le programme :<\/p>\n<p><\/p>\n<p>Serveur :<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const  Node = require('storacle').Node;\n\n(async () =&gt; {\n  try {\n    const node = new Node({\n      port: 4000,\n      hostname: 'localhost'\n    });\n    await node.init();\n  } catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p>Client :<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const  Client = require('storacle').Client;\n\n(async () =&gt; {\n  try {\n    const client = new  Client({\n      address: 'localhost:4000'\n    });\n    await client.init();\n    const hash = await client.storeFile('.\/my-file');\n    const link = await client.getFileLink(hash); \n    await client.removeFile(hash);\n  } catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>Un regard \u00e0 l'int\u00e9rieur<\/strong><\/p>\n<p><\/p>\n<p>Sous le capot, rien de surnaturel. Les informations sur le nombre de fichiers, leur taille totale et d'autres \u00e9l\u00e9ments sont stock\u00e9es dans une base in-memory et mises \u00e0 jour lors de la suppression et de l'ajout de fichiers, donc il n'est pas n\u00e9cessaire de se r\u00e9f\u00e9rer souvent au syst\u00e8me de fichiers. L'exception est l'activation du ramasse-miettes, lorsque la circulation des fichiers est n\u00e9cessaire lorsqu'une certaine taille de stockage est atteinte, et non l'interdiction d'ajouter de nouveaux fichiers. Dans ce cas, il faut parcourir le stockage, et travailler avec un grand nombre de fichiers (&gt; un million, disons) peut entra\u00eener des charges importantes. Il vaut mieux stocker moins de fichiers et ex\u00e9cuter plus de n\u0153uds. Si le \"nettoyeur\" est d\u00e9sactiv\u00e9, il n'y a pas ce probl\u00e8me.<\/p>\n<p><\/p>\n<p>Le stockage de fichiers se compose de 256 dossiers et de 2 niveaux de profondeur. Les fichiers sont stock\u00e9s dans les dossiers du deuxi\u00e8me niveau. Ainsi, en cas de pr\u00e9sence de 1 million de fichiers dans chaque dossier, il y aurait environ 62500 fichiers (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>Les noms des dossiers sont form\u00e9s \u00e0 partir du hachage du fichier, permettant d'y acc\u00e9der rapidement en connaissant le hachage.<\/p>\n<p><\/p>\n<p>Cette structure a \u00e9t\u00e9 choisie en raison de nombreux besoins diff\u00e9rents en mati\u00e8re de stockage : support des syst\u00e8mes de fichiers faibles, o\u00f9 il n'est pas souhaitable d'avoir de nombreux fichiers dans un seul dossier, parcours rapide de tous les dossiers si n\u00e9cessaire, etc. Une sorte de juste milieu.<\/p>\n<p><\/p>\n<p><strong>Mise en cache<\/strong><\/p>\n<p><\/p>\n<p>Lors de l'ajout de fichiers, ainsi que lors de leur r\u00e9cup\u00e9ration, des liens vers les fichiers sont enregistr\u00e9s dans le cache.<br \/>\nGr\u00e2ce \u00e0 cela, il est souvent inutile de parcourir tout le r\u00e9seau \u00e0 la recherche d'un fichier. Cela acc\u00e9l\u00e8re l'obtention des liens et r\u00e9duit la charge du r\u00e9seau. La mise en cache se fait \u00e9galement via les en-t\u00eates http.<\/p>\n<p><\/p>\n<p><strong>Isomorphisme<\/strong><\/p>\n<p><\/p>\n<p>Le client est \u00e9crit en JavaScript et est isomorphe, il peut \u00eatre utilis\u00e9 directement depuis le navigateur.\u00a0<br \/>\nVous pouvez t\u00e9l\u00e9charger un fichier <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js<\/a><\/noindex> en tant que script et acc\u00e9der \u00e0 <strong>window.ClientStoracle <\/strong>ou l'importer via un syst\u00e8me de construction, etc.<\/p>\n<p><\/p>\n<p><strong>Liens diff\u00e9r\u00e9s<\/strong><\/p>\n<p><\/p>\n<p>Une caract\u00e9ristique int\u00e9ressante est aussi le \"lien diff\u00e9r\u00e9\". C'est un lien vers un fichier que l'on peut obtenir de mani\u00e8re synchrone, ici et maintenant, et le fichier sera tir\u00e9 lorsqu'il sera trouv\u00e9 dans le stockage. C'est tr\u00e8s pratique, par exemple, lorsqu'il faut afficher certaines images sur le site. Il suffit de mettre le lien diff\u00e9r\u00e9 dans le src et c'est tout. On peut imaginer de nombreux cas.<\/p>\n<p><\/p>\n<p><strong>API client<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 sauvegarde d'un fichier<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 r\u00e9cup\u00e9ration d'un lien direct vers le fichier<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 obtenir une liste de liens directs vers le fichier depuis tous les n\u0153uds o\u00f9 il existe<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 obtenir le fichier dans un tampon<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 obtenir le fichier dans le syst\u00e8me de fichiers<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 obtenir le fichier au format blob (pour la version navigateur)<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 supprimer le fichier<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 cr\u00e9er un lien diff\u00e9r\u00e9<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Exporter des fichiers vers un autre serveur<\/strong><\/p>\n<p><\/p>\n<p>Pour transf\u00e9rer des fichiers vers un autre n\u0153ud, vous pouvez :<\/p>\n<p><\/p>\n<ul>\n<li>Copier simplement tout le dossier de stockage avec les param\u00e8tres (cela peut ne pas fonctionner \u00e0 l'avenir)<\/li>\n<li>Copier uniquement le dossier contenant les fichiers. Dans ce cas, il faudra ex\u00e9cuter une fois la fonction <strong>node.normalizeFilesInfo()<\/strong>, pour recalculer toutes les donn\u00e9es et les enregistrer dans la base.<\/li>\n<li>Utiliser la fonction <strong>node.exportFiles()<\/strong>, qui commencera \u00e0 copier les fichiers.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Param\u00e8tres principaux du n\u0153ud<\/strong><br \/>\nLors du d\u00e9marrage du n\u0153ud de stockage, vous pouvez sp\u00e9cifier tous les param\u00e8tres n\u00e9cessaires.<br \/>\nJe vais d\u00e9crire les plus importants, le reste peut \u00eatre trouv\u00e9 sur GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 la taille du dossier contenant les fichiers<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 la taille du dossier temporaire<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 la taille minimale de stockage \u00e0 conserver. Si ce param\u00e8tre est sp\u00e9cifi\u00e9, d\u00e8s que l'espace commence \u00e0 manquer, les fichiers les moins utilis\u00e9s seront supprim\u00e9s.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 la taille maximale du fichier<\/li>\n<li><strong>file.minSize<\/strong> \u2014 la taille minimale du fichier<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 le nombre de duplicata de fichier pr\u00e9f\u00e9r\u00e9 dans le r\u00e9seau<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 types de fichiers autoris\u00e9s<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 types de fichiers interdits<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 extensions de fichiers autoris\u00e9es<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 extensions de fichiers interdites<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 diff\u00e9rents param\u00e8tres de mise en cache des liens<\/li>\n<\/ul>\n<p><\/p>\n<p>Presque tous les param\u00e8tres li\u00e9s aux tailles peuvent \u00eatre sp\u00e9cifi\u00e9s en valeurs absolues et relatives.<\/p>\n<p><\/p>\n<p><strong>Fonctionnement via la ligne de commande<\/strong><br \/>\nLa biblioth\u00e8que peut \u00eatre utilis\u00e9e via la ligne de commande. Pour cela, il faut l'installer globalement : <strong>npm i -g storacle<\/strong>. Apr\u00e8s cela, vous pouvez ex\u00e9cuter les actions n\u00e9cessaires depuis le r\u00e9pertoire avec le projet, o\u00f9 se trouve le n\u0153ud. Par exemple, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, pour ajouter un fichier. Toutes les actions peuvent \u00eatre trouv\u00e9es dans <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js<\/a><\/noindex><\/p>\n<p><\/p>\n<p><strong>Pourquoi en aurait-il besoin<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Si vous souhaitez cr\u00e9er un projet d\u00e9centralis\u00e9 dans lequel il est pr\u00e9vu de stocker et de travailler avec des fichiers de mani\u00e8re pratique. Par exemple, le projet de musique d\u00e9crit dans le lien au d\u00e9but de l'article utilise <strong>storacle<\/strong>.<\/li>\n<li>Si vous travaillez sur d'autres projets n\u00e9cessitant un stockage de fichiers d\u00e9centralis\u00e9, vous pouvez facilement cr\u00e9er votre propre r\u00e9seau priv\u00e9, configurer des n\u0153uds de mani\u00e8re flexible et en ajouter de nouveaux lorsque n\u00e9cessaire.<\/li>\n<li>Si vous avez simplement besoin d'un endroit pour stocker les fichiers de votre site et que vous ne voulez pas vous fatiguer \u00e0 tout \u00e9crire vous-m\u00eame, cette biblioth\u00e8que pourrait \u00eatre plus adapt\u00e9e que d'autres dans votre cas.<\/li>\n<li>Si vous avez un projet o\u00f9 vous travaillez avec des fichiers mais souhaitez effectuer toutes les manipulations depuis le navigateur, vous pouvez \u00e9viter d'\u00e9crire du code serveur.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mes contacts :<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ortex\">@ortex<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"mailto:mywebstreet@gmail.com\">mywebstreet@gmail.com<\/a><\/noindex><\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/499954\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80225,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Storacle \u2014 un stockage de fichiers d\u00e9centralis\u00e9 | ProHoster","description":"Avant de commencer, je dois laisser.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-04T11:42:20+00:00","article:modified_time":"2020-05-04T11:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80224","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-09-27 20:25:26","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/80224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}