[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"custom-urls-\u002Fcrypto\u002Ffarcaster-node":3,"categories-menu":10,"post-stavim-nodu-farcaster-warpcast":120,"post-content-stavim-nodu-farcaster-warpcast":158,"post-comments-lquxceynryigq9wdydiwby7f":1171,"tags":1172},{"type":4,"entity":5,"path":8},"post",{"documentId":6,"slug":7},"lquxceynryigq9wdydiwby7f","stavim-nodu-farcaster-warpcast",{"uri":9},"\u002Fcrypto\u002Ffarcaster-node",[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,89,92,95,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":6},104,{"id":90,"documentId":91},105,"yy6x55uwn90hzkzz0786ev1q",{"id":93,"documentId":94},106,"ns37ttwnqxfc86lw6355bx9n",{"id":96,"documentId":97},107,"bjlqk6v41quti6geq9hs4ta6",{"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":88,"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":16,"tags":134,"author":142,"comments":23,"reactions":157},"Ставим ноду Farcaster Warpcast","Farcaster — это экспериментальный протокол децентрализованных социальных сетей, который разрабатывается для создания более свободных и безопасных онлайн-сообществ. Его основная цель — предоставить пользователям контроль над своими данными и взаимодействиями, снизив зависимость от централизованных платформ и их ограничений.\r\n\r\nВ попытке претендовать на дроп от проекта Farcaster и соцсети [Warpcast](https:\u002F\u002Fwarpcast.com\u002F~\u002Finvite-page\u002F494760?id=75d42e8f), можно попробовать развернуть ноду.\r\n\r\nПостарался написать подробную инструкцию, предусмотрев множество вопросов, которые не раскрываются в других источниках.\r\n\r\nКстати, тут есть [офф инструкция](https:\u002F\u002Fdocs.farcaster.xyz\u002Fhubble\u002Finstall).\r\n\r\n## Арендуем сервер\r\n\r\nЯ взял на [XorekCloud](https:\u002F\u002Fbit.ly\u002FgvoXorekCloud) VPS в Германии, тариф `DE-i9-16` за 1400 руб, с таким конфигом: `8 vCPU, 16Gb RAM, 240Gb NVMe`. Рекомендую диск брать от 200Gb, не смотря на то, что в оф доках пишут про 40Gb, которых нифига не хватает на данные, подтягиваемые нодой.\r\n\r\nПри установке выбираем `Ubuntu 22`, конечно же.\r\n\r\n## Регаем свои RPC\r\n\r\nМожем выбрать один из нижеуказанных сервисов для своего RPC.\r\n\r\n### Alchemy\r\n\r\nЗаходим на [Alchemy](https:\u002F\u002Fwww.alchemy.com\u002F) и регаемся. После этого переходим в свой аккаунт и слева в меню выбираем раздел \"Apps\", далее \"Create new app\". Там задаём любое название и сохраняем.\r\n\r\n[![](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Falchemy_1_0f14693dad.png)](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Falchemy_1_0f14693dad.png)После создания приложения, заходим внутрь и выбираем вкладку \"Networks\". Там нам понадобятся RPC сетей Ethereum и Optimism.\r\n\r\n[![](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Falchemy_2_c27bf22896.png)](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Falchemy_2_c27bf22896.png)Пока оставляем вкладку открытой, мы к ней ещё обратимся.\r\n\r\n### Infura\r\n\r\nПримерно те же действия. Ссылка – \u003Chttps:\u002F\u002Finfura.io>\r\n\r\n### Quicknode\r\n\r\nПримерно те же действия. Ссылка – \u003Chttps:\u002F\u002Fquicknode.com>\r\n\r\n### Chainnodes\r\n\r\nЕго я пока не пробовал. Ссылка – \u003Chttps:\u002F\u002Fchainnodes.org>\r\n\r\n## Копируем Farcaster ID\r\n\r\nЛибо с телефона в приложении, либо с компа на [Warpcast](https:\u002F\u002Fwarpcast.com\u002F~\u002Finvite-page\u002F494760?id=75d42e8f) заходим в \"Profile\", далее вверху \"...\" и во всплывашке жмём \"About\".\r\n\r\n[![](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fwarpcast_1_31883b9868.png)](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fwarpcast_1_31883b9868.png)Оттуда нам скоро понадобится скопировать FID.\r\n\r\n## Разворачиваем ноду\r\n\r\nПока мы совершали все эти действия, наш сервер должны уже были активировать. Вам на почту должны придти доступы.\r\n\r\nЗаходим через терминал по протоколу SSH и выполняем команды по очереди:\\\r\n`sudo apt update -y && sudo apt install -y screen git zip unzip mc nano htop cron libyaml-dev iptables-persistent && dpkg -L iptables-persistent`\\\r\nВ процессе спросит два вопроса про сохранение IPv4 и IPv6 правил. Говорим \"Yes\".\r\n\r\nПосле этого сразу открываем порты `3381`, `3382` и `3383` для доступа входящих и исходящих соединений:\r\n\r\n```bash\r\nsudo iptables -A INPUT -p tcp --dport 3381 -j ACCEPT\r\nsudo iptables -A INPUT -p tcp --dport 3382 -j ACCEPT\r\nsudo iptables -A INPUT -p tcp --dport 3383 -j ACCEPT\r\nsudo iptables-save > \u002Fetc\u002Fiptables\u002Frules.v4\r\nsudo iptables -L -v -n\r\n```\r\n\r\nПосле этого выполняем команду установки самой ноды:\\\r\n`curl -sSL https:\u002F\u002Fraw.githubusercontent.com\u002Ffarcasterxyz\u002Fsnapchain\u002Frefs\u002Fheads\u002Fmain\u002Fscripts\u002Fsnapchain-bootstrap.sh | bash`\\\r\nПри установке будут три вопроса, в поле первого копируем из Alchemy наш Ethereum RPC, во второй – Optimism RPC, в третий Farcaster ID (FID из Warpcast).\r\n\r\nПосле успешной установки приложение выдаст логи:\\\r\n[![](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fserver_1_eb49b0015a.png)](https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fserver_1_eb49b0015a.png)Можно выйти комбинацией клавиш `Ctrl+C`, приложение при этом не завершится.\r\n\r\nТеперь нужно будет подождать несколько часов, пока нода синхронизируется с текущим состоянием сети.\r\n\r\n## Следим за нодой\r\n\r\nДля того, чтобы отслеживать работу ноды, можно перейти в браузере по IP вашего сервера, подставив `3000` порт. Будет выглядеть так:\\\r\n`http:\u002F\u002FSERVER_IP:3000`\r\n\r\n## Обновляем RPC без удаления ноды\r\n\r\nМне пришлось переехать и от Alchemy, и от Infura, потому что не хватало лимита запросов. Пока для данной ноды выбрал Quicknode.\r\n\r\nЧтобы обновить RPC, не удаляя при этом ноду со всем скачанным ранее блокчейном, заходим в `~\u002Fhubble`, открываем файл `.env`, где правим 2 переменные: `ETH_MAINNET_RPC_URL` и `OPTIMISM_L2_RPC_URL`.\r\n\r\n## Закончилось место\r\n\r\nЕсли на сервере закончилось место из-за ноды Farcaster, то 99% причина в том, что Grafana хранит слишком много логов статистических метрик, которые нам нафиг не нужны.\r\n\r\nВот как это можно почистить и настроить ноду таким образом, чтобы такой проблемы больше не возникало:\r\n\r\n1. Создаём `\u002Froot\u002Fhubble\u002Fstorage-schemas.conf` с таким содержимым:\r\n\r\n```ini\r\n[default]\r\npattern = .*\r\nretentions = 10s:6h\r\n```\r\n\r\n2. Указываем в `\u002Froot\u002Fhubble\u002Fdocker-compose.yml` в контейнере `statsd` путь к данному конфигу:\r\n\r\n```yaml\r\nvolumes:\r\n  - .\u002Fstorage-schemas.conf:\u002Fopt\u002Fgraphite\u002Fconf\u002Fstorage-schemas.conf:ro\r\n```\r\n\r\n3. Вручную находим жирную папку с мусорными логами:\\\r\n   `du -sh \u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002F*\u002F_data\u002Fwhisper 2>\u002Fdev\u002Fnull | sort -hr`\r\n\r\n4. Берём её полный путь и вставляем в команду на удаление:\\\r\n   `rm -rf ПУТЬ_К_МУСОРНОЙ_ПАПКЕ`\\\r\n   ***Внимательно укажите путь***\\*, чтобы не удалить нахрен весь сервер!\\*\r\n\r\n5. Перезапускаем контейнеры ноды:\\\r\n   `cd ~\u002Fhubble && docker compose down && docker compose up -d`\r\n\r\nГлавным минусом данного решения является то, что после обновления ноды командой `cd ~\u002Fhubble && .\u002Fhubble.sh upgrade` нам всегда придётся заново вносить изменения из 2 пункта, а именно в `\u002Froot\u002Fhubble\u002Fdocker-compose.yml` и далее выполнять команду из 5 пункта (перезапуск контейнеров ноды). Не забывайте об этом!\r\n\r\n## Полезные команды\r\n\r\nОбновить ноду:\\\r\n`cd ~\u002Fhubble && .\u002Fhubble.sh upgrade`\r\n\r\nПроверить место занятое докером:\\\r\n`docker system df`\r\n\r\nОчистить место занятое докером впустую:\\\r\n`docker image prune -f && docker volume prune -f && docker container prune -f && docker system prune -f && docker volume rm $(docker volume ls -q) && docker image rm $(docker image ls -f dangling=true -q)`\r\n\r\nПросмотреть логи:\\\r\n`docker logs hubble-hubble-1 --since 1m -f`\r\n\r\nУдалить ноду:\\\r\n`docker container stop $(docker container ls -aq) && docker container rm -f $(docker container ls -aq) && docker image rm $(docker image ls -q) && service docker restart && rm -rf \u002Froot\u002Fhubble`\r\n\r\n## Возможные ошибки\r\n\r\nПробуем решать проблемы, связанные с нодой Farcaster. Если сталкиваетесь с ошибками, не описанными здесь, то пишите об этом в комментариях.\r\n\r\n### Статус \"Starting up... Please wait\" на дашборде\r\n\r\nНа дашборде Grafana по адресу `http:\u002F\u002FSERVER_IP:3000` многие блоки показывают статус \"Starting up... Please wait\". Можно попробовать запустить команду обновления ноды:\\\r\n`cd ~\u002Fhubble && .\u002Fhubble.sh upgrade`\\\r\nЭто должно помочь решить проблему.","","Farcaster — это экспериментальный протокол децентрализованных социальных сетей, который разрабатывается для создания более свободных и безопасных онлайн-сообществ. Его основная цель — предоставить пользователям контроль над своими данными и взаимодействиями, снизив зависимость от централизованных платформ и их ограничений.\r\n\r\nВ попытке претендовать на дроп от проекта Farcaster и соцсети [Warpcast](https:\u002F\u002Fwarpcast.com\u002F~\u002Finvite-page\u002F494760?id=75d42e8f), можно попробовать развернуть ноду. Постарался написать подробную инструкцию, предусмотрев множество вопросов, которые не раскрываются в других источниках.","2024-06-21T20:03:00.000Z",false,{"addToTelegram":128,"editInTelegram":128,"removeFromTelegram":128},"false","2026-05-16T14:27:45.314Z","2026-05-17T10:14:18.829Z","2026-05-17T10:14:18.815Z","Farcaster Node",{"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},[135],{"id":136,"documentId":137,"name":138,"slug":139,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":140,"updatedAt":140,"publishedAt":141,"locale":22,"heading":16,"desc":16},30,"xkffo03bgoiimugiwqgryrx0","Крипта","kripta","2026-05-16T10:33:48.241Z","2026-05-16T10:33:48.237Z",{"id":40,"documentId":143,"username":144,"provider":123,"confirmed":17,"blocked":126,"telegramId":145,"telegramData":146,"icon":16,"firstname":150,"lastname":149,"phone":147,"locale":16,"role":151,"avatar":16},"mr9zlrq1858u3k1t8r6dmlly","pavelgvozdb","133652371",{"id":145,"phone":147,"premium":126,"language":148,"lastname":149,"username":144,"firstname":150},"77025551199","ru","Гвоздь","Павел",{"id":105,"documentId":152,"name":153,"description":154,"type":155,"createdAt":156,"updatedAt":156,"publishedAt":156,"locale":16},"agv9d9dnu7pxc9ked3amj647","Admin","Главный админ блога — полный доступ к управлению на фронтенде","admin","2026-05-15T18:45:58.088Z",{"like":32,"dislike":23},{"data":159,"body":161,"toc":1153},{"title":123,"description":160},"Farcaster — это экспериментальный протокол децентрализованных социальных сетей, который разрабатывается для создания более свободных и безопасных онлайн-сообществ. Его основная цель — предоставить пользователям контроль над своими данными и взаимодействиями, снизив зависимость от централизованных платформ и их ограничений.",{"type":162,"children":163},"root",[164,171,187,192,206,213,244,257,263,268,275,288,302,315,321,332,338,348,354,365,371,383,396,402,407,427,456,664,683,709,714,720,742,748,753,788,794,799,804,822,889,913,950,1010,1030,1036,1049,1063,1077,1091,1105,1111,1116,1122,1147],{"type":165,"tag":166,"props":167,"children":168},"element","p",{},[169],{"type":170,"value":160},"text",{"type":165,"tag":166,"props":172,"children":173},{},[174,176,185],{"type":170,"value":175},"В попытке претендовать на дроп от проекта Farcaster и соцсети ",{"type":165,"tag":177,"props":178,"children":182},"a",{"href":179,"rel":180},"https:\u002F\u002Fwarpcast.com\u002F~\u002Finvite-page\u002F494760?id=75d42e8f",[181],"nofollow",[183],{"type":170,"value":184},"Warpcast",{"type":170,"value":186},", можно попробовать развернуть ноду.",{"type":165,"tag":166,"props":188,"children":189},{},[190],{"type":170,"value":191},"Постарался написать подробную инструкцию, предусмотрев множество вопросов, которые не раскрываются в других источниках.",{"type":165,"tag":166,"props":193,"children":194},{},[195,197,204],{"type":170,"value":196},"Кстати, тут есть ",{"type":165,"tag":177,"props":198,"children":201},{"href":199,"rel":200},"https:\u002F\u002Fdocs.farcaster.xyz\u002Fhubble\u002Finstall",[181],[202],{"type":170,"value":203},"офф инструкция",{"type":170,"value":205},".",{"type":165,"tag":207,"props":208,"children":210},"h2",{"id":209},"арендуем-сервер",[211],{"type":170,"value":212},"Арендуем сервер",{"type":165,"tag":166,"props":214,"children":215},{},[216,218,225,227,234,236,242],{"type":170,"value":217},"Я взял на ",{"type":165,"tag":177,"props":219,"children":222},{"href":220,"rel":221},"https:\u002F\u002Fbit.ly\u002FgvoXorekCloud",[181],[223],{"type":170,"value":224},"XorekCloud",{"type":170,"value":226}," VPS в Германии, тариф ",{"type":165,"tag":228,"props":229,"children":231},"code",{"className":230},[],[232],{"type":170,"value":233},"DE-i9-16",{"type":170,"value":235}," за 1400 руб, с таким конфигом: ",{"type":165,"tag":228,"props":237,"children":239},{"className":238},[],[240],{"type":170,"value":241},"8 vCPU, 16Gb RAM, 240Gb NVMe",{"type":170,"value":243},". Рекомендую диск брать от 200Gb, не смотря на то, что в оф доках пишут про 40Gb, которых нифига не хватает на данные, подтягиваемые нодой.",{"type":165,"tag":166,"props":245,"children":246},{},[247,249,255],{"type":170,"value":248},"При установке выбираем ",{"type":165,"tag":228,"props":250,"children":252},{"className":251},[],[253],{"type":170,"value":254},"Ubuntu 22",{"type":170,"value":256},", конечно же.",{"type":165,"tag":207,"props":258,"children":260},{"id":259},"регаем-свои-rpc",[261],{"type":170,"value":262},"Регаем свои RPC",{"type":165,"tag":166,"props":264,"children":265},{},[266],{"type":170,"value":267},"Можем выбрать один из нижеуказанных сервисов для своего RPC.",{"type":165,"tag":269,"props":270,"children":272},"h3",{"id":271},"alchemy",[273],{"type":170,"value":274},"Alchemy",{"type":165,"tag":166,"props":276,"children":277},{},[278,280,286],{"type":170,"value":279},"Заходим на ",{"type":165,"tag":177,"props":281,"children":284},{"href":282,"rel":283},"https:\u002F\u002Fwww.alchemy.com\u002F",[181],[285],{"type":170,"value":274},{"type":170,"value":287}," и регаемся. После этого переходим в свой аккаунт и слева в меню выбираем раздел \"Apps\", далее \"Create new app\". Там задаём любое название и сохраняем.",{"type":165,"tag":166,"props":289,"children":290},{},[291,300],{"type":165,"tag":177,"props":292,"children":295},{"href":293,"rel":294},"https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Falchemy_1_0f14693dad.png",[181],[296],{"type":165,"tag":297,"props":298,"children":299},"img",{"alt":123,"src":293},[],{"type":170,"value":301},"После создания приложения, заходим внутрь и выбираем вкладку \"Networks\". Там нам понадобятся RPC сетей Ethereum и Optimism.",{"type":165,"tag":166,"props":303,"children":304},{},[305,313],{"type":165,"tag":177,"props":306,"children":309},{"href":307,"rel":308},"https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Falchemy_2_c27bf22896.png",[181],[310],{"type":165,"tag":297,"props":311,"children":312},{"alt":123,"src":307},[],{"type":170,"value":314},"Пока оставляем вкладку открытой, мы к ней ещё обратимся.",{"type":165,"tag":269,"props":316,"children":318},{"id":317},"infura",[319],{"type":170,"value":320},"Infura",{"type":165,"tag":166,"props":322,"children":323},{},[324,326],{"type":170,"value":325},"Примерно те же действия. Ссылка – ",{"type":165,"tag":177,"props":327,"children":330},{"href":328,"rel":329},"https:\u002F\u002Finfura.io",[181],[331],{"type":170,"value":328},{"type":165,"tag":269,"props":333,"children":335},{"id":334},"quicknode",[336],{"type":170,"value":337},"Quicknode",{"type":165,"tag":166,"props":339,"children":340},{},[341,342],{"type":170,"value":325},{"type":165,"tag":177,"props":343,"children":346},{"href":344,"rel":345},"https:\u002F\u002Fquicknode.com",[181],[347],{"type":170,"value":344},{"type":165,"tag":269,"props":349,"children":351},{"id":350},"chainnodes",[352],{"type":170,"value":353},"Chainnodes",{"type":165,"tag":166,"props":355,"children":356},{},[357,359],{"type":170,"value":358},"Его я пока не пробовал. Ссылка – ",{"type":165,"tag":177,"props":360,"children":363},{"href":361,"rel":362},"https:\u002F\u002Fchainnodes.org",[181],[364],{"type":170,"value":361},{"type":165,"tag":207,"props":366,"children":368},{"id":367},"копируем-farcaster-id",[369],{"type":170,"value":370},"Копируем Farcaster ID",{"type":165,"tag":166,"props":372,"children":373},{},[374,376,381],{"type":170,"value":375},"Либо с телефона в приложении, либо с компа на ",{"type":165,"tag":177,"props":377,"children":379},{"href":179,"rel":378},[181],[380],{"type":170,"value":184},{"type":170,"value":382}," заходим в \"Profile\", далее вверху \"...\" и во всплывашке жмём \"About\".",{"type":165,"tag":166,"props":384,"children":385},{},[386,394],{"type":165,"tag":177,"props":387,"children":390},{"href":388,"rel":389},"https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fwarpcast_1_31883b9868.png",[181],[391],{"type":165,"tag":297,"props":392,"children":393},{"alt":123,"src":388},[],{"type":170,"value":395},"Оттуда нам скоро понадобится скопировать FID.",{"type":165,"tag":207,"props":397,"children":399},{"id":398},"разворачиваем-ноду",[400],{"type":170,"value":401},"Разворачиваем ноду",{"type":165,"tag":166,"props":403,"children":404},{},[405],{"type":170,"value":406},"Пока мы совершали все эти действия, наш сервер должны уже были активировать. Вам на почту должны придти доступы.",{"type":165,"tag":166,"props":408,"children":409},{},[410,412,416,422,425],{"type":170,"value":411},"Заходим через терминал по протоколу SSH и выполняем команды по очереди:",{"type":165,"tag":413,"props":414,"children":415},"br",{},[],{"type":165,"tag":228,"props":417,"children":419},{"className":418},[],[420],{"type":170,"value":421},"sudo apt update -y && sudo apt install -y screen git zip unzip mc nano htop cron libyaml-dev iptables-persistent && dpkg -L iptables-persistent",{"type":165,"tag":413,"props":423,"children":424},{},[],{"type":170,"value":426},"\nВ процессе спросит два вопроса про сохранение IPv4 и IPv6 правил. Говорим \"Yes\".",{"type":165,"tag":166,"props":428,"children":429},{},[430,432,438,440,446,448,454],{"type":170,"value":431},"После этого сразу открываем порты ",{"type":165,"tag":228,"props":433,"children":435},{"className":434},[],[436],{"type":170,"value":437},"3381",{"type":170,"value":439},", ",{"type":165,"tag":228,"props":441,"children":443},{"className":442},[],[444],{"type":170,"value":445},"3382",{"type":170,"value":447}," и ",{"type":165,"tag":228,"props":449,"children":451},{"className":450},[],[452],{"type":170,"value":453},"3383",{"type":170,"value":455}," для доступа входящих и исходящих соединений:",{"type":165,"tag":457,"props":458,"children":463},"pre",{"className":459,"code":460,"language":461,"meta":123,"style":462},"language-bash shiki shiki-themes github-light catppuccin-mocha","sudo iptables -A INPUT -p tcp --dport 3381 -j ACCEPT\nsudo iptables -A INPUT -p tcp --dport 3382 -j ACCEPT\nsudo iptables -A INPUT -p tcp --dport 3383 -j ACCEPT\nsudo iptables-save > \u002Fetc\u002Fiptables\u002Frules.v4\nsudo iptables -L -v -n\n","bash","--shiki-default:#24292e;--shiki-dark:#cdd6f4;--shiki-default-bg:#fff;--shiki-dark-bg:#1e1e2e",[464],{"type":165,"tag":228,"props":465,"children":466},{"__ignoreMap":123},[467,526,570,614,637],{"type":165,"tag":468,"props":469,"children":471},"span",{"class":470,"line":40},"line",[472,478,484,490,495,500,505,510,516,521],{"type":165,"tag":468,"props":473,"children":475},{"style":474},"--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic",[476],{"type":170,"value":477},"sudo",{"type":165,"tag":468,"props":479,"children":481},{"style":480},"--shiki-default:#032F62;--shiki-dark:#A6E3A1",[482],{"type":170,"value":483}," iptables",{"type":165,"tag":468,"props":485,"children":487},{"style":486},"--shiki-default:#005CC5;--shiki-dark:#A6E3A1",[488],{"type":170,"value":489}," -A",{"type":165,"tag":468,"props":491,"children":492},{"style":480},[493],{"type":170,"value":494}," INPUT",{"type":165,"tag":468,"props":496,"children":497},{"style":486},[498],{"type":170,"value":499}," -p",{"type":165,"tag":468,"props":501,"children":502},{"style":480},[503],{"type":170,"value":504}," tcp",{"type":165,"tag":468,"props":506,"children":507},{"style":486},[508],{"type":170,"value":509}," --dport",{"type":165,"tag":468,"props":511,"children":513},{"style":512},"--shiki-default:#005CC5;--shiki-dark:#FAB387",[514],{"type":170,"value":515}," 3381",{"type":165,"tag":468,"props":517,"children":518},{"style":486},[519],{"type":170,"value":520}," -j",{"type":165,"tag":468,"props":522,"children":523},{"style":480},[524],{"type":170,"value":525}," ACCEPT\n",{"type":165,"tag":468,"props":527,"children":528},{"class":470,"line":32},[529,533,537,541,545,549,553,557,562,566],{"type":165,"tag":468,"props":530,"children":531},{"style":474},[532],{"type":170,"value":477},{"type":165,"tag":468,"props":534,"children":535},{"style":480},[536],{"type":170,"value":483},{"type":165,"tag":468,"props":538,"children":539},{"style":486},[540],{"type":170,"value":489},{"type":165,"tag":468,"props":542,"children":543},{"style":480},[544],{"type":170,"value":494},{"type":165,"tag":468,"props":546,"children":547},{"style":486},[548],{"type":170,"value":499},{"type":165,"tag":468,"props":550,"children":551},{"style":480},[552],{"type":170,"value":504},{"type":165,"tag":468,"props":554,"children":555},{"style":486},[556],{"type":170,"value":509},{"type":165,"tag":468,"props":558,"children":559},{"style":512},[560],{"type":170,"value":561}," 3382",{"type":165,"tag":468,"props":563,"children":564},{"style":486},[565],{"type":170,"value":520},{"type":165,"tag":468,"props":567,"children":568},{"style":480},[569],{"type":170,"value":525},{"type":165,"tag":468,"props":571,"children":572},{"class":470,"line":105},[573,577,581,585,589,593,597,601,606,610],{"type":165,"tag":468,"props":574,"children":575},{"style":474},[576],{"type":170,"value":477},{"type":165,"tag":468,"props":578,"children":579},{"style":480},[580],{"type":170,"value":483},{"type":165,"tag":468,"props":582,"children":583},{"style":486},[584],{"type":170,"value":489},{"type":165,"tag":468,"props":586,"children":587},{"style":480},[588],{"type":170,"value":494},{"type":165,"tag":468,"props":590,"children":591},{"style":486},[592],{"type":170,"value":499},{"type":165,"tag":468,"props":594,"children":595},{"style":480},[596],{"type":170,"value":504},{"type":165,"tag":468,"props":598,"children":599},{"style":486},[600],{"type":170,"value":509},{"type":165,"tag":468,"props":602,"children":603},{"style":512},[604],{"type":170,"value":605}," 3383",{"type":165,"tag":468,"props":607,"children":608},{"style":486},[609],{"type":170,"value":520},{"type":165,"tag":468,"props":611,"children":612},{"style":480},[613],{"type":170,"value":525},{"type":165,"tag":468,"props":615,"children":616},{"class":470,"line":12},[617,621,626,632],{"type":165,"tag":468,"props":618,"children":619},{"style":474},[620],{"type":170,"value":477},{"type":165,"tag":468,"props":622,"children":623},{"style":480},[624],{"type":170,"value":625}," iptables-save",{"type":165,"tag":468,"props":627,"children":629},{"style":628},"--shiki-default:#D73A49;--shiki-dark:#94E2D5",[630],{"type":170,"value":631}," >",{"type":165,"tag":468,"props":633,"children":634},{"style":480},[635],{"type":170,"value":636}," \u002Fetc\u002Fiptables\u002Frules.v4\n",{"type":165,"tag":468,"props":638,"children":640},{"class":470,"line":639},5,[641,645,649,654,659],{"type":165,"tag":468,"props":642,"children":643},{"style":474},[644],{"type":170,"value":477},{"type":165,"tag":468,"props":646,"children":647},{"style":480},[648],{"type":170,"value":483},{"type":165,"tag":468,"props":650,"children":651},{"style":486},[652],{"type":170,"value":653}," -L",{"type":165,"tag":468,"props":655,"children":656},{"style":486},[657],{"type":170,"value":658}," -v",{"type":165,"tag":468,"props":660,"children":661},{"style":486},[662],{"type":170,"value":663}," -n\n",{"type":165,"tag":166,"props":665,"children":666},{},[667,669,672,678,681],{"type":170,"value":668},"После этого выполняем команду установки самой ноды:",{"type":165,"tag":413,"props":670,"children":671},{},[],{"type":165,"tag":228,"props":673,"children":675},{"className":674},[],[676],{"type":170,"value":677},"curl -sSL https:\u002F\u002Fraw.githubusercontent.com\u002Ffarcasterxyz\u002Fsnapchain\u002Frefs\u002Fheads\u002Fmain\u002Fscripts\u002Fsnapchain-bootstrap.sh | bash",{"type":165,"tag":413,"props":679,"children":680},{},[],{"type":170,"value":682},"\nПри установке будут три вопроса, в поле первого копируем из Alchemy наш Ethereum RPC, во второй – Optimism RPC, в третий Farcaster ID (FID из Warpcast).",{"type":165,"tag":166,"props":684,"children":685},{},[686,688,691,699,701,707],{"type":170,"value":687},"После успешной установки приложение выдаст логи:",{"type":165,"tag":413,"props":689,"children":690},{},[],{"type":165,"tag":177,"props":692,"children":695},{"href":693,"rel":694},"https:\u002F\u002Fbackend.new.gvozdb.ru\u002Fuploads\u002Fserver_1_eb49b0015a.png",[181],[696],{"type":165,"tag":297,"props":697,"children":698},{"alt":123,"src":693},[],{"type":170,"value":700},"Можно выйти комбинацией клавиш ",{"type":165,"tag":228,"props":702,"children":704},{"className":703},[],[705],{"type":170,"value":706},"Ctrl+C",{"type":170,"value":708},", приложение при этом не завершится.",{"type":165,"tag":166,"props":710,"children":711},{},[712],{"type":170,"value":713},"Теперь нужно будет подождать несколько часов, пока нода синхронизируется с текущим состоянием сети.",{"type":165,"tag":207,"props":715,"children":717},{"id":716},"следим-за-нодой",[718],{"type":170,"value":719},"Следим за нодой",{"type":165,"tag":166,"props":721,"children":722},{},[723,725,731,733,736],{"type":170,"value":724},"Для того, чтобы отслеживать работу ноды, можно перейти в браузере по IP вашего сервера, подставив ",{"type":165,"tag":228,"props":726,"children":728},{"className":727},[],[729],{"type":170,"value":730},"3000",{"type":170,"value":732}," порт. Будет выглядеть так:",{"type":165,"tag":413,"props":734,"children":735},{},[],{"type":165,"tag":228,"props":737,"children":739},{"className":738},[],[740],{"type":170,"value":741},"http:\u002F\u002FSERVER_IP:3000",{"type":165,"tag":207,"props":743,"children":745},{"id":744},"обновляем-rpc-без-удаления-ноды",[746],{"type":170,"value":747},"Обновляем RPC без удаления ноды",{"type":165,"tag":166,"props":749,"children":750},{},[751],{"type":170,"value":752},"Мне пришлось переехать и от Alchemy, и от Infura, потому что не хватало лимита запросов. Пока для данной ноды выбрал Quicknode.",{"type":165,"tag":166,"props":754,"children":755},{},[756,758,764,766,772,774,780,781,787],{"type":170,"value":757},"Чтобы обновить RPC, не удаляя при этом ноду со всем скачанным ранее блокчейном, заходим в ",{"type":165,"tag":228,"props":759,"children":761},{"className":760},[],[762],{"type":170,"value":763},"~\u002Fhubble",{"type":170,"value":765},", открываем файл ",{"type":165,"tag":228,"props":767,"children":769},{"className":768},[],[770],{"type":170,"value":771},".env",{"type":170,"value":773},", где правим 2 переменные: ",{"type":165,"tag":228,"props":775,"children":777},{"className":776},[],[778],{"type":170,"value":779},"ETH_MAINNET_RPC_URL",{"type":170,"value":447},{"type":165,"tag":228,"props":782,"children":784},{"className":783},[],[785],{"type":170,"value":786},"OPTIMISM_L2_RPC_URL",{"type":170,"value":205},{"type":165,"tag":207,"props":789,"children":791},{"id":790},"закончилось-место",[792],{"type":170,"value":793},"Закончилось место",{"type":165,"tag":166,"props":795,"children":796},{},[797],{"type":170,"value":798},"Если на сервере закончилось место из-за ноды Farcaster, то 99% причина в том, что Grafana хранит слишком много логов статистических метрик, которые нам нафиг не нужны.",{"type":165,"tag":166,"props":800,"children":801},{},[802],{"type":170,"value":803},"Вот как это можно почистить и настроить ноду таким образом, чтобы такой проблемы больше не возникало:",{"type":165,"tag":805,"props":806,"children":807},"ol",{},[808],{"type":165,"tag":809,"props":810,"children":811},"li",{},[812,814,820],{"type":170,"value":813},"Создаём ",{"type":165,"tag":228,"props":815,"children":817},{"className":816},[],[818],{"type":170,"value":819},"\u002Froot\u002Fhubble\u002Fstorage-schemas.conf",{"type":170,"value":821}," с таким содержимым:",{"type":165,"tag":457,"props":823,"children":827},{"className":824,"code":825,"language":826,"meta":123,"style":462},"language-ini shiki shiki-themes github-light catppuccin-mocha","[default]\npattern = .*\nretentions = 10s:6h\n","ini",[828],{"type":165,"tag":228,"props":829,"children":830},{"__ignoreMap":123},[831,851,872],{"type":165,"tag":468,"props":832,"children":833},{"class":470,"line":40},[834,840,846],{"type":165,"tag":468,"props":835,"children":837},{"style":836},"--shiki-default:#6F42C1;--shiki-dark:#9399B2",[838],{"type":170,"value":839},"[",{"type":165,"tag":468,"props":841,"children":843},{"style":842},"--shiki-default:#6F42C1;--shiki-dark:#F9E2AF",[844],{"type":170,"value":845},"default",{"type":165,"tag":468,"props":847,"children":848},{"style":836},[849],{"type":170,"value":850},"]\n",{"type":165,"tag":468,"props":852,"children":853},{"class":470,"line":32},[854,860,866],{"type":165,"tag":468,"props":855,"children":857},{"style":856},"--shiki-default:#D73A49;--shiki-dark:#89B4FA",[858],{"type":170,"value":859},"pattern",{"type":165,"tag":468,"props":861,"children":863},{"style":862},"--shiki-default:#24292E;--shiki-dark:#94E2D5",[864],{"type":170,"value":865}," =",{"type":165,"tag":468,"props":867,"children":869},{"style":868},"--shiki-default:#24292E;--shiki-dark:#CDD6F4",[870],{"type":170,"value":871}," .*\n",{"type":165,"tag":468,"props":873,"children":874},{"class":470,"line":105},[875,880,884],{"type":165,"tag":468,"props":876,"children":877},{"style":856},[878],{"type":170,"value":879},"retentions",{"type":165,"tag":468,"props":881,"children":882},{"style":862},[883],{"type":170,"value":865},{"type":165,"tag":468,"props":885,"children":886},{"style":868},[887],{"type":170,"value":888}," 10s:6h\n",{"type":165,"tag":805,"props":890,"children":891},{"start":32},[892],{"type":165,"tag":809,"props":893,"children":894},{},[895,897,903,905,911],{"type":170,"value":896},"Указываем в ",{"type":165,"tag":228,"props":898,"children":900},{"className":899},[],[901],{"type":170,"value":902},"\u002Froot\u002Fhubble\u002Fdocker-compose.yml",{"type":170,"value":904}," в контейнере ",{"type":165,"tag":228,"props":906,"children":908},{"className":907},[],[909],{"type":170,"value":910},"statsd",{"type":170,"value":912}," путь к данному конфигу:",{"type":165,"tag":457,"props":914,"children":918},{"className":915,"code":916,"language":917,"meta":123,"style":462},"language-yaml shiki shiki-themes github-light catppuccin-mocha","volumes:\n  - .\u002Fstorage-schemas.conf:\u002Fopt\u002Fgraphite\u002Fconf\u002Fstorage-schemas.conf:ro\n","yaml",[919],{"type":165,"tag":228,"props":920,"children":921},{"__ignoreMap":123},[922,936],{"type":165,"tag":468,"props":923,"children":924},{"class":470,"line":40},[925,931],{"type":165,"tag":468,"props":926,"children":928},{"style":927},"--shiki-default:#22863A;--shiki-dark:#89B4FA",[929],{"type":170,"value":930},"volumes",{"type":165,"tag":468,"props":932,"children":933},{"style":862},[934],{"type":170,"value":935},":\n",{"type":165,"tag":468,"props":937,"children":938},{"class":470,"line":32},[939,945],{"type":165,"tag":468,"props":940,"children":942},{"style":941},"--shiki-default:#24292E;--shiki-dark:#9399B2",[943],{"type":170,"value":944},"  -",{"type":165,"tag":468,"props":946,"children":947},{"style":480},[948],{"type":170,"value":949}," .\u002Fstorage-schemas.conf:\u002Fopt\u002Fgraphite\u002Fconf\u002Fstorage-schemas.conf:ro\n",{"type":165,"tag":805,"props":951,"children":952},{"start":105},[953,967,996],{"type":165,"tag":809,"props":954,"children":955},{},[956,958,961],{"type":170,"value":957},"Вручную находим жирную папку с мусорными логами:",{"type":165,"tag":413,"props":959,"children":960},{},[],{"type":165,"tag":228,"props":962,"children":964},{"className":963},[],[965],{"type":170,"value":966},"du -sh \u002Fvar\u002Flib\u002Fdocker\u002Fvolumes\u002F*\u002F_data\u002Fwhisper 2>\u002Fdev\u002Fnull | sort -hr",{"type":165,"tag":809,"props":968,"children":969},{},[970,972,975,981,984,994],{"type":170,"value":971},"Берём её полный путь и вставляем в команду на удаление:",{"type":165,"tag":413,"props":973,"children":974},{},[],{"type":165,"tag":228,"props":976,"children":978},{"className":977},[],[979],{"type":170,"value":980},"rm -rf ПУТЬ_К_МУСОРНОЙ_ПАПКЕ",{"type":165,"tag":413,"props":982,"children":983},{},[],{"type":165,"tag":985,"props":986,"children":987},"em",{},[988],{"type":165,"tag":989,"props":990,"children":991},"strong",{},[992],{"type":170,"value":993},"Внимательно укажите путь",{"type":170,"value":995},"*, чтобы не удалить нахрен весь сервер!*",{"type":165,"tag":809,"props":997,"children":998},{},[999,1001,1004],{"type":170,"value":1000},"Перезапускаем контейнеры ноды:",{"type":165,"tag":413,"props":1002,"children":1003},{},[],{"type":165,"tag":228,"props":1005,"children":1007},{"className":1006},[],[1008],{"type":170,"value":1009},"cd ~\u002Fhubble && docker compose down && docker compose up -d",{"type":165,"tag":166,"props":1011,"children":1012},{},[1013,1015,1021,1023,1028],{"type":170,"value":1014},"Главным минусом данного решения является то, что после обновления ноды командой ",{"type":165,"tag":228,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":170,"value":1020},"cd ~\u002Fhubble && .\u002Fhubble.sh upgrade",{"type":170,"value":1022}," нам всегда придётся заново вносить изменения из 2 пункта, а именно в ",{"type":165,"tag":228,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":170,"value":902},{"type":170,"value":1029}," и далее выполнять команду из 5 пункта (перезапуск контейнеров ноды). Не забывайте об этом!",{"type":165,"tag":207,"props":1031,"children":1033},{"id":1032},"полезные-команды",[1034],{"type":170,"value":1035},"Полезные команды",{"type":165,"tag":166,"props":1037,"children":1038},{},[1039,1041,1044],{"type":170,"value":1040},"Обновить ноду:",{"type":165,"tag":413,"props":1042,"children":1043},{},[],{"type":165,"tag":228,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":170,"value":1020},{"type":165,"tag":166,"props":1050,"children":1051},{},[1052,1054,1057],{"type":170,"value":1053},"Проверить место занятое докером:",{"type":165,"tag":413,"props":1055,"children":1056},{},[],{"type":165,"tag":228,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":170,"value":1062},"docker system df",{"type":165,"tag":166,"props":1064,"children":1065},{},[1066,1068,1071],{"type":170,"value":1067},"Очистить место занятое докером впустую:",{"type":165,"tag":413,"props":1069,"children":1070},{},[],{"type":165,"tag":228,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":170,"value":1076},"docker image prune -f && docker volume prune -f && docker container prune -f && docker system prune -f && docker volume rm $(docker volume ls -q) && docker image rm $(docker image ls -f dangling=true -q)",{"type":165,"tag":166,"props":1078,"children":1079},{},[1080,1082,1085],{"type":170,"value":1081},"Просмотреть логи:",{"type":165,"tag":413,"props":1083,"children":1084},{},[],{"type":165,"tag":228,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":170,"value":1090},"docker logs hubble-hubble-1 --since 1m -f",{"type":165,"tag":166,"props":1092,"children":1093},{},[1094,1096,1099],{"type":170,"value":1095},"Удалить ноду:",{"type":165,"tag":413,"props":1097,"children":1098},{},[],{"type":165,"tag":228,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":170,"value":1104},"docker container stop $(docker container ls -aq) && docker container rm -f $(docker container ls -aq) && docker image rm $(docker image ls -q) && service docker restart && rm -rf \u002Froot\u002Fhubble",{"type":165,"tag":207,"props":1106,"children":1108},{"id":1107},"возможные-ошибки",[1109],{"type":170,"value":1110},"Возможные ошибки",{"type":165,"tag":166,"props":1112,"children":1113},{},[1114],{"type":170,"value":1115},"Пробуем решать проблемы, связанные с нодой Farcaster. Если сталкиваетесь с ошибками, не описанными здесь, то пишите об этом в комментариях.",{"type":165,"tag":269,"props":1117,"children":1119},{"id":1118},"статус-starting-up-please-wait-на-дашборде",[1120],{"type":170,"value":1121},"Статус \"Starting up... Please wait\" на дашборде",{"type":165,"tag":166,"props":1123,"children":1124},{},[1125,1127,1132,1134,1137,1142,1145],{"type":170,"value":1126},"На дашборде Grafana по адресу ",{"type":165,"tag":228,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":170,"value":741},{"type":170,"value":1133}," многие блоки показывают статус \"Starting up... Please wait\". Можно попробовать запустить команду обновления ноды:",{"type":165,"tag":413,"props":1135,"children":1136},{},[],{"type":165,"tag":228,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":170,"value":1020},{"type":165,"tag":413,"props":1143,"children":1144},{},[],{"type":170,"value":1146},"\nЭто должно помочь решить проблему.",{"type":165,"tag":1148,"props":1149,"children":1150},"style",{},[1151],{"type":170,"value":1152},".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":1154},[1155,1156,1162,1163,1164,1165,1166,1167,1168],{"id":209,"depth":32,"text":212},{"id":259,"depth":32,"text":262,"children":1157},[1158,1159,1160,1161],{"id":271,"depth":105,"text":274},{"id":317,"depth":105,"text":320},{"id":334,"depth":105,"text":337},{"id":350,"depth":105,"text":353},{"id":367,"depth":32,"text":370},{"id":398,"depth":32,"text":401},{"id":716,"depth":32,"text":719},{"id":744,"depth":32,"text":747},{"id":790,"depth":32,"text":793},{"id":1032,"depth":32,"text":1035},{"id":1107,"depth":32,"text":1110,"children":1169},[1170],{"id":1118,"depth":105,"text":1121},[],[1173,1187,1200,1210,1220,1232,1240,1248,1257,1266,1275,1284,1293,1302,1311],{"id":1174,"documentId":1175,"name":1176,"slug":1177,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1178,"updatedAt":1178,"publishedAt":1179,"locale":22,"heading":16,"desc":16,"posts":1180},15,"aju4latl5hi6906pt0ktlb1g","Linux","linux","2026-05-16T10:03:45.426Z","2026-05-16T10:03:45.422Z",[1181,1182,1183,1184,1185,1186],{"id":61,"documentId":62},{"id":64,"documentId":65},{"id":67,"documentId":68},{"id":70,"documentId":71},{"id":85,"documentId":86},{"id":96,"documentId":97},{"id":1188,"documentId":1189,"name":1190,"slug":1191,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1192,"updatedAt":1192,"publishedAt":1193,"locale":22,"heading":16,"desc":16,"posts":1194},6,"mau3qzs4gq9pxckgymu674yr","MODX","modx","2026-05-16T10:03:44.164Z","2026-05-16T10:03:44.154Z",[1195,1196,1197,1198,1199],{"id":49,"documentId":50},{"id":52,"documentId":53},{"id":76,"documentId":77},{"id":90,"documentId":91},{"id":93,"documentId":94},{"id":1201,"documentId":1202,"name":1203,"slug":1204,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1205,"updatedAt":1205,"publishedAt":1206,"locale":22,"heading":16,"desc":16,"posts":1207},19,"bfi7bs1ny52g8tz3ok8wrngy","macOS","macos","2026-05-16T10:33:46.268Z","2026-05-16T10:33:46.265Z",[1208,1209],{"id":43,"documentId":44},{"id":58,"documentId":59},{"id":1211,"documentId":1212,"name":1213,"slug":1214,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1215,"updatedAt":1215,"publishedAt":1216,"locale":22,"heading":16,"desc":16,"posts":1217},20,"georvivt518jgm5vp8rcv0kv","Инструменты","instrumenty","2026-05-16T10:33:46.941Z","2026-05-16T10:33:46.938Z",[1218,1219],{"id":55,"documentId":56},{"id":79,"documentId":80},{"id":1221,"documentId":1222,"name":1223,"slug":1224,"textcolor":16,"bgcolor":16,"published":17,"uri":1225,"createdAt":1226,"updatedAt":1226,"publishedAt":1227,"locale":22,"heading":1228,"desc":123,"posts":1229},31,"dcyh9y95rmthzo6oip4ftoez","AI","ai","\u002Fai","2026-05-30T10:54:12.198Z","2026-05-30T10:54:12.192Z","Искусственный интеллект",[1230,1231],{"id":99,"documentId":100},{"id":102,"documentId":103},{"id":105,"documentId":1233,"name":1234,"slug":1235,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1236,"updatedAt":1236,"publishedAt":1237,"locale":22,"heading":16,"desc":16,"posts":1238},"tfr5asfr2apchhtgxje8epz1","Стихи","stihi","2026-05-16T10:03:43.872Z","2026-05-16T10:03:43.861Z",[1239],{"id":26,"documentId":27},{"id":639,"documentId":1241,"name":1242,"slug":1243,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1244,"updatedAt":1244,"publishedAt":1245,"locale":22,"heading":16,"desc":16,"posts":1246},"c7joczpqlb928nxr2l5qyg9m","Мысли","mysli","2026-05-16T10:03:44.061Z","2026-05-16T10:03:44.054Z",[1247],{"id":115,"documentId":116},{"id":1249,"documentId":1250,"name":1251,"slug":1252,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1253,"updatedAt":1253,"publishedAt":1254,"locale":22,"heading":16,"desc":16,"posts":1255},8,"dwpf4sx017aq366ygh46evsc","Психология","psihologiya","2026-05-16T10:03:44.268Z","2026-05-16T10:03:44.264Z",[1256],{"id":118,"documentId":119},{"id":1258,"documentId":1259,"name":1260,"slug":1261,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1262,"updatedAt":1262,"publishedAt":1263,"locale":22,"heading":16,"desc":16,"posts":1264},13,"qolbs7a9lkvr15oytyy3gj03","CSS","css","2026-05-16T10:03:45.289Z","2026-05-16T10:03:45.283Z",[1265],{"id":82,"documentId":83},{"id":1267,"documentId":1268,"name":1269,"slug":1270,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1271,"updatedAt":1271,"publishedAt":1272,"locale":22,"heading":16,"desc":16,"posts":1273},14,"lz1k1ridxwxre34lzf0jfl3t","SASS","sass","2026-05-16T10:03:45.319Z","2026-05-16T10:03:45.314Z",[1274],{"id":82,"documentId":83},{"id":1276,"documentId":1277,"name":1278,"slug":1279,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1280,"updatedAt":1280,"publishedAt":1281,"locale":22,"heading":16,"desc":16,"posts":1282},16,"czaf643kmvvab1xf4gx3ddh9","VPN","vpn","2026-05-16T10:03:45.455Z","2026-05-16T10:03:45.446Z",[1283],{"id":85,"documentId":86},{"id":1285,"documentId":1286,"name":1287,"slug":1288,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1289,"updatedAt":1289,"publishedAt":1290,"locale":22,"heading":16,"desc":16,"posts":1291},18,"gpitv9ds3usb3p8j7sgajglb","SEO","seo","2026-05-16T10:33:46.002Z","2026-05-16T10:33:45.995Z",[1292],{"id":46,"documentId":47},{"id":1294,"documentId":1295,"name":1296,"slug":1297,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1298,"updatedAt":1298,"publishedAt":1299,"locale":22,"heading":16,"desc":16,"posts":1300},21,"htsr27rbn93onqsys2gavt4m","Phpstorm","phpstorm","2026-05-16T10:33:46.959Z","2026-05-16T10:33:46.956Z",[1301],{"id":55,"documentId":56},{"id":1303,"documentId":1304,"name":1305,"slug":1306,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":1307,"updatedAt":1307,"publishedAt":1308,"locale":22,"heading":16,"desc":16,"posts":1309},29,"l9ruh02w7yl3rvez05s8ndv7","Node.js","node-js","2026-05-16T10:33:47.947Z","2026-05-16T10:33:47.944Z",[1310],{"id":73,"documentId":74},{"id":136,"documentId":137,"name":138,"slug":139,"textcolor":16,"bgcolor":16,"published":17,"uri":16,"createdAt":140,"updatedAt":140,"publishedAt":141,"locale":22,"heading":16,"desc":16,"posts":1312},[1313],{"id":88,"documentId":6}]