[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"custom-urls-\u002Flinux\u002Fdumper":3,"categories-menu":10,"post-biblioteka-dlya-sozdaniya-rezervnyh-kopiy-servera":120,"post-content-biblioteka-dlya-sozdaniya-rezervnyh-kopiy-servera":202,"post-comments-bjlqk6v41quti6geq9hs4ta6":1571},{"type":4,"entity":5,"path":8},"post",{"documentId":6,"slug":7},"bjlqk6v41quti6geq9hs4ta6","biblioteka-dlya-sozdaniya-rezervnyh-kopiy-servera",{"uri":9},"\u002Flinux\u002Fdumper",[11,31,104],{"id":12,"documentId":13,"name":14,"slug":15,"desc":16,"published":17,"uri":18,"showmenu":17,"createdAt":19,"updatedAt":20,"publishedAt":21,"locale":22,"heading":16,"order":23,"posts":24},4,"dw88ipzixowg4rbtqhna1fck","Личное","self",null,true,"\u002Fself","2026-05-17T11:06:55.868Z","2026-05-19T09:58:08.297Z","2026-05-19T09:58:08.291Z","en",0,[25,28],{"id":26,"documentId":27},61,"otr8hblo0fac9ovggct48osv",{"id":29,"documentId":30},76,"z77qh8cg0mcz533087epr6xu",{"id":32,"documentId":33,"name":34,"slug":35,"desc":16,"published":17,"uri":36,"showmenu":17,"createdAt":37,"updatedAt":38,"publishedAt":39,"locale":22,"heading":16,"order":40,"posts":41},2,"oxow5hzkizd4dgongka7hxvf","Рабочее","work","\u002Fwork","2026-05-15T07:43:18.016Z","2026-05-19T09:58:08.301Z","2026-05-19T09:58:08.295Z",1,[42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,98,101],{"id":43,"documentId":44},71,"tciv16vv801l5eg5m4rx3gal",{"id":46,"documentId":47},80,"x8y72z9yibyjcllzwes23h43",{"id":49,"documentId":50},81,"v06yaukpbxnypv0bh0s48osu",{"id":52,"documentId":53},82,"wgd4f0022pq1pwbvq04rq0x0",{"id":55,"documentId":56},83,"i8wiipabpbxtcofme04ncqjy",{"id":58,"documentId":59},84,"ny1dz9tknms3219nrc5oaahy",{"id":61,"documentId":62},89,"igz67vanm4ke94cilkgrts2i",{"id":64,"documentId":65},95,"fa4sibhpf6ohmet6qo3s4ywx",{"id":67,"documentId":68},96,"u7g77d0bu0rv1u67qea9kglu",{"id":70,"documentId":71},98,"exnbib5xi3fgt7mku9q8ithc",{"id":73,"documentId":74},99,"bja31j10up0ffiqw1j5nfr79",{"id":76,"documentId":77},100,"ztrhdkce10c349k6jngsqz72",{"id":79,"documentId":80},101,"gsf74mv1zc39kkejpvy70lfk",{"id":82,"documentId":83},102,"m7c1icp5gt0x73ssyc67atvc",{"id":85,"documentId":86},103,"yz8vml65wloblc0dsp1okc8l",{"id":88,"documentId":89},104,"lquxceynryigq9wdydiwby7f",{"id":91,"documentId":92},105,"yy6x55uwn90hzkzz0786ev1q",{"id":94,"documentId":95},106,"ns37ttwnqxfc86lw6355bx9n",{"id":97,"documentId":6},107,{"id":99,"documentId":100},108,"ztumsu968y7otczfxrol0o19",{"id":102,"documentId":103},109,"xxxi8etz2ay3839xvw2oz9ym",{"id":105,"documentId":106,"name":107,"slug":108,"desc":16,"published":17,"uri":109,"showmenu":17,"createdAt":110,"updatedAt":111,"publishedAt":112,"locale":22,"heading":16,"order":32,"posts":113},3,"cat0obshestvennoe000001","Общественное","public","\u002Fpublic","2026-05-15T18:29:50.696Z","2026-05-19T09:58:05.992Z","2026-05-19T09:58:05.985Z",[114,117],{"id":115,"documentId":116},74,"u55grcuibxa3e64ymhoaav2v",{"id":118,"documentId":119},92,"rcz3w4mhmhb54ps3o8j462fp",{"id":97,"documentId":6,"title":121,"slug":7,"content":122,"desc":123,"intro":124,"uri":9,"published":17,"publishedDate":125,"showComments":17,"canComment":17,"telegramId":16,"telegramLink":16,"telegramHash":16,"telegramSetReaction":17,"telegramPasteImage":126,"telegramPasteTitle":126,"telegramPasteLink":126,"internalMeta":127,"createdAt":128,"updatedAt":129,"publishedAt":130,"locale":16,"coverCaption":131,"showOnHome":17,"category":132,"cover":133,"tags":178,"author":186,"comments":32,"reactions":201},"Библиотека для создания резервных копий сервера","Я тут написал библиотеку для **создания резервных копий сервера** на моём любимом PHP. Хочу поделиться с вами!\n\n**Что умеет:**\n\n- Поддерживает **MySQL**\n- Сжимает в **Zip**\n- Выгружает на **Яндекс.Диск**\n\n**Что выгружает:**\n\n- Юзеров, у которых есть конфиг `dumper.yaml` в корне\n- Папки `\u002Froot\u002F` и `\u002Fetc\u002F`\n- Логи\n\nВроде бы, всё так-же, как было в старом древнем [YaDiskBackuper](https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FYaDiskBackuper) на Python, но!\\\n**Dumper работает быстрее, стабильнее, устанавливается через Composer**. Помимо этих существенных преимуществ, **Dumper** читает конфиги в корневой директории юзера и если не находит, то юзер не бекапится.\n\nВ конфиге юзера нужно указать доступ к БД и **можно указать папки, которые исключить из бекапа**.\\\nНапример, у нас есть большой сайт (10 ГБ) с кучей картинок, которые хранятся в `\u002Fassets\u002Fimages\u002F` (9.9 ГБ). Мы просто добавим эту папку в исключения:\n\n```yaml\n...\nexclude: [\n    '\u002Fwww\u002Fassets\u002Fimages\u002F*',\n  ]\n```\n\nи в хранилище будет выгружаться 0.1 ГБ + база данных.\n\n## Что ещё?\n\nЯ предусмотрел расширение функциональности приложения.\n\n- Помимо **Яндекс.Диск** можно добавить любое другое хранилище. Делается это довольно просто для посвящённого в программирование на PHP.\n- Кроме **MySQL** можно добавить поддержку ещё чего угодно!\n- А архивирование в **Zip** легко можно заменить на какой-нибудь **GZip**, просто добавив такой класс-обработчик [в соответствующую папку](https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FDumper\u002Ftree\u002Fmaster\u002Fsrc\u002FCompressor) библиотеки.\n\n## Как использовать\n\n1. Заходим на сервер от рута,\n2. Проверяем версию PHP для консоли (нужно &gt;=7.1.3) `php -v`, если ниже - устанавливаем требуемую.\n3. Создаём папку, в которой будет лежать приложение и заходим в неё, например: `\u002Froot\u002Fscripts\u002Fdumper\u002F`\n4. Устанавливаем библиотеку: `composer require gvozdb\u002Fdumper`, если нет Composer - устанавливаем и его.\n5. Создаём файл `cron.php`:\n\n```php\n\u003C?php\nuse Gvozdb\\Dumper;\nrequire __DIR__ . '\u002Fvendor\u002Fautoload.php';\ntry {\n    $config = new Dumper\\Config\\Load(__DIR__ . '\u002Fconfig.yaml');\n    $backup = new Dumper\\Backup($config);\n    $backup->run();\n} catch (Exception $e) {\n    print_r($e->getMessage() . PHP_EOL);\n}\n```\n\n6. Там же создаём конфиг-файл приложения `config.yaml`\n\n```yaml\nmain:\n    prefix: \"%Y%m%d-\" # префикс для названия архивов\n    expires: &main.expires 4 # сколько дней хранить\n    clean_logs: true # чистить старые логи\npath:\n    tmp: '\u002Ftmp\u002Fdumper\u002F%Y%m%d\u002F' # временная папка на сервере\n    users: '\u002Fvar\u002Fwww\u002F' # директория с юзерами\n    root: '\u002Froot\u002F' # директория root\n    log: '\u002Fvar\u002Flog\u002F' # директория логов\n    etc: '\u002Fetc\u002F' # директория etc\n\n# Хранилища\nstorages:\n    YandexDisk:\n        token: 'AQAAAAABEJ2-AAVH0ERr79Yz4E5dpd-7nhV1W18' # токен хранилища\n        path: 'disk:\u002FDumper\u002F%Y%m%d\u002F' # где хранить\n        expires: *main.expires # сколько дней хранить для конкретного хранилища\n```\n\n*Настраиваем конфиг под свой сервер.* **Как получить токен Яндекс.Диск**, [описано в шапке класса YandexDisk](https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FDumper\u002Fblob\u002Fmaster\u002Fsrc\u002FStorage\u002FYandexDisk.php#L3-L16).\\\n7. Заходим в корень каждого юзера, которого хотим бекапить и создаём конфиг-файл `dumper.yaml`\n\n```yaml\n# Включить\nenabled: true\n\n# Доступ к БД\ndatabase:\n    type: 'mysql'\n    port: 3306\n    host: 'localhost'\n    name: 'dbname'\n    user: 'dbuser'\n    pass: 'dbpassword'\n\n# Массив папок для исключения, указывается от корня юзера\nexclude: [\n    '\u002Fwww\u002Fcore\u002Fcache\u002F*',\n  ]\n```\n\n*Настраиваем для каждого юзера отдельно.*\\\n8. Запускаем `php \u002Froot\u002Fscripts\u002Fdumper\u002Fcron.php` и следим, происходит ли выгрузка в хранилище.\\\n9. Если всё OK - прописываем задание в `cron`: `0 2 * * * php \u002Froot\u002Fscripts\u002Fdumper\u002Fcron.php`\n\n## P.S.\n\nС удовольствием приму критику относительно [кода библиотеки](https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FDumper). И, конечно, **ставьте звёздочки на GitHub**, мне будет приятно!","","Я тут написал библиотеку для **создания резервных копий сервера** на моём любимом PHP. Хочу поделиться с вами!\n\n**Что умеет:**\n\n- Поддерживает **MySQL**\n\n- Сжимает в **Zip**\n\n- Выгружает на **Яндекс.Диск**\n\n**Что выгружает:**\n\n- Юзеров, у которых есть конфиг `dumper.yaml` в корне\n\n- Папки `\u002Froot\u002F` и `\u002Fetc\u002F`\n\n- Логи","2018-11-25T13:51:00.000Z",false,{"addToTelegram":126,"editInTelegram":126,"removeFromTelegram":126},"2026-05-16T19:04:20.383Z","2026-08-16T12:02:27.159Z","2026-08-16T12:02:27.147Z","Dumper",{"id":32,"documentId":33,"name":34,"slug":35,"desc":16,"published":17,"uri":36,"showmenu":17,"createdAt":37,"updatedAt":38,"publishedAt":39,"locale":22,"heading":16,"order":40},{"id":134,"documentId":135,"name":131,"alternativeText":123,"caption":123,"width":136,"height":137,"formats":138,"hash":171,"ext":140,"mime":143,"size":172,"url":173,"previewUrl":16,"provider":174,"provider_metadata":16,"folderPath":175,"createdAt":176,"updatedAt":176,"publishedAt":177,"locale":16},14,"x2cwfc79zgkb3ui4esmot0ei",1536,1024,{"large":139,"small":149,"medium":157,"thumbnail":164},{"ext":140,"url":141,"hash":142,"mime":143,"name":144,"path":16,"size":145,"width":146,"height":147,"sizeInBytes":148},".png","\u002Fuploads\u002Flarge_Dumper_323ad90d21.png","large_Dumper_323ad90d21","image\u002Fpng","large_Dumper",677.72,1000,667,677718,{"ext":140,"url":150,"hash":151,"mime":143,"name":152,"path":16,"size":153,"width":154,"height":155,"sizeInBytes":156},"\u002Fuploads\u002Fsmall_Dumper_323ad90d21.png","small_Dumper_323ad90d21","small_Dumper",159.56,500,333,159558,{"ext":140,"url":158,"hash":159,"mime":143,"name":160,"path":16,"size":161,"width":162,"height":154,"sizeInBytes":163},"\u002Fuploads\u002Fmedium_Dumper_323ad90d21.png","medium_Dumper_323ad90d21","medium_Dumper",367.76,750,367762,{"ext":140,"url":165,"hash":166,"mime":143,"name":167,"path":16,"size":168,"width":169,"height":97,"sizeInBytes":170},"\u002Fuploads\u002Fthumbnail_Dumper_323ad90d21.png","thumbnail_Dumper_323ad90d21","thumbnail_Dumper",22.25,160,22253,"Dumper_323ad90d21",499.9,"\u002Fuploads\u002FDumper_323ad90d21.png","local","\u002F1","2026-08-16T12:02:22.304Z","2026-08-16T12:02:22.305Z",[179],{"id":180,"documentId":181,"name":182,"slug":183,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":184,"updatedAt":184,"publishedAt":185,"locale":22,"heading":16,"desc":16},15,"aju4latl5hi6906pt0ktlb1g","Linux","linux","2026-05-16T10:03:45.426Z","2026-05-16T10:03:45.422Z",{"id":40,"documentId":187,"username":188,"provider":123,"confirmed":17,"blocked":126,"telegramId":189,"telegramData":190,"icon":16,"firstname":194,"lastname":193,"phone":191,"locale":16,"role":195,"avatar":16},"mr9zlrq1858u3k1t8r6dmlly","pavelgvozdb","133652371",{"id":189,"phone":191,"premium":126,"language":192,"lastname":193,"username":188,"firstname":194},"77025551199","ru","Гвоздь","Павел",{"id":105,"documentId":196,"name":197,"description":198,"type":199,"createdAt":200,"updatedAt":200,"publishedAt":200,"locale":16},"agv9d9dnu7pxc9ked3amj647","Admin","Главный админ блога — полный доступ к управлению на фронтенде","admin","2026-05-15T18:45:58.088Z",{"like":40,"dislike":23},{"data":203,"body":205,"toc":1566},{"title":123,"description":204},"Я тут написал библиотеку для создания резервных копий сервера на моём любимом PHP. Хочу поделиться с вами!",{"type":206,"children":207},"root",[208,224,232,267,275,316,349,374,439,444,451,456,508,514,572,895,909,1247,1283,1493,1533,1539,1560],{"type":209,"tag":210,"props":211,"children":212},"element","p",{},[213,216,222],{"type":214,"value":215},"text","Я тут написал библиотеку для ",{"type":209,"tag":217,"props":218,"children":219},"strong",{},[220],{"type":214,"value":221},"создания резервных копий сервера",{"type":214,"value":223}," на моём любимом PHP. Хочу поделиться с вами!",{"type":209,"tag":210,"props":225,"children":226},{},[227],{"type":209,"tag":217,"props":228,"children":229},{},[230],{"type":214,"value":231},"Что умеет:",{"type":209,"tag":233,"props":234,"children":235},"ul",{},[236,247,257],{"type":209,"tag":237,"props":238,"children":239},"li",{},[240,242],{"type":214,"value":241},"Поддерживает ",{"type":209,"tag":217,"props":243,"children":244},{},[245],{"type":214,"value":246},"MySQL",{"type":209,"tag":237,"props":248,"children":249},{},[250,252],{"type":214,"value":251},"Сжимает в ",{"type":209,"tag":217,"props":253,"children":254},{},[255],{"type":214,"value":256},"Zip",{"type":209,"tag":237,"props":258,"children":259},{},[260,262],{"type":214,"value":261},"Выгружает на ",{"type":209,"tag":217,"props":263,"children":264},{},[265],{"type":214,"value":266},"Яндекс.Диск",{"type":209,"tag":210,"props":268,"children":269},{},[270],{"type":209,"tag":217,"props":271,"children":272},{},[273],{"type":214,"value":274},"Что выгружает:",{"type":209,"tag":233,"props":276,"children":277},{},[278,292,311],{"type":209,"tag":237,"props":279,"children":280},{},[281,283,290],{"type":214,"value":282},"Юзеров, у которых есть конфиг ",{"type":209,"tag":284,"props":285,"children":287},"code",{"className":286},[],[288],{"type":214,"value":289},"dumper.yaml",{"type":214,"value":291}," в корне",{"type":209,"tag":237,"props":293,"children":294},{},[295,297,303,305],{"type":214,"value":296},"Папки ",{"type":209,"tag":284,"props":298,"children":300},{"className":299},[],[301],{"type":214,"value":302},"\u002Froot\u002F",{"type":214,"value":304}," и ",{"type":209,"tag":284,"props":306,"children":308},{"className":307},[],[309],{"type":214,"value":310},"\u002Fetc\u002F",{"type":209,"tag":237,"props":312,"children":313},{},[314],{"type":214,"value":315},"Логи",{"type":209,"tag":210,"props":317,"children":318},{},[319,321,330,332,336,341,343,347],{"type":214,"value":320},"Вроде бы, всё так-же, как было в старом древнем ",{"type":209,"tag":322,"props":323,"children":327},"a",{"href":324,"rel":325},"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FYaDiskBackuper",[326],"nofollow",[328],{"type":214,"value":329},"YaDiskBackuper",{"type":214,"value":331}," на Python, но!",{"type":209,"tag":333,"props":334,"children":335},"br",{},[],{"type":209,"tag":217,"props":337,"children":338},{},[339],{"type":214,"value":340},"Dumper работает быстрее, стабильнее, устанавливается через Composer",{"type":214,"value":342},". Помимо этих существенных преимуществ, ",{"type":209,"tag":217,"props":344,"children":345},{},[346],{"type":214,"value":131},{"type":214,"value":348}," читает конфиги в корневой директории юзера и если не находит, то юзер не бекапится.",{"type":209,"tag":210,"props":350,"children":351},{},[352,354,359,361,364,366,372],{"type":214,"value":353},"В конфиге юзера нужно указать доступ к БД и ",{"type":209,"tag":217,"props":355,"children":356},{},[357],{"type":214,"value":358},"можно указать папки, которые исключить из бекапа",{"type":214,"value":360},".",{"type":209,"tag":333,"props":362,"children":363},{},[],{"type":214,"value":365},"\nНапример, у нас есть большой сайт (10 ГБ) с кучей картинок, которые хранятся в ",{"type":209,"tag":284,"props":367,"children":369},{"className":368},[],[370],{"type":214,"value":371},"\u002Fassets\u002Fimages\u002F",{"type":214,"value":373}," (9.9 ГБ). Мы просто добавим эту папку в исключения:",{"type":209,"tag":375,"props":376,"children":381},"pre",{"className":377,"code":378,"language":379,"meta":123,"style":380},"language-yaml shiki shiki-themes github-light catppuccin-mocha","...\nexclude: [\n    '\u002Fwww\u002Fassets\u002Fimages\u002F*',\n  ]\n","yaml","--shiki-default:#24292e;--shiki-dark:#cdd6f4;--shiki-default-bg:#fff;--shiki-dark-bg:#1e1e2e",[382],{"type":209,"tag":284,"props":383,"children":384},{"__ignoreMap":123},[385,396,417,431],{"type":209,"tag":386,"props":387,"children":389},"span",{"class":388,"line":40},"line",[390],{"type":209,"tag":386,"props":391,"children":393},{"style":392},"--shiki-default:#6F42C1;--shiki-dark:#CDD6F4",[394],{"type":214,"value":395},"...\n",{"type":209,"tag":386,"props":397,"children":398},{"class":388,"line":32},[399,405,411],{"type":209,"tag":386,"props":400,"children":402},{"style":401},"--shiki-default:#22863A;--shiki-dark:#89B4FA",[403],{"type":214,"value":404},"exclude",{"type":209,"tag":386,"props":406,"children":408},{"style":407},"--shiki-default:#24292E;--shiki-dark:#94E2D5",[409],{"type":214,"value":410},":",{"type":209,"tag":386,"props":412,"children":414},{"style":413},"--shiki-default:#24292E;--shiki-dark:#9399B2",[415],{"type":214,"value":416}," [\n",{"type":209,"tag":386,"props":418,"children":419},{"class":388,"line":105},[420,426],{"type":209,"tag":386,"props":421,"children":423},{"style":422},"--shiki-default:#032F62;--shiki-dark:#A6E3A1",[424],{"type":214,"value":425},"    '\u002Fwww\u002Fassets\u002Fimages\u002F*'",{"type":209,"tag":386,"props":427,"children":428},{"style":413},[429],{"type":214,"value":430},",\n",{"type":209,"tag":386,"props":432,"children":433},{"class":388,"line":12},[434],{"type":209,"tag":386,"props":435,"children":436},{"style":413},[437],{"type":214,"value":438},"  ]\n",{"type":209,"tag":210,"props":440,"children":441},{},[442],{"type":214,"value":443},"и в хранилище будет выгружаться 0.1 ГБ + база данных.",{"type":209,"tag":445,"props":446,"children":448},"h2",{"id":447},"что-ещё",[449],{"type":214,"value":450},"Что ещё?",{"type":209,"tag":210,"props":452,"children":453},{},[454],{"type":214,"value":455},"Я предусмотрел расширение функциональности приложения.",{"type":209,"tag":233,"props":457,"children":458},{},[459,470,481],{"type":209,"tag":237,"props":460,"children":461},{},[462,464,468],{"type":214,"value":463},"Помимо ",{"type":209,"tag":217,"props":465,"children":466},{},[467],{"type":214,"value":266},{"type":214,"value":469}," можно добавить любое другое хранилище. Делается это довольно просто для посвящённого в программирование на PHP.",{"type":209,"tag":237,"props":471,"children":472},{},[473,475,479],{"type":214,"value":474},"Кроме ",{"type":209,"tag":217,"props":476,"children":477},{},[478],{"type":214,"value":246},{"type":214,"value":480}," можно добавить поддержку ещё чего угодно!",{"type":209,"tag":237,"props":482,"children":483},{},[484,486,490,492,497,499,506],{"type":214,"value":485},"А архивирование в ",{"type":209,"tag":217,"props":487,"children":488},{},[489],{"type":214,"value":256},{"type":214,"value":491}," легко можно заменить на какой-нибудь ",{"type":209,"tag":217,"props":493,"children":494},{},[495],{"type":214,"value":496},"GZip",{"type":214,"value":498},", просто добавив такой класс-обработчик ",{"type":209,"tag":322,"props":500,"children":503},{"href":501,"rel":502},"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FDumper\u002Ftree\u002Fmaster\u002Fsrc\u002FCompressor",[326],[504],{"type":214,"value":505},"в соответствующую папку",{"type":214,"value":507}," библиотеки.",{"type":209,"tag":445,"props":509,"children":511},{"id":510},"как-использовать",[512],{"type":214,"value":513},"Как использовать",{"type":209,"tag":515,"props":516,"children":517},"ol",{},[518,523,536,547,560],{"type":209,"tag":237,"props":519,"children":520},{},[521],{"type":214,"value":522},"Заходим на сервер от рута,",{"type":209,"tag":237,"props":524,"children":525},{},[526,528,534],{"type":214,"value":527},"Проверяем версию PHP для консоли (нужно >=7.1.3) ",{"type":209,"tag":284,"props":529,"children":531},{"className":530},[],[532],{"type":214,"value":533},"php -v",{"type":214,"value":535},", если ниже - устанавливаем требуемую.",{"type":209,"tag":237,"props":537,"children":538},{},[539,541],{"type":214,"value":540},"Создаём папку, в которой будет лежать приложение и заходим в неё, например: ",{"type":209,"tag":284,"props":542,"children":544},{"className":543},[],[545],{"type":214,"value":546},"\u002Froot\u002Fscripts\u002Fdumper\u002F",{"type":209,"tag":237,"props":548,"children":549},{},[550,552,558],{"type":214,"value":551},"Устанавливаем библиотеку: ",{"type":209,"tag":284,"props":553,"children":555},{"className":554},[],[556],{"type":214,"value":557},"composer require gvozdb\u002Fdumper",{"type":214,"value":559},", если нет Composer - устанавливаем и его.",{"type":209,"tag":237,"props":561,"children":562},{},[563,565,571],{"type":214,"value":564},"Создаём файл ",{"type":209,"tag":284,"props":566,"children":568},{"className":567},[],[569],{"type":214,"value":570},"cron.php",{"type":214,"value":410},{"type":209,"tag":375,"props":573,"children":577},{"className":574,"code":575,"language":576,"meta":123,"style":380},"language-php shiki shiki-themes github-light catppuccin-mocha","\u003C?php\nuse Gvozdb\\Dumper;\nrequire __DIR__ . '\u002Fvendor\u002Fautoload.php';\ntry {\n    $config = new Dumper\\Config\\Load(__DIR__ . '\u002Fconfig.yaml');\n    $backup = new Dumper\\Backup($config);\n    $backup->run();\n} catch (Exception $e) {\n    print_r($e->getMessage() . PHP_EOL);\n}\n","php",[578],{"type":209,"tag":284,"props":579,"children":580},{"__ignoreMap":123},[581,596,626,654,667,734,777,802,840,886],{"type":209,"tag":386,"props":582,"children":583},{"class":388,"line":40},[584,590],{"type":209,"tag":386,"props":585,"children":587},{"style":586},"--shiki-default:#D73A49;--shiki-dark:#94E2D5",[588],{"type":214,"value":589},"\u003C?",{"type":209,"tag":386,"props":591,"children":593},{"style":592},"--shiki-default:#005CC5;--shiki-dark:#CDD6F4",[594],{"type":214,"value":595},"php\n",{"type":209,"tag":386,"props":597,"children":598},{"class":388,"line":32},[599,605,610,616,621],{"type":209,"tag":386,"props":600,"children":602},{"style":601},"--shiki-default:#D73A49;--shiki-dark:#CBA6F7",[603],{"type":214,"value":604},"use",{"type":209,"tag":386,"props":606,"children":607},{"style":592},[608],{"type":214,"value":609}," Gvozdb",{"type":209,"tag":386,"props":611,"children":613},{"style":612},"--shiki-default:#005CC5;--shiki-dark:#9399B2",[614],{"type":214,"value":615},"\\",{"type":209,"tag":386,"props":617,"children":619},{"style":618},"--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#F9E2AF;--shiki-dark-font-style:italic",[620],{"type":214,"value":131},{"type":209,"tag":386,"props":622,"children":623},{"style":413},[624],{"type":214,"value":625},";\n",{"type":209,"tag":386,"props":627,"children":628},{"class":388,"line":105},[629,634,640,645,650],{"type":209,"tag":386,"props":630,"children":631},{"style":601},[632],{"type":214,"value":633},"require",{"type":209,"tag":386,"props":635,"children":637},{"style":636},"--shiki-default:#005CC5;--shiki-dark:#CBA6F7",[638],{"type":214,"value":639}," __DIR__",{"type":209,"tag":386,"props":641,"children":642},{"style":586},[643],{"type":214,"value":644}," .",{"type":209,"tag":386,"props":646,"children":647},{"style":422},[648],{"type":214,"value":649}," '\u002Fvendor\u002Fautoload.php'",{"type":209,"tag":386,"props":651,"children":652},{"style":413},[653],{"type":214,"value":625},{"type":209,"tag":386,"props":655,"children":656},{"class":388,"line":12},[657,662],{"type":209,"tag":386,"props":658,"children":659},{"style":601},[660],{"type":214,"value":661},"try",{"type":209,"tag":386,"props":663,"children":664},{"style":413},[665],{"type":214,"value":666}," {\n",{"type":209,"tag":386,"props":668,"children":670},{"class":388,"line":669},5,[671,677,682,687,692,696,701,705,710,715,720,724,729],{"type":209,"tag":386,"props":672,"children":674},{"style":673},"--shiki-default:#24292E;--shiki-dark:#CDD6F4",[675],{"type":214,"value":676},"    $config ",{"type":209,"tag":386,"props":678,"children":679},{"style":586},[680],{"type":214,"value":681},"=",{"type":209,"tag":386,"props":683,"children":684},{"style":601},[685],{"type":214,"value":686}," new",{"type":209,"tag":386,"props":688,"children":689},{"style":592},[690],{"type":214,"value":691}," Dumper",{"type":209,"tag":386,"props":693,"children":694},{"style":612},[695],{"type":214,"value":615},{"type":209,"tag":386,"props":697,"children":698},{"style":592},[699],{"type":214,"value":700},"Config",{"type":209,"tag":386,"props":702,"children":703},{"style":612},[704],{"type":214,"value":615},{"type":209,"tag":386,"props":706,"children":707},{"style":618},[708],{"type":214,"value":709},"Load",{"type":209,"tag":386,"props":711,"children":712},{"style":413},[713],{"type":214,"value":714},"(",{"type":209,"tag":386,"props":716,"children":717},{"style":636},[718],{"type":214,"value":719},"__DIR__",{"type":209,"tag":386,"props":721,"children":722},{"style":586},[723],{"type":214,"value":644},{"type":209,"tag":386,"props":725,"children":726},{"style":422},[727],{"type":214,"value":728}," '\u002Fconfig.yaml'",{"type":209,"tag":386,"props":730,"children":731},{"style":413},[732],{"type":214,"value":733},");\n",{"type":209,"tag":386,"props":735,"children":737},{"class":388,"line":736},6,[738,743,747,751,755,759,764,768,773],{"type":209,"tag":386,"props":739,"children":740},{"style":673},[741],{"type":214,"value":742},"    $backup ",{"type":209,"tag":386,"props":744,"children":745},{"style":586},[746],{"type":214,"value":681},{"type":209,"tag":386,"props":748,"children":749},{"style":601},[750],{"type":214,"value":686},{"type":209,"tag":386,"props":752,"children":753},{"style":592},[754],{"type":214,"value":691},{"type":209,"tag":386,"props":756,"children":757},{"style":612},[758],{"type":214,"value":615},{"type":209,"tag":386,"props":760,"children":761},{"style":618},[762],{"type":214,"value":763},"Backup",{"type":209,"tag":386,"props":765,"children":766},{"style":413},[767],{"type":214,"value":714},{"type":209,"tag":386,"props":769,"children":770},{"style":673},[771],{"type":214,"value":772},"$config",{"type":209,"tag":386,"props":774,"children":775},{"style":413},[776],{"type":214,"value":733},{"type":209,"tag":386,"props":778,"children":780},{"class":388,"line":779},7,[781,786,791,797],{"type":209,"tag":386,"props":782,"children":783},{"style":673},[784],{"type":214,"value":785},"    $backup",{"type":209,"tag":386,"props":787,"children":788},{"style":586},[789],{"type":214,"value":790},"->",{"type":209,"tag":386,"props":792,"children":794},{"style":793},"--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic",[795],{"type":214,"value":796},"run",{"type":209,"tag":386,"props":798,"children":799},{"style":413},[800],{"type":214,"value":801},"();\n",{"type":209,"tag":386,"props":803,"children":805},{"class":388,"line":804},8,[806,811,816,821,826,831,836],{"type":209,"tag":386,"props":807,"children":808},{"style":413},[809],{"type":214,"value":810},"}",{"type":209,"tag":386,"props":812,"children":813},{"style":601},[814],{"type":214,"value":815}," catch",{"type":209,"tag":386,"props":817,"children":818},{"style":413},[819],{"type":214,"value":820}," (",{"type":209,"tag":386,"props":822,"children":823},{"style":618},[824],{"type":214,"value":825},"Exception",{"type":209,"tag":386,"props":827,"children":828},{"style":673},[829],{"type":214,"value":830}," $e",{"type":209,"tag":386,"props":832,"children":833},{"style":413},[834],{"type":214,"value":835},")",{"type":209,"tag":386,"props":837,"children":838},{"style":413},[839],{"type":214,"value":666},{"type":209,"tag":386,"props":841,"children":843},{"class":388,"line":842},9,[844,850,854,859,863,868,873,877,882],{"type":209,"tag":386,"props":845,"children":847},{"style":846},"--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic",[848],{"type":214,"value":849},"    print_r",{"type":209,"tag":386,"props":851,"children":852},{"style":413},[853],{"type":214,"value":714},{"type":209,"tag":386,"props":855,"children":856},{"style":673},[857],{"type":214,"value":858},"$e",{"type":209,"tag":386,"props":860,"children":861},{"style":586},[862],{"type":214,"value":790},{"type":209,"tag":386,"props":864,"children":865},{"style":793},[866],{"type":214,"value":867},"getMessage",{"type":209,"tag":386,"props":869,"children":870},{"style":413},[871],{"type":214,"value":872},"()",{"type":209,"tag":386,"props":874,"children":875},{"style":586},[876],{"type":214,"value":644},{"type":209,"tag":386,"props":878,"children":879},{"style":592},[880],{"type":214,"value":881}," PHP_EOL",{"type":209,"tag":386,"props":883,"children":884},{"style":413},[885],{"type":214,"value":733},{"type":209,"tag":386,"props":887,"children":889},{"class":388,"line":888},10,[890],{"type":209,"tag":386,"props":891,"children":892},{"style":413},[893],{"type":214,"value":894},"}\n",{"type":209,"tag":515,"props":896,"children":897},{"start":736},[898],{"type":209,"tag":237,"props":899,"children":900},{},[901,903],{"type":214,"value":902},"Там же создаём конфиг-файл приложения ",{"type":209,"tag":284,"props":904,"children":906},{"className":905},[],[907],{"type":214,"value":908},"config.yaml",{"type":209,"tag":375,"props":910,"children":912},{"className":377,"code":911,"language":379,"meta":123,"style":380},"main:\n    prefix: \"%Y%m%d-\" # префикс для названия архивов\n    expires: &main.expires 4 # сколько дней хранить\n    clean_logs: true # чистить старые логи\npath:\n    tmp: '\u002Ftmp\u002Fdumper\u002F%Y%m%d\u002F' # временная папка на сервере\n    users: '\u002Fvar\u002Fwww\u002F' # директория с юзерами\n    root: '\u002Froot\u002F' # директория root\n    log: '\u002Fvar\u002Flog\u002F' # директория логов\n    etc: '\u002Fetc\u002F' # директория etc\n\n# Хранилища\nstorages:\n    YandexDisk:\n        token: 'AQAAAAABEJ2-AAVH0ERr79Yz4E5dpd-7nhV1W18' # токен хранилища\n        path: 'disk:\u002FDumper\u002F%Y%m%d\u002F' # где хранить\n        expires: *main.expires # сколько дней хранить для конкретного хранилища\n",[913],{"type":209,"tag":284,"props":914,"children":915},{"__ignoreMap":123},[916,929,952,987,1009,1021,1043,1065,1087,1109,1131,1140,1149,1162,1174,1196,1219],{"type":209,"tag":386,"props":917,"children":918},{"class":388,"line":40},[919,924],{"type":209,"tag":386,"props":920,"children":921},{"style":401},[922],{"type":214,"value":923},"main",{"type":209,"tag":386,"props":925,"children":926},{"style":407},[927],{"type":214,"value":928},":\n",{"type":209,"tag":386,"props":930,"children":931},{"class":388,"line":32},[932,937,941,946],{"type":209,"tag":386,"props":933,"children":934},{"style":401},[935],{"type":214,"value":936},"    prefix",{"type":209,"tag":386,"props":938,"children":939},{"style":407},[940],{"type":214,"value":410},{"type":209,"tag":386,"props":942,"children":943},{"style":422},[944],{"type":214,"value":945}," \"%Y%m%d-\"",{"type":209,"tag":386,"props":947,"children":949},{"style":948},"--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#9399B2;--shiki-dark-font-style:italic",[950],{"type":214,"value":951}," # префикс для названия архивов\n",{"type":209,"tag":386,"props":953,"children":954},{"class":388,"line":105},[955,960,964,970,976,982],{"type":209,"tag":386,"props":956,"children":957},{"style":401},[958],{"type":214,"value":959},"    expires",{"type":209,"tag":386,"props":961,"children":962},{"style":407},[963],{"type":214,"value":410},{"type":209,"tag":386,"props":965,"children":967},{"style":966},"--shiki-default:#D73A49;--shiki-dark:#F5C2E7",[968],{"type":214,"value":969}," &",{"type":209,"tag":386,"props":971,"children":973},{"style":972},"--shiki-default:#6F42C1;--shiki-dark:#F9E2AF",[974],{"type":214,"value":975},"main.expires",{"type":209,"tag":386,"props":977,"children":979},{"style":978},"--shiki-default:#005CC5;--shiki-dark:#FAB387",[980],{"type":214,"value":981}," 4",{"type":209,"tag":386,"props":983,"children":984},{"style":948},[985],{"type":214,"value":986}," # сколько дней хранить\n",{"type":209,"tag":386,"props":988,"children":989},{"class":388,"line":12},[990,995,999,1004],{"type":209,"tag":386,"props":991,"children":992},{"style":401},[993],{"type":214,"value":994},"    clean_logs",{"type":209,"tag":386,"props":996,"children":997},{"style":407},[998],{"type":214,"value":410},{"type":209,"tag":386,"props":1000,"children":1001},{"style":978},[1002],{"type":214,"value":1003}," true",{"type":209,"tag":386,"props":1005,"children":1006},{"style":948},[1007],{"type":214,"value":1008}," # чистить старые логи\n",{"type":209,"tag":386,"props":1010,"children":1011},{"class":388,"line":669},[1012,1017],{"type":209,"tag":386,"props":1013,"children":1014},{"style":401},[1015],{"type":214,"value":1016},"path",{"type":209,"tag":386,"props":1018,"children":1019},{"style":407},[1020],{"type":214,"value":928},{"type":209,"tag":386,"props":1022,"children":1023},{"class":388,"line":736},[1024,1029,1033,1038],{"type":209,"tag":386,"props":1025,"children":1026},{"style":401},[1027],{"type":214,"value":1028},"    tmp",{"type":209,"tag":386,"props":1030,"children":1031},{"style":407},[1032],{"type":214,"value":410},{"type":209,"tag":386,"props":1034,"children":1035},{"style":422},[1036],{"type":214,"value":1037}," '\u002Ftmp\u002Fdumper\u002F%Y%m%d\u002F'",{"type":209,"tag":386,"props":1039,"children":1040},{"style":948},[1041],{"type":214,"value":1042}," # временная папка на сервере\n",{"type":209,"tag":386,"props":1044,"children":1045},{"class":388,"line":779},[1046,1051,1055,1060],{"type":209,"tag":386,"props":1047,"children":1048},{"style":401},[1049],{"type":214,"value":1050},"    users",{"type":209,"tag":386,"props":1052,"children":1053},{"style":407},[1054],{"type":214,"value":410},{"type":209,"tag":386,"props":1056,"children":1057},{"style":422},[1058],{"type":214,"value":1059}," '\u002Fvar\u002Fwww\u002F'",{"type":209,"tag":386,"props":1061,"children":1062},{"style":948},[1063],{"type":214,"value":1064}," # директория с юзерами\n",{"type":209,"tag":386,"props":1066,"children":1067},{"class":388,"line":804},[1068,1073,1077,1082],{"type":209,"tag":386,"props":1069,"children":1070},{"style":401},[1071],{"type":214,"value":1072},"    root",{"type":209,"tag":386,"props":1074,"children":1075},{"style":407},[1076],{"type":214,"value":410},{"type":209,"tag":386,"props":1078,"children":1079},{"style":422},[1080],{"type":214,"value":1081}," '\u002Froot\u002F'",{"type":209,"tag":386,"props":1083,"children":1084},{"style":948},[1085],{"type":214,"value":1086}," # директория root\n",{"type":209,"tag":386,"props":1088,"children":1089},{"class":388,"line":842},[1090,1095,1099,1104],{"type":209,"tag":386,"props":1091,"children":1092},{"style":401},[1093],{"type":214,"value":1094},"    log",{"type":209,"tag":386,"props":1096,"children":1097},{"style":407},[1098],{"type":214,"value":410},{"type":209,"tag":386,"props":1100,"children":1101},{"style":422},[1102],{"type":214,"value":1103}," '\u002Fvar\u002Flog\u002F'",{"type":209,"tag":386,"props":1105,"children":1106},{"style":948},[1107],{"type":214,"value":1108}," # директория логов\n",{"type":209,"tag":386,"props":1110,"children":1111},{"class":388,"line":888},[1112,1117,1121,1126],{"type":209,"tag":386,"props":1113,"children":1114},{"style":401},[1115],{"type":214,"value":1116},"    etc",{"type":209,"tag":386,"props":1118,"children":1119},{"style":407},[1120],{"type":214,"value":410},{"type":209,"tag":386,"props":1122,"children":1123},{"style":422},[1124],{"type":214,"value":1125}," '\u002Fetc\u002F'",{"type":209,"tag":386,"props":1127,"children":1128},{"style":948},[1129],{"type":214,"value":1130}," # директория etc\n",{"type":209,"tag":386,"props":1132,"children":1134},{"class":388,"line":1133},11,[1135],{"type":209,"tag":386,"props":1136,"children":1137},{"emptyLinePlaceholder":17},[1138],{"type":214,"value":1139},"\n",{"type":209,"tag":386,"props":1141,"children":1143},{"class":388,"line":1142},12,[1144],{"type":209,"tag":386,"props":1145,"children":1146},{"style":948},[1147],{"type":214,"value":1148},"# Хранилища\n",{"type":209,"tag":386,"props":1150,"children":1152},{"class":388,"line":1151},13,[1153,1158],{"type":209,"tag":386,"props":1154,"children":1155},{"style":401},[1156],{"type":214,"value":1157},"storages",{"type":209,"tag":386,"props":1159,"children":1160},{"style":407},[1161],{"type":214,"value":928},{"type":209,"tag":386,"props":1163,"children":1164},{"class":388,"line":134},[1165,1170],{"type":209,"tag":386,"props":1166,"children":1167},{"style":401},[1168],{"type":214,"value":1169},"    YandexDisk",{"type":209,"tag":386,"props":1171,"children":1172},{"style":407},[1173],{"type":214,"value":928},{"type":209,"tag":386,"props":1175,"children":1176},{"class":388,"line":180},[1177,1182,1186,1191],{"type":209,"tag":386,"props":1178,"children":1179},{"style":401},[1180],{"type":214,"value":1181},"        token",{"type":209,"tag":386,"props":1183,"children":1184},{"style":407},[1185],{"type":214,"value":410},{"type":209,"tag":386,"props":1187,"children":1188},{"style":422},[1189],{"type":214,"value":1190}," 'AQAAAAABEJ2-AAVH0ERr79Yz4E5dpd-7nhV1W18'",{"type":209,"tag":386,"props":1192,"children":1193},{"style":948},[1194],{"type":214,"value":1195}," # токен хранилища\n",{"type":209,"tag":386,"props":1197,"children":1199},{"class":388,"line":1198},16,[1200,1205,1209,1214],{"type":209,"tag":386,"props":1201,"children":1202},{"style":401},[1203],{"type":214,"value":1204},"        path",{"type":209,"tag":386,"props":1206,"children":1207},{"style":407},[1208],{"type":214,"value":410},{"type":209,"tag":386,"props":1210,"children":1211},{"style":422},[1212],{"type":214,"value":1213}," 'disk:\u002FDumper\u002F%Y%m%d\u002F'",{"type":209,"tag":386,"props":1215,"children":1216},{"style":948},[1217],{"type":214,"value":1218}," # где хранить\n",{"type":209,"tag":386,"props":1220,"children":1222},{"class":388,"line":1221},17,[1223,1228,1232,1237,1242],{"type":209,"tag":386,"props":1224,"children":1225},{"style":401},[1226],{"type":214,"value":1227},"        expires",{"type":209,"tag":386,"props":1229,"children":1230},{"style":407},[1231],{"type":214,"value":410},{"type":209,"tag":386,"props":1233,"children":1234},{"style":966},[1235],{"type":214,"value":1236}," *",{"type":209,"tag":386,"props":1238,"children":1240},{"style":1239},"--shiki-default:#24292E;--shiki-dark:#F9E2AF",[1241],{"type":214,"value":975},{"type":209,"tag":386,"props":1243,"children":1244},{"style":948},[1245],{"type":214,"value":1246}," # сколько дней хранить для конкретного хранилища\n",{"type":209,"tag":210,"props":1248,"children":1249},{},[1250,1256,1258,1263,1265,1272,1273,1276,1278],{"type":209,"tag":1251,"props":1252,"children":1253},"em",{},[1254],{"type":214,"value":1255},"Настраиваем конфиг под свой сервер.",{"type":214,"value":1257}," ",{"type":209,"tag":217,"props":1259,"children":1260},{},[1261],{"type":214,"value":1262},"Как получить токен Яндекс.Диск",{"type":214,"value":1264},", ",{"type":209,"tag":322,"props":1266,"children":1269},{"href":1267,"rel":1268},"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FDumper\u002Fblob\u002Fmaster\u002Fsrc\u002FStorage\u002FYandexDisk.php#L3-L16",[326],[1270],{"type":214,"value":1271},"описано в шапке класса YandexDisk",{"type":214,"value":360},{"type":209,"tag":333,"props":1274,"children":1275},{},[],{"type":214,"value":1277},"\n7. Заходим в корень каждого юзера, которого хотим бекапить и создаём конфиг-файл ",{"type":209,"tag":284,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":214,"value":289},{"type":209,"tag":375,"props":1284,"children":1286},{"className":377,"code":1285,"language":379,"meta":123,"style":380},"# Включить\nenabled: true\n\n# Доступ к БД\ndatabase:\n    type: 'mysql'\n    port: 3306\n    host: 'localhost'\n    name: 'dbname'\n    user: 'dbuser'\n    pass: 'dbpassword'\n\n# Массив папок для исключения, указывается от корня юзера\nexclude: [\n    '\u002Fwww\u002Fcore\u002Fcache\u002F*',\n  ]\n",[1287],{"type":209,"tag":284,"props":1288,"children":1289},{"__ignoreMap":123},[1290,1298,1315,1322,1330,1342,1359,1376,1393,1410,1427,1444,1451,1459,1474,1486],{"type":209,"tag":386,"props":1291,"children":1292},{"class":388,"line":40},[1293],{"type":209,"tag":386,"props":1294,"children":1295},{"style":948},[1296],{"type":214,"value":1297},"# Включить\n",{"type":209,"tag":386,"props":1299,"children":1300},{"class":388,"line":32},[1301,1306,1310],{"type":209,"tag":386,"props":1302,"children":1303},{"style":401},[1304],{"type":214,"value":1305},"enabled",{"type":209,"tag":386,"props":1307,"children":1308},{"style":407},[1309],{"type":214,"value":410},{"type":209,"tag":386,"props":1311,"children":1312},{"style":978},[1313],{"type":214,"value":1314}," true\n",{"type":209,"tag":386,"props":1316,"children":1317},{"class":388,"line":105},[1318],{"type":209,"tag":386,"props":1319,"children":1320},{"emptyLinePlaceholder":17},[1321],{"type":214,"value":1139},{"type":209,"tag":386,"props":1323,"children":1324},{"class":388,"line":12},[1325],{"type":209,"tag":386,"props":1326,"children":1327},{"style":948},[1328],{"type":214,"value":1329},"# Доступ к БД\n",{"type":209,"tag":386,"props":1331,"children":1332},{"class":388,"line":669},[1333,1338],{"type":209,"tag":386,"props":1334,"children":1335},{"style":401},[1336],{"type":214,"value":1337},"database",{"type":209,"tag":386,"props":1339,"children":1340},{"style":407},[1341],{"type":214,"value":928},{"type":209,"tag":386,"props":1343,"children":1344},{"class":388,"line":736},[1345,1350,1354],{"type":209,"tag":386,"props":1346,"children":1347},{"style":401},[1348],{"type":214,"value":1349},"    type",{"type":209,"tag":386,"props":1351,"children":1352},{"style":407},[1353],{"type":214,"value":410},{"type":209,"tag":386,"props":1355,"children":1356},{"style":422},[1357],{"type":214,"value":1358}," 'mysql'\n",{"type":209,"tag":386,"props":1360,"children":1361},{"class":388,"line":779},[1362,1367,1371],{"type":209,"tag":386,"props":1363,"children":1364},{"style":401},[1365],{"type":214,"value":1366},"    port",{"type":209,"tag":386,"props":1368,"children":1369},{"style":407},[1370],{"type":214,"value":410},{"type":209,"tag":386,"props":1372,"children":1373},{"style":978},[1374],{"type":214,"value":1375}," 3306\n",{"type":209,"tag":386,"props":1377,"children":1378},{"class":388,"line":804},[1379,1384,1388],{"type":209,"tag":386,"props":1380,"children":1381},{"style":401},[1382],{"type":214,"value":1383},"    host",{"type":209,"tag":386,"props":1385,"children":1386},{"style":407},[1387],{"type":214,"value":410},{"type":209,"tag":386,"props":1389,"children":1390},{"style":422},[1391],{"type":214,"value":1392}," 'localhost'\n",{"type":209,"tag":386,"props":1394,"children":1395},{"class":388,"line":842},[1396,1401,1405],{"type":209,"tag":386,"props":1397,"children":1398},{"style":401},[1399],{"type":214,"value":1400},"    name",{"type":209,"tag":386,"props":1402,"children":1403},{"style":407},[1404],{"type":214,"value":410},{"type":209,"tag":386,"props":1406,"children":1407},{"style":422},[1408],{"type":214,"value":1409}," 'dbname'\n",{"type":209,"tag":386,"props":1411,"children":1412},{"class":388,"line":888},[1413,1418,1422],{"type":209,"tag":386,"props":1414,"children":1415},{"style":401},[1416],{"type":214,"value":1417},"    user",{"type":209,"tag":386,"props":1419,"children":1420},{"style":407},[1421],{"type":214,"value":410},{"type":209,"tag":386,"props":1423,"children":1424},{"style":422},[1425],{"type":214,"value":1426}," 'dbuser'\n",{"type":209,"tag":386,"props":1428,"children":1429},{"class":388,"line":1133},[1430,1435,1439],{"type":209,"tag":386,"props":1431,"children":1432},{"style":401},[1433],{"type":214,"value":1434},"    pass",{"type":209,"tag":386,"props":1436,"children":1437},{"style":407},[1438],{"type":214,"value":410},{"type":209,"tag":386,"props":1440,"children":1441},{"style":422},[1442],{"type":214,"value":1443}," 'dbpassword'\n",{"type":209,"tag":386,"props":1445,"children":1446},{"class":388,"line":1142},[1447],{"type":209,"tag":386,"props":1448,"children":1449},{"emptyLinePlaceholder":17},[1450],{"type":214,"value":1139},{"type":209,"tag":386,"props":1452,"children":1453},{"class":388,"line":1151},[1454],{"type":209,"tag":386,"props":1455,"children":1456},{"style":948},[1457],{"type":214,"value":1458},"# Массив папок для исключения, указывается от корня юзера\n",{"type":209,"tag":386,"props":1460,"children":1461},{"class":388,"line":134},[1462,1466,1470],{"type":209,"tag":386,"props":1463,"children":1464},{"style":401},[1465],{"type":214,"value":404},{"type":209,"tag":386,"props":1467,"children":1468},{"style":407},[1469],{"type":214,"value":410},{"type":209,"tag":386,"props":1471,"children":1472},{"style":413},[1473],{"type":214,"value":416},{"type":209,"tag":386,"props":1475,"children":1476},{"class":388,"line":180},[1477,1482],{"type":209,"tag":386,"props":1478,"children":1479},{"style":422},[1480],{"type":214,"value":1481},"    '\u002Fwww\u002Fcore\u002Fcache\u002F*'",{"type":209,"tag":386,"props":1483,"children":1484},{"style":413},[1485],{"type":214,"value":430},{"type":209,"tag":386,"props":1487,"children":1488},{"class":388,"line":1198},[1489],{"type":209,"tag":386,"props":1490,"children":1491},{"style":413},[1492],{"type":214,"value":438},{"type":209,"tag":210,"props":1494,"children":1495},{},[1496,1501,1504,1506,1512,1514,1517,1519,1525,1527],{"type":209,"tag":1251,"props":1497,"children":1498},{},[1499],{"type":214,"value":1500},"Настраиваем для каждого юзера отдельно.",{"type":209,"tag":333,"props":1502,"children":1503},{},[],{"type":214,"value":1505},"\n8. Запускаем ",{"type":209,"tag":284,"props":1507,"children":1509},{"className":1508},[],[1510],{"type":214,"value":1511},"php \u002Froot\u002Fscripts\u002Fdumper\u002Fcron.php",{"type":214,"value":1513}," и следим, происходит ли выгрузка в хранилище.",{"type":209,"tag":333,"props":1515,"children":1516},{},[],{"type":214,"value":1518},"\n9. Если всё OK - прописываем задание в ",{"type":209,"tag":284,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":214,"value":1524},"cron",{"type":214,"value":1526},": ",{"type":209,"tag":284,"props":1528,"children":1530},{"className":1529},[],[1531],{"type":214,"value":1532},"0 2 * * * php \u002Froot\u002Fscripts\u002Fdumper\u002Fcron.php",{"type":209,"tag":445,"props":1534,"children":1536},{"id":1535},"ps",[1537],{"type":214,"value":1538},"P.S.",{"type":209,"tag":210,"props":1540,"children":1541},{},[1542,1544,1551,1553,1558],{"type":214,"value":1543},"С удовольствием приму критику относительно ",{"type":209,"tag":322,"props":1545,"children":1548},{"href":1546,"rel":1547},"https:\u002F\u002Fgithub.com\u002Fgvozdb\u002FDumper",[326],[1549],{"type":214,"value":1550},"кода библиотеки",{"type":214,"value":1552},". И, конечно, ",{"type":209,"tag":217,"props":1554,"children":1555},{},[1556],{"type":214,"value":1557},"ставьте звёздочки на GitHub",{"type":214,"value":1559},", мне будет приятно!",{"type":209,"tag":1561,"props":1562,"children":1563},"style",{},[1564],{"type":214,"value":1565},".shiki,html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}.dark .shiki,html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":123,"searchDepth":32,"depth":32,"links":1567},[1568,1569,1570],{"id":447,"depth":32,"text":450},{"id":510,"depth":32,"text":513},{"id":1535,"depth":32,"text":1538},[1572,1587],{"id":1573,"documentId":1574,"content":1575,"blocked":126,"blockedThread":126,"removed":126,"entityUid":1576,"entityId":6,"ip":1577,"userAgent":1578,"anonym":1579,"sessionId":1578,"createdAt":1584,"updatedAt":1584,"publishedAt":1584,"locale":16,"author":16,"threadOf":16,"isOwner":126,"canEdit":126,"reactions":1585,"userReaction":16,"children":1586},116,"f7reea7e0vcpllje1hk9eg8b","Отличный инструмент! Настроил очень быстро и легко, сэнкс.","api::post.post","0.0.0.0","modx-migration",{"id":1580,"name":1581,"email":1582,"migrated":17,"modxCommentId":1583},"anonymous_modx_by8aca","Михаил","m.saratov@ya.ru",18,"2019-07-02T12:17:43.000Z",{"like":23,"dislike":23},[],{"id":1588,"documentId":1589,"content":1590,"blocked":126,"blockedThread":126,"removed":126,"entityUid":1576,"entityId":6,"ip":1577,"userAgent":1578,"anonym":1591,"sessionId":1578,"createdAt":1596,"updatedAt":1596,"publishedAt":1596,"locale":16,"author":16,"threadOf":16,"isOwner":126,"canEdit":126,"reactions":1597,"userReaction":16,"children":1598},117,"y966yuaobergtyld5gftz0a2","Спасибо огромное! Библиотека на питоне ни в какую не хотела работать через крон. Эта работает идеально.",{"id":1592,"name":1593,"email":1594,"migrated":17,"modxCommentId":1595},"anonymous_modx_4g5okd","Игорь","ig0r74@yandex.ru",19,"2020-04-04T08:07:24.000Z",{"like":23,"dislike":23},[]]