[{"data":1,"prerenderedAt":878},["ShallowReactive",2],{"navigation_docs_en":3,"-en-self-hosting-operations-and-security-backups":143,"-en-self-hosting-operations-and-security-backups-surround":873},[4,103,124],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":36},"Self-hosting","i-lucide-server","\u002Fen\u002Fself-hosting","en\u002F1.self-hosting",[10,37,57,77],{"title":11,"icon":12,"path":13,"stem":14,"children":15,"page":36},"Getting started","i-lucide-rocket","\u002Fen\u002Fself-hosting\u002Fgetting-started","en\u002F1.self-hosting\u002F1.getting-started",[16,21,26,31],{"title":17,"path":18,"stem":19,"icon":20},"Quick start (guided)","\u002Fen\u002Fself-hosting\u002Fgetting-started\u002Fquick-start","en\u002F1.self-hosting\u002F1.getting-started\u002F1.quick-start","i-lucide-wand-2",{"title":22,"path":23,"stem":24,"icon":25},"Overview","\u002Fen\u002Fself-hosting\u002Fgetting-started\u002Foverview","en\u002F1.self-hosting\u002F1.getting-started\u002F2.overview","i-lucide-layout-dashboard",{"title":27,"path":28,"stem":29,"icon":30},"Requirements","\u002Fen\u002Fself-hosting\u002Fgetting-started\u002Frequirements","en\u002F1.self-hosting\u002F1.getting-started\u002F3.requirements","i-lucide-cpu",{"title":32,"path":33,"stem":34,"icon":35},"Manual install","\u002Fen\u002Fself-hosting\u002Fgetting-started\u002Fmanual-install","en\u002F1.self-hosting\u002F1.getting-started\u002F4.manual-install","i-lucide-terminal",false,{"title":38,"icon":39,"path":40,"stem":41,"children":42,"page":36},"Performance & models","i-lucide-gauge","\u002Fen\u002Fself-hosting\u002Fperformance-and-models","en\u002F1.self-hosting\u002F2.performance-and-models",[43,48,52],{"title":44,"path":45,"stem":46,"icon":47},"GPU acceleration","\u002Fen\u002Fself-hosting\u002Fperformance-and-models\u002Fgpu-acceleration","en\u002F1.self-hosting\u002F2.performance-and-models\u002F1.gpu-acceleration","i-lucide-zap",{"title":49,"path":50,"stem":51,"icon":39},"Performance and memory","\u002Fen\u002Fself-hosting\u002Fperformance-and-models\u002Fperformance-and-memory","en\u002F1.self-hosting\u002F2.performance-and-models\u002F2.performance-and-memory",{"title":53,"path":54,"stem":55,"icon":56},"Models","\u002Fen\u002Fself-hosting\u002Fperformance-and-models\u002Fmodels","en\u002F1.self-hosting\u002F2.performance-and-models\u002F3.models","i-lucide-brain",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":36},"Configuration & access","i-lucide-sliders-horizontal","\u002Fen\u002Fself-hosting\u002Fconfiguration-and-access","en\u002F1.self-hosting\u002F3.configuration-and-access",[63,67,72],{"title":64,"path":65,"stem":66,"icon":59},"Configuration reference","\u002Fen\u002Fself-hosting\u002Fconfiguration-and-access\u002Fconfiguration-reference","en\u002F1.self-hosting\u002F3.configuration-and-access\u002F1.configuration-reference",{"title":68,"path":69,"stem":70,"icon":71},"Licensing and activation","\u002Fen\u002Fself-hosting\u002Fconfiguration-and-access\u002Flicensing","en\u002F1.self-hosting\u002F3.configuration-and-access\u002F2.licensing","i-lucide-key-round",{"title":73,"path":74,"stem":75,"icon":76},"Managing users","\u002Fen\u002Fself-hosting\u002Fconfiguration-and-access\u002Fmanaging-users","en\u002F1.self-hosting\u002F3.configuration-and-access\u002F3.managing-users","i-lucide-users",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":36},"Operations & security","i-lucide-shield-check","\u002Fen\u002Fself-hosting\u002Foperations-and-security","en\u002F1.self-hosting\u002F4.operations-and-security",[83,88,93,98],{"title":84,"path":85,"stem":86,"icon":87},"Backups and restore","\u002Fen\u002Fself-hosting\u002Foperations-and-security\u002Fbackups","en\u002F1.self-hosting\u002F4.operations-and-security\u002F1.backups","i-lucide-database-backup",{"title":89,"path":90,"stem":91,"icon":92},"Updating","\u002Fen\u002Fself-hosting\u002Foperations-and-security\u002Fupdating","en\u002F1.self-hosting\u002F4.operations-and-security\u002F2.updating","i-lucide-refresh-cw",{"title":94,"path":95,"stem":96,"icon":97},"Security and networking","\u002Fen\u002Fself-hosting\u002Foperations-and-security\u002Fsecurity-and-networking","en\u002F1.self-hosting\u002F4.operations-and-security\u002F3.security-and-networking","i-lucide-shield",{"title":99,"path":100,"stem":101,"icon":102},"Troubleshooting","\u002Fen\u002Fself-hosting\u002Foperations-and-security\u002Ftroubleshooting","en\u002F1.self-hosting\u002F4.operations-and-security\u002F4.troubleshooting","i-lucide-life-buoy",{"title":104,"icon":105,"path":106,"stem":107,"children":108,"page":36},"App & reference","i-lucide-book-open-text","\u002Fen\u002Freference","en\u002F2.reference",[109,114,119],{"title":110,"path":111,"stem":112,"icon":113},"Install the app","\u002Fen\u002Freference\u002Finstall-the-app","en\u002F2.reference\u002F1.install-the-app","i-lucide-download",{"title":115,"path":116,"stem":117,"icon":118},"How it works","\u002Fen\u002Freference\u002Fhow-it-works","en\u002F2.reference\u002F2.how-it-works","i-lucide-workflow",{"title":120,"path":121,"stem":122,"icon":123},"Data and privacy","\u002Fen\u002Freference\u002Fdata-and-privacy","en\u002F2.reference\u002F3.data-and-privacy","i-lucide-lock",{"title":125,"icon":126,"path":127,"stem":128,"children":129,"page":36},"Chronicler Cloud","i-lucide-cloud","\u002Fen\u002Fcloud","en\u002F3.cloud",[130,134,138],{"title":131,"path":132,"stem":133,"icon":126},"Cloud overview","\u002Fen\u002Fcloud\u002Foverview","en\u002F3.cloud\u002F1.overview",{"title":135,"path":136,"stem":137,"icon":12},"Quick start","\u002Fen\u002Fcloud\u002Fquick-start","en\u002F3.cloud\u002F2.quick-start",{"title":139,"path":140,"stem":141,"icon":142},"Your first chat","\u002Fen\u002Fcloud\u002Fyour-first-chat","en\u002F3.cloud\u002F3.your-first-chat","i-lucide-messages-square",{"id":144,"title":84,"body":145,"description":864,"extension":865,"links":866,"meta":867,"navigation":868,"path":85,"seo":869,"stem":86,"__hash__":872},"docs_en\u002Fen\u002F1.self-hosting\u002F4.operations-and-security\u002F1.backups.md",{"type":146,"value":147,"toc":841},"minimark",[148,152,157,177,192,196,202,264,267,271,274,400,404,408,414,420,423,485,489,497,539,541,614,618,830,834,837],[149,150,151],"p",{},"You are the only one holding this data. Set up backups on day one.",[153,154,156],"h2",{"id":155},"what-gets-backed-up","What gets backed up",[149,158,159,163,164,167,168,172,173,176],{},[160,161,162],"strong",{},"Admin → Backups"," backs up the ",[160,165,166],{},"database",": accounts, collections,\nconversations, document metadata and the search index. Backups are standard\nPostgreSQL dumps named ",[169,170,171],"code",{},"chronicler-YYYYMMDD-HHMMSS.dump",", stored inside the\n",[169,174,175],{},"backend_uploads"," volume.",[178,179,180,181,184,185,187,188,191],"warning",{},"The original uploaded files live in the same volume but are ",[160,182,183],{},"not"," inside the\ndump. A complete disaster-recovery plan is: these database backups, plus a copy\nof the ",[169,186,175],{}," volume, plus your ",[169,189,190],{},".env",".",[153,193,195],{"id":194},"scheduled-backups","Scheduled backups",[149,197,198,201],{},[160,199,200],{},"Admin → Backups → Automatic backups",":",[203,204,205,221],"table",{},[206,207,208],"thead",{},[209,210,211,215,218],"tr",{},[212,213,214],"th",{},"Setting",[212,216,217],{},"Options",[212,219,220],{},"Notes",[222,223,224,238,251],"tbody",{},[209,225,226,232,235],{},[227,228,229],"td",{},[160,230,231],{},"Frequency",[227,233,234],{},"Off, Daily, Weekly",[227,236,237],{},"Daily is right for most people.",[209,239,240,245,248],{},[227,241,242],{},[160,243,244],{},"Keep",[227,246,247],{},"1–365",[227,249,250],{},"Older backups are deleted automatically once you're over the count.",[209,252,253,258,261],{},[227,254,255],{},[160,256,257],{},"Offsite folder",[227,259,260],{},"A path inside the container",[227,262,263],{},"Optional, and the most valuable part. See below.",[149,265,266],{},"Save the schedule and the panel shows the last run, the next one, and the error\nfrom the last failure if there was one. Changes take effect without a restart.",[153,268,270],{"id":269},"the-offsite-copy","The offsite copy",[149,272,273],{},"A backup in the same Docker volume as the data doesn't survive the failure you're\nactually worried about. To keep a copy elsewhere, mount a host folder - a NAS\nshare, an external disk - into the backend container.",[275,276,277,282,289,330,336,340,385,389],"steps",{},[278,279,281],"h3",{"id":280},"add-the-mount-to-your-compose-file","Add the mount to your compose file",[149,283,284,285,288],{},"Under the ",[169,286,287],{},"backend"," service:",[290,291,297],"pre",{"className":292,"code":293,"filename":294,"language":295,"meta":296,"style":296},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","    volumes:\n      - backend_uploads:\u002Fapp\u002Fuploads\n      - \u002Fmnt\u002Fnas\u002Fchronicler-backups:\u002Fmnt\u002Fbackups\n","docker-compose.yml","yaml","",[169,298,299,312,322],{"__ignoreMap":296},[300,301,304,308],"span",{"class":302,"line":303},"line",1,[300,305,307],{"class":306},"swJcz","    volumes",[300,309,311],{"class":310},"sMK4o",":\n",[300,313,315,318],{"class":302,"line":314},2,[300,316,317],{"class":310},"      -",[300,319,321],{"class":320},"sfazB"," backend_uploads:\u002Fapp\u002Fuploads\n",[300,323,325,327],{"class":302,"line":324},3,[300,326,317],{"class":310},[300,328,329],{"class":320}," \u002Fmnt\u002Fnas\u002Fchronicler-backups:\u002Fmnt\u002Fbackups\n",[149,331,332,333,191],{},"On Windows, the left side is a host path like ",[169,334,335],{},"D:\\backups",[278,337,339],{"id":338},"recreate-the-container","Recreate the container",[341,342,343,360],"tabs",{},[344,345,348],"tabs-item",{"icon":346,"label":347},"i-lucide-monitor","Windows (PowerShell)",[290,349,354],{"className":350,"code":351,"filename":352,"language":353,"meta":296,"style":296},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","docker compose up -d\n","PowerShell","powershell",[169,355,356],{"__ignoreMap":296},[300,357,358],{"class":302,"line":303},[300,359,351],{},[344,361,363],{"icon":35,"label":362},"Linux",[290,364,368],{"className":365,"code":351,"filename":366,"language":367,"meta":296,"style":296},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Linux shell","bash",[169,369,370],{"__ignoreMap":296},[300,371,372,376,379,382],{"class":302,"line":303},[300,373,375],{"class":374},"sBMFI","docker",[300,377,378],{"class":320}," compose",[300,380,381],{"class":320}," up",[300,383,384],{"class":320}," -d\n",[278,386,388],{"id":387},"set-the-folder-in-the-console","Set the folder in the console",[149,390,391,392,395,396,399],{},"Enter ",[169,393,394],{},"\u002Fmnt\u002Fbackups"," - the path ",[160,397,398],{},"inside"," the container - as the offsite folder\nand save. Chronicler write-tests the folder as you save and refuses a path it\ncan't write to, so a typo fails immediately rather than silently for months.",[401,402,403],"note",{},"The compose file that the desktop app's guided setup writes doesn't include this\nmount. You have to add it by hand, and re-add it after a guided update replaces\nthe file. Keeping your own copy of the compose file avoids that.",[153,405,407],{"id":406},"manual-backups","Manual backups",[149,409,410,413],{},[160,411,412],{},"Back up now"," in the console creates one immediately - do this before an update\nor any risky change.",[149,415,416,419],{},[160,417,418],{},"Download"," saves a dump to the machine you're using the app on. That is the\nsimplest offsite copy there is: download one occasionally and put it somewhere\nsafe.",[149,421,422],{},"From the command line:",[341,424,425,447],{},[344,426,427],{"icon":346,"label":347},[290,428,430],{"className":350,"code":429,"filename":352,"language":353,"meta":296,"style":296},"docker exec chronicler-postgres pg_dump -U chronicler -Fc -f \u002Ftmp\u002Fchronicler-backup.dump chronicler_app\ndocker cp chronicler-postgres:\u002Ftmp\u002Fchronicler-backup.dump .\\chronicler-backup.dump\ndocker exec chronicler-postgres rm \u002Ftmp\u002Fchronicler-backup.dump\n",[169,431,432,437,442],{"__ignoreMap":296},[300,433,434],{"class":302,"line":303},[300,435,436],{},"docker exec chronicler-postgres pg_dump -U chronicler -Fc -f \u002Ftmp\u002Fchronicler-backup.dump chronicler_app\n",[300,438,439],{"class":302,"line":314},[300,440,441],{},"docker cp chronicler-postgres:\u002Ftmp\u002Fchronicler-backup.dump .\\chronicler-backup.dump\n",[300,443,444],{"class":302,"line":324},[300,445,446],{},"docker exec chronicler-postgres rm \u002Ftmp\u002Fchronicler-backup.dump\n",[344,448,449],{"icon":35,"label":362},[290,450,452],{"className":365,"code":451,"filename":366,"language":367,"meta":296,"style":296},"docker exec chronicler-postgres pg_dump -U chronicler -Fc chronicler_app > chronicler-backup.dump\n",[169,453,454],{"__ignoreMap":296},[300,455,456,458,461,464,467,470,473,476,479,482],{"class":302,"line":303},[300,457,375],{"class":374},[300,459,460],{"class":320}," exec",[300,462,463],{"class":320}," chronicler-postgres",[300,465,466],{"class":320}," pg_dump",[300,468,469],{"class":320}," -U",[300,471,472],{"class":320}," chronicler",[300,474,475],{"class":320}," -Fc",[300,477,478],{"class":320}," chronicler_app",[300,480,481],{"class":310}," >",[300,483,484],{"class":320}," chronicler-backup.dump\n",[153,486,488],{"id":487},"restoring","Restoring",[490,491,492,493,496],"caution",{},"Restoring ",[160,494,495],{},"replaces the entire database",". Everything created since that backup\nis gone - accounts, conversations, documents. It cannot be undone.",[275,498,499,503,509,513,516,520,528,532],{},[278,500,502],{"id":501},"take-a-backup-of-the-current-state-first","Take a backup of the current state first",[149,504,505,506],{},"Even a broken database is better than no fallback. ",[160,507,508],{},"Back up now.",[278,510,512],{"id":511},"tell-people-to-stop","Tell people to stop",[149,514,515],{},"There's no maintenance mode. Anyone using the app during a restore will see\nerrors, and their work may be lost.",[278,517,519],{"id":518},"restore","Restore",[149,521,522,524,525,527],{},[160,523,162],{},", find the archive, choose ",[160,526,519],{},", and confirm. The\naction is recorded in the audit log with who did it.",[278,529,531],{"id":530},"check-then-re-index","Check, then re-index",[149,533,534,535,538],{},"Sign in, open some documents, run a search. If results look wrong, run\n",[160,536,537],{},"Admin → Model → Reindex all"," - the index in an old dump can lag the documents.",[149,540,422],{},[341,542,543,564],{},[344,544,545],{"icon":346,"label":347},[290,546,548],{"className":350,"code":547,"filename":352,"language":353,"meta":296,"style":296},"docker cp .\\chronicler-backup.dump chronicler-postgres:\u002Ftmp\u002Fchronicler-backup.dump\ndocker exec chronicler-postgres pg_restore -U chronicler -d chronicler_app --clean --if-exists --no-owner \u002Ftmp\u002Fchronicler-backup.dump\ndocker exec chronicler-postgres rm \u002Ftmp\u002Fchronicler-backup.dump\n",[169,549,550,555,560],{"__ignoreMap":296},[300,551,552],{"class":302,"line":303},[300,553,554],{},"docker cp .\\chronicler-backup.dump chronicler-postgres:\u002Ftmp\u002Fchronicler-backup.dump\n",[300,556,557],{"class":302,"line":314},[300,558,559],{},"docker exec chronicler-postgres pg_restore -U chronicler -d chronicler_app --clean --if-exists --no-owner \u002Ftmp\u002Fchronicler-backup.dump\n",[300,561,562],{"class":302,"line":324},[300,563,446],{},[344,565,566],{"icon":35,"label":362},[290,567,569],{"className":365,"code":568,"filename":366,"language":367,"meta":296,"style":296},"docker exec -i chronicler-postgres pg_restore -U chronicler -d chronicler_app \\\n  --clean --if-exists --no-owner \u003C chronicler-backup.dump\n",[169,570,571,598],{"__ignoreMap":296},[300,572,573,575,577,580,582,585,587,589,592,594],{"class":302,"line":303},[300,574,375],{"class":374},[300,576,460],{"class":320},[300,578,579],{"class":320}," -i",[300,581,463],{"class":320},[300,583,584],{"class":320}," pg_restore",[300,586,469],{"class":320},[300,588,472],{"class":320},[300,590,591],{"class":320}," -d",[300,593,478],{"class":320},[300,595,597],{"class":596},"sTEyZ"," \\\n",[300,599,600,603,606,609,612],{"class":302,"line":314},[300,601,602],{"class":320},"  --clean",[300,604,605],{"class":320}," --if-exists",[300,607,608],{"class":320}," --no-owner",[300,610,611],{"class":310}," \u003C",[300,613,484],{"class":320},[153,615,617],{"id":616},"moving-to-another-machine","Moving to another machine",[275,619,620,624,636,640,653,657,664,668,674],{},[278,621,623],{"id":622},"back-up-and-copy","Back up and copy",[149,625,626,627,629,630,632,633,635],{},"Take a fresh backup and download it. Copy your ",[169,628,294],{}," and ",[169,631,190],{},"\ntoo - without that ",[169,634,190],{}," the old database volume is unreadable.",[278,637,639],{"id":638},"install-on-the-new-machine","Install on the new machine",[149,641,642,643,646,647,650,652],{},"Follow ",[644,645,32],"a",{"href":33},", but use the ",[160,648,649],{},"existing",[169,651,190],{}," rather than generating a new password.",[278,654,656],{"id":655},"restore-then-move-the-licence","Restore, then move the licence",[149,658,659,660,663],{},"Restore the dump, then release the licence on the old install and activate on the\nnew one (",[644,661,662],{"href":69},"Licensing",").",[278,665,667],{"id":666},"copy-the-uploaded-files","Copy the uploaded files",[149,669,670,671,673],{},"The dump has no file contents. Copy the ",[169,672,175],{}," volume across:",[341,675,676,711],{},[344,677,678],{"icon":346,"label":347},[290,679,681],{"className":350,"code":680,"filename":352,"language":353,"meta":296,"style":296},"# On the old machine\ndocker run --rm -v chronicler_backend_uploads:\u002Fdata --mount \"type=bind,source=$PWD,target=\u002Fout\" alpine tar czf \u002Fout\u002Fuploads.tgz -C \u002Fdata .\n\n# On the new machine\ndocker run --rm -v chronicler_backend_uploads:\u002Fdata --mount \"type=bind,source=$PWD,target=\u002Fin\" alpine tar xzf \u002Fin\u002Fuploads.tgz -C \u002Fdata\n",[169,682,683,688,693,699,705],{"__ignoreMap":296},[300,684,685],{"class":302,"line":303},[300,686,687],{},"# On the old machine\n",[300,689,690],{"class":302,"line":314},[300,691,692],{},"docker run --rm -v chronicler_backend_uploads:\u002Fdata --mount \"type=bind,source=$PWD,target=\u002Fout\" alpine tar czf \u002Fout\u002Fuploads.tgz -C \u002Fdata .\n",[300,694,695],{"class":302,"line":324},[300,696,698],{"emptyLinePlaceholder":697},true,"\n",[300,700,702],{"class":302,"line":701},4,[300,703,704],{},"# On the new machine\n",[300,706,708],{"class":302,"line":707},5,[300,709,710],{},"docker run --rm -v chronicler_backend_uploads:\u002Fdata --mount \"type=bind,source=$PWD,target=\u002Fin\" alpine tar xzf \u002Fin\u002Fuploads.tgz -C \u002Fdata\n",[344,712,713],{"icon":35,"label":362},[290,714,716],{"className":365,"code":715,"filename":366,"language":367,"meta":296,"style":296},"# On the old machine\ndocker run --rm -v chronicler_backend_uploads:\u002Fdata -v \"$PWD\":\u002Fout alpine \\\n  tar czf \u002Fout\u002Fuploads.tgz -C \u002Fdata .\n\n# On the new machine\ndocker run --rm -v chronicler_backend_uploads:\u002Fdata -v \"$PWD\":\u002Fin alpine \\\n  tar xzf \u002Fin\u002Fuploads.tgz -C \u002Fdata\n",[169,717,718,723,758,778,782,786,814],{"__ignoreMap":296},[300,719,720],{"class":302,"line":303},[300,721,687],{"class":722},"sHwdD",[300,724,725,727,730,733,736,739,741,744,747,750,753,756],{"class":302,"line":314},[300,726,375],{"class":374},[300,728,729],{"class":320}," run",[300,731,732],{"class":320}," --rm",[300,734,735],{"class":320}," -v",[300,737,738],{"class":320}," chronicler_backend_uploads:\u002Fdata",[300,740,735],{"class":320},[300,742,743],{"class":310}," \"",[300,745,746],{"class":596},"$PWD",[300,748,749],{"class":310},"\"",[300,751,752],{"class":320},":\u002Fout",[300,754,755],{"class":320}," alpine",[300,757,597],{"class":596},[300,759,760,763,766,769,772,775],{"class":302,"line":324},[300,761,762],{"class":320},"  tar",[300,764,765],{"class":320}," czf",[300,767,768],{"class":320}," \u002Fout\u002Fuploads.tgz",[300,770,771],{"class":320}," -C",[300,773,774],{"class":320}," \u002Fdata",[300,776,777],{"class":320}," .\n",[300,779,780],{"class":302,"line":701},[300,781,698],{"emptyLinePlaceholder":697},[300,783,784],{"class":302,"line":707},[300,785,704],{"class":722},[300,787,789,791,793,795,797,799,801,803,805,807,810,812],{"class":302,"line":788},6,[300,790,375],{"class":374},[300,792,729],{"class":320},[300,794,732],{"class":320},[300,796,735],{"class":320},[300,798,738],{"class":320},[300,800,735],{"class":320},[300,802,743],{"class":310},[300,804,746],{"class":596},[300,806,749],{"class":310},[300,808,809],{"class":320},":\u002Fin",[300,811,755],{"class":320},[300,813,597],{"class":596},[300,815,817,819,822,825,827],{"class":302,"line":816},7,[300,818,762],{"class":320},[300,820,821],{"class":320}," xzf",[300,823,824],{"class":320}," \u002Fin\u002Fuploads.tgz",[300,826,771],{"class":320},[300,828,829],{"class":320}," \u002Fdata\n",[153,831,833],{"id":832},"test-it","Test it",[149,835,836],{},"An untested backup isn't a backup. Once, on a spare machine, restore one and\nsign in. Ten minutes now, or an unpleasant discovery later.",[838,839,840],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":296,"searchDepth":314,"depth":314,"links":842},[843,844,845,850,851,857,863],{"id":155,"depth":314,"text":156},{"id":194,"depth":314,"text":195},{"id":269,"depth":314,"text":270,"children":846},[847,848,849],{"id":280,"depth":324,"text":281},{"id":338,"depth":324,"text":339},{"id":387,"depth":324,"text":388},{"id":406,"depth":314,"text":407},{"id":487,"depth":314,"text":488,"children":852},[853,854,855,856],{"id":501,"depth":324,"text":502},{"id":511,"depth":324,"text":512},{"id":518,"depth":324,"text":519},{"id":530,"depth":324,"text":531},{"id":616,"depth":314,"text":617,"children":858},[859,860,861,862],{"id":622,"depth":324,"text":623},{"id":638,"depth":324,"text":639},{"id":655,"depth":324,"text":656},{"id":666,"depth":324,"text":667},{"id":832,"depth":314,"text":833},"Scheduled backups, an offsite copy, and how to get your data back.","md",null,{},{"icon":87},{"title":870,"description":871},"Chronicler backups and restore","Configure scheduled database backups, keep an offsite copy, and restore a Chronicler self-hosted server.","4YL6wCFPdRxCogRtwJjWBjAUQU3VEetbauCKcCxKdYY",[874,876],{"title":73,"path":74,"stem":75,"description":875,"icon":76,"children":-1},"Roles, adding accounts, access requests and the audit log.",{"title":89,"path":90,"stem":91,"description":877,"icon":92,"children":-1},"The app and the server update separately. Here's how each one works.",1785127056947]