{"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\/sv\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2014 ett decentraliserat filsystem","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2014 ett decentraliserat filsystem\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Innan jag b\u00f6rjar, beh\u00f6ver jag l\u00e4mna <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">en l\u00e4nk till den tidigare artikeln<\/a><\/noindex>, s\u00e5 att det \u00e4r klart vad det handlar om.<\/p>\n<p><\/p>\n<p>I den h\u00e4r artikeln skulle jag vilja g\u00e5 igenom lagret som ansvarar f\u00f6r fillagring och hur detta kan anv\u00e4ndas av vem som helst. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle \u2014 ett frist\u00e5ende bibliotek<\/a><\/noindex>, utan n\u00e5gon direkt koppling till musik. Man kan organisera lagring av alla typer av filer.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e &quot;\u043d\u0430\u043a\u0430\u0442\u0438\u043b \u0431\u043e\u0447\u043a\u0443&quot; \u043d\u0430 <strong>ipfs<\/strong>, men det skedde faktiskt i kontexten av den uppgift jag sysslade med. Generellt anser jag att detta projekt \u00e4r fantastiskt. Jag gillar bara mer m\u00f6jligheten att skapa olika n\u00e4tverk f\u00f6r olika uppgifter. Det g\u00f6r det m\u00f6jligt att b\u00e4ttre organisera strukturen och minska belastningen p\u00e5 enskilda noder och n\u00e4tverket som helhet. Man kan till och med inom ett specifikt projekt, vid behov, dela upp n\u00e4tverket i segment baserat p\u00e5 vissa kriterier f\u00f6r att minska den totala belastningen.<\/p>\n<p><\/p>\n<p>S\u00e5, storacle anv\u00e4nder mekanismen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> f\u00f6r att organisera n\u00e4tverket. Huvudfunktionerna \u00e4r:<\/p>\n<p><\/p>\n<ul>\n<li>Filer kan l\u00e4ggas till lagret via vilken nod som helst.<\/li>\n<li>Filer sparas i sin helhet, inte i block.<\/li>\n<li>Varje fil har sin egen unika hash baserat p\u00e5 inneh\u00e5llet f\u00f6r framtida arbete med den.<\/li>\n<li>Filer kan dupliceras f\u00f6r h\u00f6gre tillf\u00f6rlitlighet<\/li>\n<li>Antalet filer p\u00e5 en nod begr\u00e4nsas endast av filsystemet (det finns ett undantag, som n\u00e4mns l\u00e4ngre ner)<\/li>\n<li>Antalet filer i n\u00e4tverket begr\u00e4nsas av spridbarhet utifr\u00e5n antalet till\u00e5tna noder i n\u00e4tverket, som i den andra versionen kommer att g\u00f6ra det m\u00f6jligt att arbeta med ett o\u00e4ndligt antal noder (om detta i en annan artikel)<\/li>\n<\/ul>\n<p><\/p>\n<p>Ett enkelt exempel p\u00e5 hur detta fungerar fr\u00e5n programmet:<\/p>\n<p><\/p>\n<p>Servern:<\/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  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p>Klient:<\/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  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>En inblick inifr\u00e5n<\/strong><\/p>\n<p><\/p>\n<p>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0432\u0435\u0440\u0445\u044a\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u043c \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 in-memory \u0431\u0430\u0437\u0435 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0447\u0430\u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435\u0442. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u0430 \u0446\u0438\u0440\u043a\u0443\u043b\u044f\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0430 \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432(&gt; \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u043a\u0430\u0436\u0435\u043c) \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u043c. \u0418 \u043b\u0443\u0447\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0437\u043b\u043e\u0432. \u0415\u0441\u043b\u0438 &quot;\u0447\u0438\u0441\u0442\u0438\u043b\u044c\u0449\u0438\u043a&quot; \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d, \u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435\u0442.<\/p>\n<p><\/p>\n<p>The file storage consists of 256 folders with 2 levels of nesting. Files are stored in the second-level folders. Therefore, with 1 million files, there will be about 62500 files in each folder (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>The names of the folders are generated from the file hash to enable quick access when the hash is known.<\/p>\n<p><\/p>\n<p>This structure was chosen based on a wide range of requirements for the storage: support for weak file systems where it\u2019s undesirable to have many files in one folder, quick traversal of all folders when necessary, etc. It's a sort of golden mean.<\/p>\n<p><\/p>\n<p><strong>Caching<\/strong><\/p>\n<p><\/p>\n<p>When files are added or retrieved, links to the files are cached.<br \/>\nThanks to this, there is often no need to traverse the entire network in search of a file. This speeds up link retrieval and reduces network load. Caching also occurs through HTTP headers.<\/p>\n<p><\/p>\n<p><strong>Isomorphism<\/strong><\/p>\n<p><\/p>\n<p>The client is written in JavaScript and isomorphic, meaning it can be used directly from the browser.\u00a0<br \/>\nYou can upload a file <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> as a script and gain access to <strong>window.ClientStoracle <\/strong>or import through a build system, etc.<\/p>\n<p><\/p>\n<p><strong>Deferred links<\/strong><\/p>\n<p><\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0444\u0438\u0447\u0435\u0439 \u0442\u0430\u043a\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f &quot;\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430&quot;. \u042d\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441, \u0430 \u0444\u0430\u0439\u043b \u043f\u043e\u0434\u0442\u044f\u043d\u0435\u0442\u0441\u044f \u043a\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 src \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u0438 \u0432\u0441\u0435. \u041a\u0435\u0439\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e.<\/p>\n<p><\/p>\n<p><strong>Client API<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 storing a file<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 obtaining a direct link to a file<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 f\u00e5 en lista \u00f6ver direkta l\u00e4nkar till filen fr\u00e5n alla noder d\u00e4r den finns<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 h\u00e4mta filen till en buffert<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 h\u00e4mta filen till filsystemet<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 h\u00e4mta filen som blob (f\u00f6r webbl\u00e4sarversionen)<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 ta bort filen<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 skapa en uppskjuten l\u00e4nk<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Exportera filer till en annan server<\/strong><\/p>\n<p><\/p>\n<p>F\u00f6r att \u00f6verf\u00f6ra filer till en annan nod kan du:<\/p>\n<p><\/p>\n<ul>\n<li>Enkelt kopiera hela lagringsmappen med inst\u00e4llningarna (detta kanske inte fungerar i framtiden)<\/li>\n<li>Kopiera endast mappen med filer. Men i s\u00e5 fall m\u00e5ste du en g\u00e5ng k\u00f6ra funktionen <strong>node.normalizeFilesInfo()<\/strong>, f\u00f6r att r\u00e4kna om alla data och lagra dem i databasen.<\/li>\n<li>Anv\u00e4nda funktionen <strong>node.exportFiles()<\/strong>, som p\u00e5b\u00f6rjar kopieringen av filer.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Huvudinst\u00e4llningar f\u00f6r noden<\/strong><br \/>\nN\u00e4r man startar lagringsnoden kan man ange alla n\u00f6dv\u00e4ndiga inst\u00e4llningar.<br \/>\nJag kommer att beskriva de mest grundl\u00e4ggande, resten kan hittas p\u00e5 GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 storleken p\u00e5 mappen med filer<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 storleken p\u00e5 tempor\u00e4rmappen<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 minimala lagringsstorlek som m\u00e5ste uppr\u00e4tth\u00e5llas. Om denna parameter anges, kommer de minst anv\u00e4nda filerna att tas bort s\u00e5 snart utrymmet b\u00f6rjar ta slut.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 maximal filstorlek<\/li>\n<li><strong>file.minSize<\/strong> \u2014 minimal filstorlek<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 \u00f6nskat antal dubbletter av filen i n\u00e4tverket<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 till\u00e5tna filtyper<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 otill\u00e5tna filtyper<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 till\u00e5tna fil\u00e4ndelser<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 otill\u00e5tna fil\u00e4ndelser<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 olika inst\u00e4llningar f\u00f6r l\u00e4nkcache<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4stan alla parametrar relaterade till storlekar kan anges b\u00e5de i absoluta och relativa enheter.<\/p>\n<p><\/p>\n<p><strong>Arbeta via kommandoraden<\/strong><br \/>\nBiblioteket kan anv\u00e4ndas via kommandoraden. F\u00f6r detta m\u00e5ste du installera det globalt: <strong>npm i -g storacle<\/strong>. Efter detta kan du k\u00f6ra de n\u00f6dv\u00e4ndiga \u00e5tg\u00e4rderna fr\u00e5n katalogen med projektet d\u00e4r noden finns. Till exempel, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, f\u00f6r att l\u00e4gga till en fil. Alla \u00e5tg\u00e4rder kan hittas i <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>Varf\u00f6r du kan beh\u00f6va detta<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Om du vill skapa ett decentraliserat projekt d\u00e4r du planerar att lagra och arbeta med filer p\u00e5 bekv\u00e4ma s\u00e4tt. Till exempel, projektet med musik som beskrivs i l\u00e4nken i b\u00f6rjan av artikeln, anv\u00e4nder <strong>storacle<\/strong>.<\/li>\n<li>Om du arbetar med andra projekt d\u00e4r du beh\u00f6ver lagra filer distribuerat. D\u00e5 kan du enkelt bygga ditt privata n\u00e4tverk, flexibelt konfigurera noder och l\u00e4gga till nya n\u00e4r det beh\u00f6vs.<\/li>\n<li>Om du bara beh\u00f6ver lagra filer f\u00f6r din webbplats och inte vill skriva allting sj\u00e4lv. Kanske passar detta bibliotek b\u00e4ttre \u00e4n andra i ditt fall.<\/li>\n<li>Om du har ett projekt d\u00e4r du arbetar med filer, men vill g\u00f6ra alla manipulationer fr\u00e5n webbl\u00e4saren. Du kan undvika att skriva serverkod.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mina kontaktuppgifter:<\/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>K\u00e4lla: <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.4 - 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\/sv\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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 ett decentraliserat fil-lagringssystem | ProHoster","description":"Innan jag b\u00f6rjar, m\u00e5ste jag l\u00e4mna.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/80224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}