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