{"id":86904,"date":"2020-07-01T07:42:30","date_gmt":"2020-07-01T05:42:30","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud"},"modified":"2020-07-01T07:42:30","modified_gmt":"2020-07-01T05:42:30","slug":"kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","title":{"rendered":"Jak GitLab pom\u00e1h\u00e1 vytv\u00e1\u0159et z\u00e1lohy velk\u00fdch \u00falo\u017ei\u0161\u0165 NextCloud","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ahoj, Habr!<\/p>\n<p><\/p>\n<p>Dnes bych cht\u011bl hovo\u0159it o na\u0161ich zku\u0161enostech s automatizac\u00ed z\u00e1lohov\u00e1n\u00ed velk\u00fdch datov\u00fdch \u00falo\u017ei\u0161\u0165 Nextcloud v r\u016fzn\u00fdch konfigurac\u00edch. Pracuje jako CTO ve spole\u010dnosti \u201eMolyne AK\u201c, kde se zab\u00fdv\u00e1me konfigura\u010dn\u00edm \u0159\u00edzen\u00edm IT syst\u00e9m\u016f, pro ukl\u00e1d\u00e1n\u00ed dat pou\u017e\u00edv\u00e1me Nextcloud. To zahrnuje tak\u00e9 distribuovanou strukturu s replikac\u00ed.<\/p>\n<p><\/p>\n<p>Probl\u00e9my vypl\u00fdvaj\u00edc\u00ed z charakteristik instalac\u00ed spo\u010d\u00edvaj\u00ed v tom, \u017ee dat je mnoho. Verziov\u00e1n\u00ed, kter\u00e9 poskytuje Nextcloud, z\u00e1lohov\u00e1n\u00ed, subjektivn\u00ed d\u016fvody a dal\u0161\u00ed vytv\u00e1\u0159ej\u00ed mnoho duplicit.<\/p>\n<p><\/p>\n<h2 id=\"predystoriya\">Pozad\u00ed<\/h2>\n<p><\/p>\n<p>P\u0159i administraci Nextcloudu se akutn\u011b objevuje probl\u00e9m organizace efektivn\u00ed z\u00e1lohy, kterou je nutn\u00e9 \u0161ifrovat, proto\u017ee data jsou cenn\u00e1.<\/p>\n<p><\/p>\n<p>Nab\u00edz\u00edme mo\u017enosti ukl\u00e1d\u00e1n\u00ed z\u00e1loh u n\u00e1s nebo u z\u00e1kazn\u00edka na jeho samostatn\u00fdch stroj\u00edch mimo Nextcloud, co\u017e vy\u017eaduje flexibiln\u00ed automatizovan\u00fd p\u0159\u00edstup k administraci.<\/p>\n<p><\/p>\n<p>Klient\u016f je mnoho, v\u0161ichni maj\u00ed r\u016fzn\u00e9 konfigurace a jsou na sv\u00fdch platform\u00e1ch s vlastn\u00edmi specifiky. Standardn\u00ed metodika, kdy cel\u00e1 platforma pat\u0159\u00ed v\u00e1m, a z\u00e1lohy se prov\u00e1d\u011bj\u00ed z cron zar\u00edzen\u00ed, zde \u0161patn\u011b funguje.<\/p>\n<p><\/p>\n<p>Nejprve se pod\u00edvejme na vstupn\u00ed data. Pot\u0159ebujeme:<\/p>\n<p><\/p>\n<ul>\n<li>\u0160k\u00e1lovatelnost v ot\u00e1zce jedn\u00e9 nebo v\u00edce uzl\u016f. Pro velk\u00e9 instalace pou\u017e\u00edv\u00e1me jako \u00falo\u017ei\u0161t\u011b minio.<\/li>\n<li>Zji\u0161\u0165ovat probl\u00e9my p\u0159i prov\u00e1d\u011bn\u00ed z\u00e1lohy.<\/li>\n<li>Mus\u00edme uchov\u00e1vat z\u00e1lohy u klient\u016f a\/nebo u n\u00e1s.<\/li>\n<li>Rychle a snadno se vypo\u0159\u00e1dat s probl\u00e9my.<\/li>\n<li>Klienti a instalace se velmi li\u0161\u00ed jeden od druh\u00e9ho \u2014 dos\u00e1hnout jednotnosti se neda\u0159\u00ed.<\/li>\n<li>Rychlost obnoven\u00ed by m\u011bla b\u00fdt minim\u00e1ln\u00ed ve dvou sc\u00e9n\u00e1\u0159\u00edch: \u00fapln\u00e9 obnoven\u00ed (katastrofa), jedna slo\u017eka \u2014 omylem smaz\u00e1na.<\/li>\n<li>Funkce deduplikace je povinn\u00e1.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Jak GitLab pom\u00e1h\u00e1 vytv\u00e1\u0159et z\u00e1lohy velk\u00fdch \u00falo\u017ei\u0161\u0165 NextCloud\" src=\"\/wp-content\/uploads\/2020\/07\/1a0048e3295fef94ddca28e50612e3cb.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pro \u0159e\u0161en\u00ed \u00fakolu spr\u00e1vy z\u00e1loh jsme p\u0159ipojili GitLab. Podrobn\u011bji n\u00ed\u017ee. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Bezpochyby nejsme prvn\u00ed, kdo \u0159e\u0161\u00ed podobn\u00fd probl\u00e9m, ale domn\u00edv\u00e1me se, \u017ee na\u0161e praktick\u00e9, tvrd\u011b z\u00edskan\u00e9 zku\u0161enosti by mohly b\u00fdt zaj\u00edmav\u00e9 a jsme p\u0159ipraveni se o n\u011b pod\u011blit.<\/p>\n<p><\/p>\n<p>Proto\u017ee v na\u0161\u00ed spole\u010dnosti plat\u00ed politika opensource, hledali jsme \u0159e\u0161en\u00ed s otev\u0159en\u00fdm zdrojov\u00fdm k\u00f3dem. Na opl\u00e1tku sd\u00edl\u00edme na\u0161e v\u00fdvojov\u00e9 projekty a zve\u0159ej\u0148ujeme je. Nap\u0159\u00edklad na GitHubu je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/nextcloud-safe-trash\">n\u00e1\u0161 plugin pro Nextcloud<\/a><\/noindex>, kter\u00fd instalujeme klient\u016fm a posiluje ochranu dat v p\u0159\u00edpad\u011b n\u00e1hodn\u00e9ho nebo \u00famysln\u00e9ho smaz\u00e1n\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"sredstva-bekapirovaniya\">Z\u00e1lohovac\u00ed n\u00e1stroje<\/h2>\n<p><\/p>\n<p>Hled\u00e1n\u00ed metod \u0159e\u0161en\u00ed jsme za\u010dali v\u00fdb\u011brem n\u00e1stroje pro z\u00e1lohov\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>Obvykl\u00fd tar + gzip funguje \u0161patn\u011b \u2013 data se duplicuj\u00ed. Inkrement \u010dasto obsahuje velmi m\u00e1lo zm\u011bn v re\u00e1lu, a v\u011bt\u0161ina dat uvnit\u0159 jednoho souboru se opakuje.<br \/>\nExistuje je\u0161t\u011b jeden probl\u00e9m \u2013 redundantnost distribuovan\u00e9ho \u00falo\u017ei\u0161t\u011b dat. Pou\u017e\u00edv\u00e1me Minio a jeho data jsou v z\u00e1sad\u011b redundantn\u00ed. Bu\u010f je pot\u0159ebn\u00e9 z\u00e1lohovat p\u0159\u00edmo p\u0159es Minio \u2013 zat\u011b\u017eovat ho a vyu\u017e\u00edvat v\u0161echny vrstvy mezi souborov\u00fdm syst\u00e9mem, a co je tak\u00e9 d\u016fle\u017eit\u00e9, je riziko zapomenout na \u010d\u00e1st bucket\u016f a meta-informac\u00ed. Nebo pou\u017e\u00edt deduplikaci.<\/p>\n<p><\/p>\n<p>N\u00e1stroje pro z\u00e1lohov\u00e1n\u00ed s deduplikac\u00ed existuj\u00ed v open-source (bylo na Habru <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/449282\/\">na str\u00e1nk\u00e1ch Maven Apache Project<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/420055\/\">na toto t\u00e9ma<\/a><\/noindex>) a na\u0161imi finalisty se stali <noindex><a rel=\"nofollow\" href=\"https:\/\/borgbackup.readthedocs.io\/en\/stable\/\">Borg<\/a><\/noindex> a <noindex><a rel=\"nofollow\" href=\"https:\/\/restic.net\/\">Restic<\/a><\/noindex>. O na\u0161em srovn\u00e1n\u00ed dvou aplikac\u00ed n\u00ed\u017ee, ale zat\u00edm pov\u00edme, jak jsme zorganizovali celou sch\u00e9ma.<\/p>\n<p><\/p>\n<h2 id=\"upravlenie-sozdaniem-rezervnyh-kopiy\">\u0158\u00edzen\u00ed vytv\u00e1\u0159en\u00ed z\u00e1loh<\/h2>\n<p><\/p>\n<p>Borg a Restic jsou dobr\u00e9, ale ani jeden z t\u011bchto produkt\u016f nem\u00e1 centralizovan\u00fd mechanismus \u0159\u00edzen\u00ed. Pro \u00fa\u010dely spr\u00e1vy a kontroly jsme zvolili n\u00e1stroj, kter\u00fd u\u017e m\u00e1me zaveden, bez kter\u00e9ho si nedovedeme p\u0159edstavit na\u0161i pr\u00e1ci, v\u010detn\u011b automatizace \u2013 je to zn\u00e1m\u00fd CI\/CD \u2013 GitLab.<\/p>\n<p><\/p>\n<p>My\u0161lenka je n\u00e1sleduj\u00edc\u00ed: na ka\u017edou uzel ukl\u00e1daj\u00edc\u00ed data Nextcloud se instaluje gitlab-runner. Runner spou\u0161t\u00ed podle pl\u00e1nu skript sleduj\u00edc\u00ed proces z\u00e1lohov\u00e1n\u00ed, a ten \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Borg nebo Restic.<\/p>\n<p><\/p>\n<p>Co jsme z\u00edskali? Zp\u011btnou vazbu z proveden\u00ed, snadnou kontrolu zm\u011bn, podrobnosti v p\u0159\u00edpad\u011b chyby.<\/p>\n<p><\/p>\n<p>Tady <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/molnia-com\/backup-by-runner\">zde na GitHubu<\/a><\/noindex> jsme zve\u0159ejnili p\u0159\u00edklady skriptu pro r\u016fzn\u00e9 \u00fakoly, a my jsme ho nakonec p\u0159ipojili k z\u00e1lohov\u00e1n\u00ed nejen Nextcloudu, ale tak\u00e9 mnoha dal\u0161\u00edch slu\u017eeb. Tam je tak\u00e9 pl\u00e1nova\u010d, pokud se v\u00e1m nechce ho nastavovat ru\u010dn\u011b (a n\u00e1m se nechce) a .gitlab-ci.yml<\/p>\n<p><\/p>\n<p>V API GitLabu zat\u00edm nen\u00ed mo\u017enost m\u011bnit timeout CI\/CD, a ten je tam mal\u00fd. Je t\u0159eba ho zv\u00fd\u0161it, dejme tomu na <code>1d<\/code>.<\/p>\n<p><\/p>\n<p>GitLab na\u0161t\u011bst\u00ed um\u00ed spou\u0161t\u011bt nejen na z\u00e1klad\u011b commitu, ale tak\u00e9 podle pl\u00e1nu, to je p\u0159esn\u011b to, co pot\u0159ebujeme.<\/p>\n<p><\/p>\n<p>Te\u010f o skriptu-wrapperu.<\/p>\n<p><\/p>\n<p>Pro tento skript jsme stanovili takov\u00e9 podm\u00ednky:<\/p>\n<p><\/p>\n<ul>\n<li>Mus\u00ed b\u00fdt spou\u0161t\u011bn jak runnerem, tak ru\u010dn\u011b z konzole se stejnou funkcionalitou.<\/li>\n<li>Mus\u00ed m\u00edt zpracovatele chyb:<\/li>\n<li>k\u00f3d n\u00e1vratu.<\/li>\n<li>hled\u00e1n\u00ed \u0159et\u011bzce v logu. Nap\u0159\u00edklad, pro n\u00e1s m\u016f\u017ee b\u00fdt chybou zpr\u00e1va, kterou program za fat\u00e1ln\u00ed nepokl\u00e1d\u00e1.<\/li>\n<li>Zpracov\u00e1n\u00ed timeoutu. Doba proveden\u00ed by m\u011bla b\u00fdt rozumn\u00e1.<\/li>\n<li>Pot\u0159ebujeme podrobn\u00fd protokol. Ale pouze v p\u0159\u00edpad\u011b chyby.<\/li>\n<li>Tak\u00e9 se prov\u00e1d\u00ed \u0159ada test\u016f p\u0159ed zah\u00e1jen\u00edm.<\/li>\n<li>Mal\u00e9 vylep\u0161en\u00ed pro pohodl\u00ed, kter\u00e9 jsme pova\u017eovali za u\u017eite\u010dn\u00e9 p\u0159i podpo\u0159e:<\/li>\n<li>Za\u010d\u00e1tek a konec se zaznamen\u00e1v\u00e1 do syst\u00e9mov\u00e9ho logu m\u00edstn\u00edho za\u0159\u00edzen\u00ed. To pom\u00e1h\u00e1 spojit syst\u00e9mov\u00e9 chyby a pr\u00e1ci z\u00e1lohy.<\/li>\n<li>\u010c\u00e1st logu chyb, pokud n\u011bjak\u00e9 budou, se zobrazuje na stdout, cel\u00fd log se zapisuje do samostatn\u00e9ho souboru. Je pohodln\u00e9 se ihned pod\u00edvat do CI a vyhodnotit chybu, pokud je trivi\u00e1ln\u00ed.<\/li>\n<li>Re\u017eimy pro lad\u011bn\u00ed.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00dapln\u00fd log se uchov\u00e1v\u00e1 jako artefakt v GitLab, pokud nen\u00ed chyba, log se ma\u017ee. Skript p\u00ed\u0161eme v bash.<\/p>\n<p><\/p>\n<p>R\u00e1di uv\u00edt\u00e1me jak\u00e9koli n\u00e1vrhy a pozn\u00e1mky k open-source \u2014 v\u00edtejte.<\/p>\n<p><\/p>\n<h2 id=\"kak-eto-rabotaet\">Jak to funguje<\/h2>\n<p><\/p>\n<p>Na z\u00e1lohovan\u00e9 uzlu se spou\u0161t\u00ed runner s bashov\u00fdm executor. Pl\u00e1nova\u010d v speci\u00e1ln\u00edm repozit\u00e1\u0159i spou\u0161t\u00ed job CI\/CD. Runner spou\u0161t\u00ed skript, univerz\u00e1ln\u00ed ob\u00e1lku pro takov\u00e9 \u00fakoly, v n\u011bm prob\u00edh\u00e1 ov\u011b\u0159ov\u00e1n\u00ed platnosti repozit\u00e1\u0159e z\u00e1lohy, bod\u016f montov\u00e1n\u00ed a v\u0161eho, co chceme, pot\u00e9 se prov\u00e1d\u00ed z\u00e1lohov\u00e1n\u00ed a \u010di\u0161t\u011bn\u00ed star\u00e9ho. Hotov\u00e1 z\u00e1loha je pak odesl\u00e1na na S3.<\/p>\n<p><\/p>\n<p>Pracujeme podle takov\u00e9ho sch\u00e9matu \u2014 to je extern\u00ed poskytovatel AWS nebo rusk\u00fd analog (to je rychlej\u0161\u00ed a data neopou\u0161t\u011bj\u00ed RF). Nebo klientovi nainstalujeme samostatn\u00fd minio cluster na jeho m\u00edst\u011b pro tyto \u00fa\u010dely. Obvykle tak \u010din\u00edme z bezpe\u010dnostn\u00edch d\u016fvod\u016f, kdy\u017e klient zcela nechce, aby data opustila jejich obvod.<\/p>\n<p><\/p>\n<p>Funkci odes\u00edl\u00e1n\u00ed z\u00e1lohy p\u0159es ssh jsme nevyu\u017eili. To nezvy\u0161uje bezpe\u010dnost a s\u00ed\u0165ov\u00e9 mo\u017enosti poskytovatele S3 jsou mnohem vy\u0161\u0161\u00ed ne\u017e jedna na\u0161e ssh stroj.<\/p>\n<p><\/p>\n<p>Abychom se chr\u00e1nili p\u0159ed hackerem na m\u00edstn\u00edm za\u0159\u00edzen\u00ed \u2014 m\u016f\u017ee smazat data na S3, je nutn\u00e9 zapnout verzov\u00e1n\u00ed.<br \/>\nZ\u00e1lohovac\u00ed syst\u00e9m v\u017edy \u0161ifruje z\u00e1lohu.<\/p>\n<p><\/p>\n<p>Borg m\u00e1 re\u017eim bez \u0161ifrov\u00e1n\u00ed, <code>none<\/code>ale kategoricky nedoporu\u010dujeme jeho povolen\u00ed. V tomto re\u017eimu nebude nejen \u0161ifrov\u00e1n\u00ed, ale tak\u00e9 nen\u00ed vypo\u010d\u00edt\u00e1v\u00e1n kontroln\u00ed sou\u010det toho, co se zapisuje, tak\u017ee integritu lze ov\u011b\u0159it pouze nep\u0159\u00edmo, podle index\u016f.<\/p>\n<p><\/p>\n<p>Podle samostatn\u00e9ho pl\u00e1nova\u010de se prov\u00e1d\u00ed kontrola z\u00e1loh na integritu index\u016f a obsahu. Kontrola prob\u00edh\u00e1 pomalu a dlouho, proto ji spou\u0161t\u00edme samostatn\u011b jednou za m\u011bs\u00edc. M\u016f\u017ee trvat n\u011bkolik dn\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"ridmi-na-russkom\">\u010cti m\u011b v ru\u0161tin\u011b<\/h2>\n<p><\/p>\n<h3 id=\"osnovnye-funkcii\">Hlavn\u00ed funkce<\/h3>\n<p><\/p>\n<ul>\n<li><code>p\u0159ipravit<\/code> p\u0159\u00edprava<\/li>\n<li><code>testcheck<\/code> kontrola p\u0159ipravenosti<\/li>\n<li><code>hlavn\u00ed p\u0159\u00edkaz<\/code> hlavn\u00ed p\u0159\u00edkaz<\/li>\n<li><code>forcepostscript<\/code> funkce, kter\u00e1 se spou\u0161t\u00ed na konci nebo p\u0159i chyb\u011b. Pou\u017e\u00edv\u00e1 se k odpojen\u00ed odd\u00edlu.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"service-functions\">Slu\u017eebn\u00ed funkce<\/h3>\n<p><\/p>\n<ul>\n<li><code>cleanup<\/code> zapisujeme chyby nebo ma\u017eeme logovac\u00ed soubor.<\/li>\n<li><code>checklog<\/code> parsujeme log na p\u0159\u00edtomnost \u0159et\u011bzce s chybou.<\/li>\n<li><code>ret<\/code> exit handler.<\/li>\n<li><code>checktimeout<\/code> kontrola na \u010dasov\u00fd limit.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"environment\">Prost\u0159ed\u00ed<\/h3>\n<p><\/p>\n<ul>\n<li><code>VERBOSE=1<\/code> vys\u00edl\u00e1me chyby okam\u017eit\u011b na obrazovku (stdout).<\/li>\n<li><code>SAVELOGSONSUCCES=1<\/code> uchov\u00e1v\u00e1me log p\u0159i \u00fasp\u011bchu.<\/li>\n<li><code>INIT_REPO_IF_NOT_EXIST=1<\/code> Vytv\u00e1\u0159\u00edme repozit\u00e1\u0159, pokud neexistoval. Ve v\u00fdchoz\u00edm nastaven\u00ed je vypnuto.<\/li>\n<li><code>TIMEOUT<\/code> maxim\u00e1ln\u00ed \u010das na hlavn\u00ed operaci. M\u016f\u017eete to nastavit jako &#8216;m&#8217;, &#8216;h&#8217; nebo &#8216;d&#8217; na konci.<\/li>\n<\/ul>\n<p><\/p>\n<p>Re\u017eim uchov\u00e1v\u00e1n\u00ed star\u00fdch kopi\u00ed. Ve v\u00fdchoz\u00edm nastaven\u00ed:<\/p>\n<p><\/p>\n<ul>\n<li><code>KEEP_DAILY=7<\/code><\/li>\n<li><code>KEEP_WEEKLY=4<\/code><\/li>\n<li><code>KEEP_MONTHLY=6<\/code><\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"peremennye-vnutri-skripta\">Prom\u011bnn\u00e9 uvnit\u0159 skriptu<\/h2>\n<p><\/p>\n<ul>\n<li><code>ERROR_STRING<\/code> \u2014 \u0159et\u011bzec pro kontrolu v logu pro chybu.<\/li>\n<li><code>EXTRACT_ERROR_STRING<\/code> \u2014 v\u00fdraz pro zobrazen\u00ed \u0159et\u011bzce, pokud dojde k chyb\u011b.<\/li>\n<li><code>KILL_TIMEOUT_SIGNAL<\/code> \u2014 sign\u00e1l pro zabit\u00ed, pokud vypr\u0161\u00ed \u010dasov\u00fd limit.<\/li>\n<li><code>TAIL<\/code> \u2014 kolik \u0159et\u011bzc\u016f s chybami na obrazovce.<\/li>\n<li><code>COLORMSG<\/code> \u2014 barva zpr\u00e1vy (v\u00fdchoz\u00ed \u017elut\u00e1).<\/li>\n<\/ul>\n<p><\/p>\n<p>Ten skript, kter\u00fd se naz\u00fdv\u00e1 wordpress, se ozna\u010duje jako podm\u00edn\u011bn\u00fd, jeho funkc\u00ed je, \u017ee z\u00e1lohuje datab\u00e1zi MySQL. A to znamen\u00e1, \u017ee m\u016f\u017ee b\u00fdt pou\u017e\u00edv\u00e1n pro jednor\u00e1zov\u00e9 instalace Nextcloud, kde lze rovn\u011b\u017e z\u00e1lohovat datab\u00e1zi. Pohodl\u00ed nespo\u010d\u00edv\u00e1 jen v tom, \u017ee v\u0161e je na jednom m\u00edst\u011b, ale tak\u00e9 obsah datab\u00e1ze je bl\u00edzko obsahu soubor\u016f, proto\u017ee rozd\u00edl v \u010dase je minim\u00e1ln\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"restic-vs-borg\">Restic vs Borg<\/h2>\n<p><\/p>\n<p>Srovn\u00e1n\u00ed Borg a Restic je tak\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/454734\/\">zde na Habru<\/a><\/noindex>, a nem\u011bli jsme za \u00fakol ud\u011blat prost\u011b dal\u0161\u00ed, ale sv\u00e9. Bylo pro n\u00e1s d\u016fle\u017eit\u00e9, jak to bude vypadat na na\u0161ich datech, s na\u0161\u00ed specifi\u010dnost\u00ed. P\u0159ivedeme je.<\/p>\n<p><\/p>\n<p>Na\u0161e krit\u00e9ria v\u00fdb\u011bru, krom\u011b ji\u017e zm\u00edn\u011bn\u00fdch (deduplikace, rychl\u00e9 zotaven\u00ed atd.):<\/p>\n<p><\/p>\n<ul>\n<li>Odolnost v\u016f\u010di nedokon\u010den\u00e9 pr\u00e1ci. Kontrola na kill -9.<\/li>\n<li>Velikost na disku.<\/li>\n<li>Po\u017eadavky na zdroje (CPU, pam\u011b\u0165).<\/li>\n<li>Velikost uchov\u00e1van\u00fdch blob\u016f.<\/li>\n<li>Pr\u00e1ce s S3.<\/li>\n<li>Kontrola integrity.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pro testov\u00e1n\u00ed jsme vzali jednoho klienta s re\u00e1ln\u00fdmi daty a celkovou velikost\u00ed 1,6TB.<br \/>\nPodm\u00ednky.<\/p>\n<p><\/p>\n<p>Borg neum\u00ed p\u0159\u00edmo pracovat s S3, a my jsme to montovali jako fuse disk, p\u0159es <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/goofys\">goofys<\/a><\/noindex>. Restic pos\u00edlal do S3 s\u00e1m.<\/p>\n<p><\/p>\n<p>Goofys funguje velmi rychle a dob\u0159e, a k n\u011bmu je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kahing\/catfs\">modul diskov\u00e9 cache<\/a><\/noindex>, co\u017e je\u0161t\u011b v\u00edce urychluje pr\u00e1ci. Je v bet\u011b, a p\u0159izn\u00e1m se, \u017ee n\u00e1m spadl se ztr\u00e1tou dat na testech (jin\u00fdch). Ale pohodl\u00ed spo\u010d\u00edv\u00e1 v tom, \u017ee samotn\u00fd proces z\u00e1lohy nevy\u017eaduje velk\u00e9 \u010dten\u00ed, ale hlavn\u011b z\u00e1pis, tak\u017ee cache pou\u017e\u00edv\u00e1me pouze b\u011bhem kontroly integrity.<\/p>\n<p><\/p>\n<p>Abychom sn\u00ed\u017eili vliv s\u00edt\u011b, pou\u017eili jsme m\u00edstn\u00edho poskytovatele \u2014 Yandex Cloud.<\/p>\n<p><\/p>\n<p>V\u00fdsledky testov\u00e1n\u00ed srovn\u00e1n\u00ed.<\/p>\n<p><\/p>\n<ul>\n<li>Kill -9 s n\u00e1sledn\u00fdm restartem, ob\u011b akce prob\u011bhly \u00fasp\u011b\u0161n\u011b.<\/li>\n<li>Velikost na disku. Borg um\u00ed komprimovat, tak\u017ee o\u010dek\u00e1van\u00e9 v\u00fdsledky.<\/li>\n<\/ul>\n<p><\/p>\n<p>Z\u00e1lohovac\u00ed syst\u00e9m<br \/>\nVelikost<\/p>\n<p>Borg<br \/>\n562 Gb<\/p>\n<p>Restic<br \/>\n628 Gb<\/p>\n<p><\/p>\n<ul>\n<li>Podle CPU<br \/>\nBorg s\u00e1m o sob\u011b spot\u0159ebov\u00e1v\u00e1 m\u00e1lo, s v\u00fdchoz\u00ed kompres\u00ed, ale je t\u0159eba hodnotit spole\u010dn\u011b s procesem goofys. V sou\u010dtu jsou srovnateln\u00ed a vyu\u017e\u00edvaj\u00ed asi 1,2 j\u00e1dra na stejn\u00e9 testovac\u00ed virtu\u00e1ln\u00ed ma\u0161in\u011b.<\/li>\n<li>Pam\u011b\u0165. Restic p\u0159ibli\u017en\u011b 0,5 Gb, Borg asi 200 Mb. Ale to v\u0161e je zanedbateln\u00e9 ve srovn\u00e1n\u00ed se souborovou cache syst\u00e9mu. Tak\u017ee je dobr\u00e9 vy\u010dlenit v\u00edce pam\u011bti.<\/li>\n<li>Rozd\u00edl ve velikosti blob\u016f byl p\u0159ekvapiv\u00fd.<\/li>\n<\/ul>\n<p><\/p>\n<p>Z\u00e1lohovac\u00ed syst\u00e9m<br \/>\nVelikost<\/p>\n<p>Borg<br \/>\np\u0159ibli\u017en\u011b 500 Mb<\/p>\n<p>Restic<br \/>\np\u0159ibli\u017en\u011b 5 Mb<\/p>\n<p><\/p>\n<ul>\n<li>Pr\u00e1ce s S3 od Restic je skv\u011bl\u00e1. Pr\u00e1ce Borg p\u0159es goofys nevytv\u00e1\u0159\u00ed \u017e\u00e1dn\u00e9 ot\u00e1zky, ale bylo zaznamen\u00e1no, \u017ee je \u017e\u00e1douc\u00ed po dokon\u010den\u00ed z\u00e1lohy prov\u00e9st umount, aby se \u00fapln\u011b vymazala cache. Specifikum pr\u00e1ce S3 je, \u017ee nedokon\u010den\u00e9 chunky nikdy nebudou odesl\u00e1ny do bucketu, tak\u017ee nedos\u00e1hnout kompletn\u00edch dat vede k velk\u00fdm po\u0161kozen\u00edm.<\/li>\n<li>Ov\u011b\u0159en\u00ed integrity funguje dob\u0159e v obou p\u0159\u00edpadech, ale rychlost se v\u00fdrazn\u011b li\u0161\u00ed.<br \/>\nRestic \u2013 <strong>3,5 hodiny<\/strong>.<br \/>\nBorg, s cache soubor\u016f 100 Gb SSD \u2013 <strong>5 hodin<\/strong>. P\u0159ibli\u017en\u011b stejn\u00fd v\u00fdsledek rychlosti, pokud jsou data ulo\u017eena na m\u00edstn\u00edm disku.<br \/>\nBorg \u010dte p\u0159\u00edmo z S3 bez cache <strong>33 hodin<\/strong>. Hrozn\u011b dlouho.<\/li>\n<\/ul>\n<p><\/p>\n<p>V kone\u010dn\u00e9m d\u016fsledku Borg um\u00ed komprimovat a m\u00e1 v\u011bt\u0161\u00ed blob, co\u017e d\u011bl\u00e1 ukl\u00e1d\u00e1n\u00ed a operace GET\/PUT v S3 levn\u011bj\u0161\u00edmi. Ale za to se plat\u00ed slo\u017eit\u011bj\u0161\u00edm a pomalej\u0161\u00edm ov\u011b\u0159ov\u00e1n\u00edm. Co se t\u00fd\u010de rychlosti obnovy \u2014 \u017e\u00e1dn\u00fd rozd\u00edl jsme nezaznamenali. N\u00e1sleduj\u00edc\u00ed z\u00e1lohy (po prvn\u00ed) restic prov\u00e1d\u00ed o n\u011bco d\u00e9le, ale ne z\u00e1sadn\u011b.<\/p>\n<p><\/p>\n<p>Velmi d\u016fle\u017eit\u00fdm faktorem p\u0159i v\u00fdb\u011bru byl tak\u00e9 rozm\u011br komunity.<\/p>\n<p><\/p>\n<p>A my jsme vybrali Borg.<\/p>\n<p><\/p>\n<h2 id=\"paru-slov-o-szhatii\">P\u00e1r slov o kompresi<\/h2>\n<p><\/p>\n<p>Borg disponuje vynikaj\u00edc\u00edm nov\u00fdm kompresn\u00edm algoritmem \u2014 zstd. Co do kvality komprese nen\u00ed hor\u0161\u00ed ne\u017e gzip, ale je v\u00fdrazn\u011b rychlej\u0161\u00ed. A je porovnateln\u00e9 rychlost\u00ed s v\u00fdchoz\u00edm lz4.<\/p>\n<p><\/p>\n<p>Nap\u0159\u00edklad dump MySQL datab\u00e1ze se komprimuje dvakr\u00e1t l\u00e9pe ne\u017e lz4 p\u0159i stejn\u00e9 rychlosti. Nicm\u00e9n\u011b, zku\u0161enosti s re\u00e1ln\u00fdmi daty ukazuj\u00ed, \u017ee rozd\u00edl ve stupni komprese na nod\u011b Nextcloud je velmi mal\u00fd.<\/p>\n<p><\/p>\n<p>V Borg je tak\u00e9 zaj\u00edmav\u00fd re\u017eim komprese \u2014 pokud m\u00e1 soubor vysokou entropii, komprese se v\u016fbec neprov\u00e1d\u00ed, co\u017e zvy\u0161uje rychlost pr\u00e1ce. Aktivuje se volbou p\u0159i vytv\u00e1\u0159en\u00ed<br \/>\n<code>-C auto,zstd<\/code><br \/>\npro algoritmus zstd<br \/>\nTak\u017ee s touto volbou v porovn\u00e1n\u00ed s v\u00fdchoz\u00ed kompres\u00ed jsme z\u00edskali<br \/>\n560 Gb a 562 Gb. Jak jsem zm\u00ednil v\u00fd\u0161e, bez komprimace \u010din\u00ed v\u00fdsledek 628 Gb. V\u00fdsledn\u00fd rozd\u00edl 2 Gb n\u00e1s celkem p\u0159ekvapil, ale rozhodli jsme se p\u0159ece jen vybrat. <code>auto,zstd<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"metodika-proverki-bekapa\">Metodika ov\u011b\u0159ov\u00e1n\u00ed z\u00e1loh<\/h2>\n<p><\/p>\n<p>Podle pl\u00e1nu se virtu\u00e1ln\u00ed stroj spou\u0161t\u00ed p\u0159\u00edmo u poskytovatele nebo u klienta, co\u017e v\u00fdznamn\u011b sni\u017euje s\u00ed\u0165ovou z\u00e1t\u011b\u017e. Minim\u00e1ln\u011b je to levn\u011bj\u0161\u00ed ne\u017e zprovoz\u0148ovat u sebe a pos\u00edlat data.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">goofys --cache \"--free:5%:\\\/mnt\\\/cache\" -o allow_other --endpoint https:\\\/\\\/storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com \\\/mnt\\\/goofys\nexport BORG_PASSCOMMAND=\"cat \\\/home\\\/borg\\\/.borg-passphrase\"\nborg list \\\/mnt\\\/goofys\\\/borg1\\\/\nborg check --debug -p --verify-data \\\/mnt\\\/goofys\\\/borg1\\\/<\/code><\/pre>\n<p><\/p>\n<p>Podle stejn\u00e9ho sch\u00e9matu kontrolujeme soubory antivirem (post factum). U\u017eivatel\u00e9 nahr\u00e1vaj\u00ed r\u016fzn\u00e9 soubory do Nextcloudu a ne v\u0161ichni maj\u00ed antivirus. Prov\u00e1d\u011bt kontrolu p\u0159i nahr\u00e1v\u00e1n\u00ed zabere p\u0159\u00edli\u0161 mnoho \u010dasu a br\u00e1n\u00ed podnik\u00e1n\u00ed.<\/p>\n<p><\/p>\n<p>\u0160k\u00e1lovatelnosti dosahujeme spu\u0161t\u011bn\u00edm runner\u016f na r\u016fzn\u00fdch nodech s r\u016fzn\u00fdmi tagy.<br \/>\nV na\u0161em monitoringu shroma\u017e\u010fujeme stavy z\u00e1loh p\u0159es API GitLab na jednom okn\u011b, a pokud je to nutn\u00e9, probl\u00e9my se snadno rozpoznaj\u00ed a tak\u00e9 snadno lokalizuj\u00ed.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">Z\u00e1v\u011br<\/h2>\n<p><\/p>\n<p>Jako v\u00fdsledek p\u0159esn\u011b v\u00edme, \u017ee z\u00e1lohy d\u011bl\u00e1me, \u017ee na\u0161e z\u00e1lohy jsou validn\u00ed, a probl\u00e9my, kter\u00e9 s nimi vznikaj\u00ed, zab\u00edraj\u00ed m\u00e1lo \u010dasu a \u0159e\u0161\u00ed se na \u00farovni pohotovostn\u00edho administr\u00e1tora. Z\u00e1lohy skute\u010dn\u011b zab\u00edraj\u00ed m\u00e1lo prostoru ve srovn\u00e1n\u00ed s tar.gz nebo Bacula.<\/p>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/508758\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0421\u0422\u041e \u0432 \u00ab\u041c\u043e\u043b\u043d\u0438\u044f \u0410\u041a\u00bb, \u0433\u0434\u0435 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c IT \u0441\u0438\u0441\u0442\u0435\u043c, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nextcloud. \u0412 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0441 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0441 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u044b\u0442\u0435\u043a\u0430\u044e\u0449\u0438\u0435 \u0438\u0437 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":86905,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-86904","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.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\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\/cs\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud\" \/>\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-07-01T05:42:30+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-01T05:42:30+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\udd47Jak GitLab pom\u00e1h\u00e1 z\u00e1lohovat velk\u00e9 \u00falo\u017ei\u0161t\u011b NextCloud | ProHoster","description":"Ahoj, Habr! Dnes chci mluvit o na\u0161\u00ed zku\u0161enosti s automatizac\u00ed z\u00e1lohov\u00e1n\u00ed velk\u00fdch datov\u00fdch \u00falo\u017ei\u0161\u0165 Nextcloud v r\u016fzn\u00fdch konfigurac\u00edch.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\udd47\u041a\u0430\u043a GitLab \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u044d\u043a\u0430\u043f\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 NextCloud | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0430\u0448\u0435\u043c \u043e\u043f\u044b\u0442\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449 Nextcloud \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445.","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/kak-gitlab-pomogaet-delat-bekapy-bolshih-hranilishh-nextcloud","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-07-01T05:42:30+00:00","article:modified_time":"2020-07-01T05:42:30+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"86904","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 14:03:54","updated":"2022-10-06 09:05:46","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/86904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=86904"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/86904\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/86905"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=86904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=86904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=86904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}