[{"data":1,"prerenderedAt":603},["ShallowReactive",2],{"navigation_docs":3,"-operations-restore":133,"-operations-restore-surround":600},[4,24,67,89,107],{"title":5,"path":6,"stem":7,"children":8,"icon":23},"Начало работы","\u002Fgetting-started","1.getting-started\u002F1.index",[9,11,15,19],{"title":10,"path":6,"stem":7},"Введение",{"title":12,"path":13,"stem":14},"Возможности","\u002Fgetting-started\u002Fopportunities","1.getting-started\u002F2.opportunities",{"title":16,"path":17,"stem":18},"Установка и запуск","\u002Fgetting-started\u002Finstalling","1.getting-started\u002F3.installing",{"title":20,"path":21,"stem":22},"Вход и пароль","\u002Fgetting-started\u002Ffirst-login","1.getting-started\u002F4.first-login","i-lucide-book-open",{"title":25,"icon":26,"path":27,"stem":28,"children":29,"page":66},"Управление","i-lucide-folder-kanban","\u002Fusage","2.usage",[30,34,38,42,46,50,54,58,62],{"title":31,"path":32,"stem":33},"Проекты","\u002Fusage\u002Fprojects","2.usage\u002F1.projects",{"title":35,"path":36,"stem":37},"Доменные имена","\u002Fusage\u002Fconstructor","2.usage\u002F2.constructor",{"title":39,"path":40,"stem":41},"Прокси и защита","\u002Fusage\u002Fproxy-settings","2.usage\u002F3.proxy-settings",{"title":43,"path":44,"stem":45},"TCP с TLS","\u002Fusage\u002Ftcp-tls","2.usage\u002F4.tcp-tls",{"title":47,"path":48,"stem":49},"Ручной Caddyfile","\u002Fusage\u002Fmanual-block","2.usage\u002F5.manual-block",{"title":51,"path":52,"stem":53},"Тестовые поддомены","\u002Fusage\u002Ftest-subdomains","2.usage\u002F6.test-subdomains",{"title":55,"path":56,"stem":57},"Пользователи","\u002Fusage\u002Fusers","2.usage\u002F7.users",{"title":59,"path":60,"stem":61},"Права доступа","\u002Fusage\u002Froles","2.usage\u002F8.roles",{"title":63,"path":64,"stem":65},"Обновление","\u002Fusage\u002Fupdating","2.usage\u002F9.updating",false,{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":66},"Docker","i-lucide-container","\u002Fdocker","3.docker",[73,77,81,85],{"title":74,"path":75,"stem":76},"Контейнеры","\u002Fdocker\u002Fcontainers","3.docker\u002F1.containers",{"title":78,"path":79,"stem":80},"Сервисы Swarm","\u002Fdocker\u002Fservices","3.docker\u002F2.services",{"title":82,"path":83,"stem":84},"Логи и терминал","\u002Fdocker\u002Flogs-terminal","3.docker\u002F3.logs-terminal",{"title":86,"path":87,"stem":88},"Сети","\u002Fdocker\u002Fnetworks","3.docker\u002F4.networks",{"title":90,"icon":91,"path":92,"stem":93,"children":94,"page":66},"Хранилища и файлы","i-lucide-folder-open","\u002Ffiles","4.files",[95,99,103],{"title":96,"path":97,"stem":98},"Хранилища","\u002Ffiles\u002Fvolumes","4.files\u002F1.volumes",{"title":100,"path":101,"stem":102},"Файловый менеджер","\u002Ffiles\u002Fmanager","4.files\u002F2.manager",{"title":104,"path":105,"stem":106},"Текстовый редактор","\u002Ffiles\u002Feditor","4.files\u002F3.editor",{"title":108,"icon":109,"path":110,"stem":111,"children":112,"page":66},"Обслуживание","i-lucide-wrench","\u002Foperations","5.operations",[113,117,121,125,129],{"title":114,"path":115,"stem":116},"Диск и настройки","\u002Foperations\u002Fmaintenance","5.operations\u002F1.maintenance",{"title":118,"path":119,"stem":120},"Резервные копии","\u002Foperations\u002Fbackups","5.operations\u002F2.backups",{"title":122,"path":123,"stem":124},"Решение проблем","\u002Foperations\u002Ftroubleshooting","5.operations\u002F3.troubleshooting",{"title":126,"path":127,"stem":128},"Безопасность","\u002Foperations\u002Fsecurity","5.operations\u002F4.security",{"title":130,"path":131,"stem":132},"Восстановление SQLite","\u002Foperations\u002Frestore","5.operations\u002F5.restore",{"id":134,"title":130,"body":135,"description":594,"extension":595,"links":596,"meta":597,"navigation":228,"path":131,"seo":598,"stem":132,"__hash__":599},"docs\u002F5.operations\u002F5.restore.md",{"type":136,"value":137,"toc":588},"minimark",[138,142,147,160,323,333,336,339,343,346,361,364,386,389,393,400,563,566,570,581,584],[139,140,141],"p",{},"Восстановление требует SSH и административного доступа к Docker. Это операция\nс данными всей панели; предусмотренного мастера в интерфейсе нет. Сначала\nпроверьте процедуру на отдельном окружении. Данные приложений восстанавливаются отдельно.",[143,144,146],"h2",{"id":145},"сначала-проверьте-копию","Сначала проверьте копию",[139,148,149,150,154,155,159],{},"Выберите ",[151,152,153],"strong",{},"тот же образ Asmy",", из которого сделана копия, и существующий файл.\nВ примерах замените ",[156,157,158],"code",{},"X.Y.Z"," и дату реальными значениями:",[161,162,167],"pre",{"className":163,"code":164,"language":165,"meta":166,"style":166},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","IMAGE=\"alexbidenko\u002Fadmire-server-manager:X.Y.Z\"\nBACKUP=\"daily-2026-10-15.sqlite\"\ndocker volume create asmy-restore-check\n\ndocker run --rm \\\n  -v asmy-restore-check:\u002Fgo\u002Fapp\u002Fdata \\\n  -v admire-server-manager_backups:\u002Fgo\u002Fapp\u002Fbackups:ro \\\n  \"$IMAGE\" storage restore \"\u002Fgo\u002Fapp\u002Fbackups\u002F$BACKUP\"\n\ndocker run --rm -v asmy-restore-check:\u002Fgo\u002Fapp\u002Fdata \"$IMAGE\" storage check\n","bash","",[156,168,169,192,207,223,230,244,255,265,293,298],{"__ignoreMap":166},[170,171,174,178,182,185,189],"span",{"class":172,"line":173},"line",1,[170,175,177],{"class":176},"sTEyZ","IMAGE",[170,179,181],{"class":180},"sMK4o","=",[170,183,184],{"class":180},"\"",[170,186,188],{"class":187},"sfazB","alexbidenko\u002Fadmire-server-manager:X.Y.Z",[170,190,191],{"class":180},"\"\n",[170,193,195,198,200,202,205],{"class":172,"line":194},2,[170,196,197],{"class":176},"BACKUP",[170,199,181],{"class":180},[170,201,184],{"class":180},[170,203,204],{"class":187},"daily-2026-10-15.sqlite",[170,206,191],{"class":180},[170,208,210,214,217,220],{"class":172,"line":209},3,[170,211,213],{"class":212},"sBMFI","docker",[170,215,216],{"class":187}," volume",[170,218,219],{"class":187}," create",[170,221,222],{"class":187}," asmy-restore-check\n",[170,224,226],{"class":172,"line":225},4,[170,227,229],{"emptyLinePlaceholder":228},true,"\n",[170,231,233,235,238,241],{"class":172,"line":232},5,[170,234,213],{"class":212},[170,236,237],{"class":187}," run",[170,239,240],{"class":187}," --rm",[170,242,243],{"class":176}," \\\n",[170,245,247,250,253],{"class":172,"line":246},6,[170,248,249],{"class":187},"  -v",[170,251,252],{"class":187}," asmy-restore-check:\u002Fgo\u002Fapp\u002Fdata",[170,254,243],{"class":176},[170,256,258,260,263],{"class":172,"line":257},7,[170,259,249],{"class":187},[170,261,262],{"class":187}," admire-server-manager_backups:\u002Fgo\u002Fapp\u002Fbackups:ro",[170,264,243],{"class":176},[170,266,268,271,274,276,279,282,285,288,291],{"class":172,"line":267},8,[170,269,270],{"class":180},"  \"",[170,272,273],{"class":176},"$IMAGE",[170,275,184],{"class":180},[170,277,278],{"class":187}," storage",[170,280,281],{"class":187}," restore",[170,283,284],{"class":180}," \"",[170,286,287],{"class":187},"\u002Fgo\u002Fapp\u002Fbackups\u002F",[170,289,290],{"class":176},"$BACKUP",[170,292,191],{"class":180},[170,294,296],{"class":172,"line":295},9,[170,297,229],{"emptyLinePlaceholder":228},[170,299,301,303,305,307,310,312,314,316,318,320],{"class":172,"line":300},10,[170,302,213],{"class":212},[170,304,237],{"class":187},[170,306,240],{"class":187},[170,308,309],{"class":187}," -v",[170,311,252],{"class":187},[170,313,284],{"class":180},[170,315,273],{"class":176},[170,317,184],{"class":180},[170,319,278],{"class":187},[170,321,322],{"class":187}," check\n",[139,324,325,328,329,332],{},[156,326,327],{},"asmy-restore-check"," должен быть новым отдельным volume, не volume другой\nустановки. Команда проверяет копию и создаёт новую БД атомарно; существующую\n",[156,330,331],{},"asmy.sqlite"," не перезаписывает. Ошибка о существующей БД — причина проверить\nвыбранный volume, а не удалять его содержимое. Исходный snapshot читается без\nизменений; volume копий в этих командах подключён только для чтения.",[139,334,335],{},"Если основной файл пропал, но остались WAL\u002FSHM, команда также откажет.\nСохраните эти файлы и выясните причину; не удаляйте их, чтобы обойти защиту.\nДля восстановления используйте новый volume или заранее сохраните все прежние\nфайлы вместе.",[139,337,338],{},"Эта проверка не меняет рабочую панель. Для полного пробного запуска используйте\nизолированный Docker daemon и синтетические внешние подключения: Asmy получает\nширокий доступ к Docker и может применять Caddy и выполнять обновления.",[143,340,342],{"id":341},"остановите-панель","Остановите панель",[139,344,345],{},"Убедитесь, что installer\u002Fupdater не выполняется параллельно. Для Compose:",[161,347,349],{"className":163,"code":348,"language":165,"meta":166,"style":166},"docker stop admire-server-manager_application\n",[156,350,351],{"__ignoreMap":166},[170,352,353,355,358],{"class":172,"line":173},[170,354,213],{"class":212},[170,356,357],{"class":187}," stop",[170,359,360],{"class":187}," admire-server-manager_application\n",[139,362,363],{},"Для Swarm:",[161,365,367],{"className":163,"code":366,"language":165,"meta":166,"style":166},"docker service scale admire-server-manager_application=0\n",[156,368,369],{"__ignoreMap":166},[170,370,371,373,376,379,382],{"class":172,"line":173},[170,372,213],{"class":212},[170,374,375],{"class":187}," service",[170,377,378],{"class":187}," scale",[170,380,381],{"class":187}," admire-server-manager_application=",[170,383,385],{"class":384},"sbssI","0\n",[139,387,388],{},"В Swarm дождитесь фактической остановки task. Убедитесь, что нет работающих\nпроцессов Asmy над этими данными. Не удаляйте lock-файл, чтобы обойти отказ команды.",[143,390,392],{"id":391},"сохраните-прежние-файлы-и-восстановите-копию","Сохраните прежние файлы и восстановите копию",[139,394,395,396,399],{},"Следующая команда сохраняет прежнюю БД ",[151,397,398],{},"вместе с WAL\u002FSHM"," внутри того же volume.\nОна предназначена для стандартной установки и выполняется только после остановки:",[161,401,403],{"className":163,"code":402,"language":165,"meta":166,"style":166},"docker run --rm -v admire-server-manager_data:\u002Fgo\u002Fapp\u002Fdata \\\n  --entrypoint sh \"$IMAGE\" -c '\n    set -eu\n    test -f data\u002Fasmy.sqlite\n    retained=\"data\u002Fbefore-restore-$(date -u +%Y%m%dT%H%M%S)\"\n    mkdir \"$retained\"\n    for file in data\u002Fasmy.sqlite data\u002Fasmy.sqlite-wal data\u002Fasmy.sqlite-shm; do\n      if test -e \"$file\"; then mv \"$file\" \"$retained\u002F\"; fi\n    done\n  '\n\ndocker run --rm \\\n  -v admire-server-manager_data:\u002Fgo\u002Fapp\u002Fdata \\\n  -v admire-server-manager_backups:\u002Fgo\u002Fapp\u002Fbackups:ro \\\n  \"$IMAGE\" storage restore \"\u002Fgo\u002Fapp\u002Fbackups\u002F$BACKUP\"\n\ndocker run --rm -v admire-server-manager_data:\u002Fgo\u002Fapp\u002Fdata \"$IMAGE\" storage check\n",[156,404,405,420,440,445,450,455,460,465,470,475,480,485,496,505,514,535,540],{"__ignoreMap":166},[170,406,407,409,411,413,415,418],{"class":172,"line":173},[170,408,213],{"class":212},[170,410,237],{"class":187},[170,412,240],{"class":187},[170,414,309],{"class":187},[170,416,417],{"class":187}," admire-server-manager_data:\u002Fgo\u002Fapp\u002Fdata",[170,419,243],{"class":176},[170,421,422,425,428,430,432,434,437],{"class":172,"line":194},[170,423,424],{"class":187},"  --entrypoint",[170,426,427],{"class":187}," sh",[170,429,284],{"class":180},[170,431,273],{"class":176},[170,433,184],{"class":180},[170,435,436],{"class":187}," -c",[170,438,439],{"class":180}," '\n",[170,441,442],{"class":172,"line":209},[170,443,444],{"class":187},"    set -eu\n",[170,446,447],{"class":172,"line":225},[170,448,449],{"class":187},"    test -f data\u002Fasmy.sqlite\n",[170,451,452],{"class":172,"line":232},[170,453,454],{"class":187},"    retained=\"data\u002Fbefore-restore-$(date -u +%Y%m%dT%H%M%S)\"\n",[170,456,457],{"class":172,"line":246},[170,458,459],{"class":187},"    mkdir \"$retained\"\n",[170,461,462],{"class":172,"line":257},[170,463,464],{"class":187},"    for file in data\u002Fasmy.sqlite data\u002Fasmy.sqlite-wal data\u002Fasmy.sqlite-shm; do\n",[170,466,467],{"class":172,"line":267},[170,468,469],{"class":187},"      if test -e \"$file\"; then mv \"$file\" \"$retained\u002F\"; fi\n",[170,471,472],{"class":172,"line":295},[170,473,474],{"class":187},"    done\n",[170,476,477],{"class":172,"line":300},[170,478,479],{"class":180},"  '\n",[170,481,483],{"class":172,"line":482},11,[170,484,229],{"emptyLinePlaceholder":228},[170,486,488,490,492,494],{"class":172,"line":487},12,[170,489,213],{"class":212},[170,491,237],{"class":187},[170,493,240],{"class":187},[170,495,243],{"class":176},[170,497,499,501,503],{"class":172,"line":498},13,[170,500,249],{"class":187},[170,502,417],{"class":187},[170,504,243],{"class":176},[170,506,508,510,512],{"class":172,"line":507},14,[170,509,249],{"class":187},[170,511,262],{"class":187},[170,513,243],{"class":176},[170,515,517,519,521,523,525,527,529,531,533],{"class":172,"line":516},15,[170,518,270],{"class":180},[170,520,273],{"class":176},[170,522,184],{"class":180},[170,524,278],{"class":187},[170,526,281],{"class":187},[170,528,284],{"class":180},[170,530,287],{"class":187},[170,532,290],{"class":176},[170,534,191],{"class":180},[170,536,538],{"class":172,"line":537},16,[170,539,229],{"emptyLinePlaceholder":228},[170,541,543,545,547,549,551,553,555,557,559,561],{"class":172,"line":542},17,[170,544,213],{"class":212},[170,546,237],{"class":187},[170,548,240],{"class":187},[170,550,309],{"class":187},[170,552,417],{"class":187},[170,554,284],{"class":180},[170,556,273],{"class":176},[170,558,184],{"class":180},[170,560,278],{"class":187},[170,562,322],{"class":187},[139,564,565],{},"При любой ошибке остановитесь: исходная копия и прежние файлы сохранены,\nпанель не нужно запускать до выяснения причины. Не возвращайте старый PostgreSQL\nобраз для открытия SQLite и не копируйте чужие WAL\u002FSHM рядом с восстановленной БД.",[143,567,569],{"id":568},"запустите-и-проверьте","Запустите и проверьте",[139,571,572,573,576,577,580],{},"Верните остановленный контейнер командой ",[156,574,575],{},"docker start admire-server-manager_application","\nили восстановите Swarm replicas командой\n",[156,578,579],{},"docker service scale admire-server-manager_application=1",".\nПроверьте health\u002Flogs, вход, проекты, домены и применение конфигурации Caddy.\nРаботайте на том же узле, где находится volume панели.",[139,582,583],{},"Восстанавливаются данные на момент выбранной копии. Изменения после неё будут\nотсутствовать. Прежние файлы и проверочный volume не удаляйте до подтверждения\nрезультата; их последующая очистка — отдельная осознанная операция.",[585,586,587],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}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);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":166,"searchDepth":194,"depth":194,"links":589},[590,591,592,593],{"id":145,"depth":194,"text":146},{"id":341,"depth":194,"text":342},{"id":391,"depth":194,"text":392},{"id":568,"depth":194,"text":569},"Проверка копии отдельно от рабочей панели и безопасная замена данных.","md",null,{},{"title":130,"description":594},"hB3Ci2Ru3iCO405KKlGcZZPgggJ-CtXACE4rgW72g9E",[601,596],{"title":126,"path":127,"stem":128,"description":602,"children":-1},"Границы доверия панели и обращения к внешним сервисам.",1793038685169]