[{"data":1,"prerenderedAt":511},["ShallowReactive",2],{"navigation_docs_en":3,"-en-self-hosting-updating":123,"-en-self-hosting-updating-surround":506},[4,36,107],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":35},"Getting started","i-lucide-rocket","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"What is Chronicler","\u002Fen\u002Fgetting-started\u002Fwhat-is-chronicler","en\u002F1.getting-started\u002F1.what-is-chronicler","i-lucide-help-circle",{"title":16,"path":17,"stem":18,"icon":19},"Install the app","\u002Fen\u002Fgetting-started\u002Finstall-the-app","en\u002F1.getting-started\u002F2.install-the-app","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Cloud quick start","\u002Fen\u002Fgetting-started\u002Fcloud-quickstart","en\u002F1.getting-started\u002F3.cloud-quickstart","i-lucide-cloud",{"title":26,"path":27,"stem":28,"icon":29},"Your first chat","\u002Fen\u002Fgetting-started\u002Fyour-first-chat","en\u002F1.getting-started\u002F4.your-first-chat","i-lucide-messages-square",{"title":31,"path":32,"stem":33,"icon":34},"Managing users","\u002Fen\u002Fgetting-started\u002Fmanaging-users","en\u002F1.getting-started\u002F5.managing-users","i-lucide-users",false,{"title":37,"icon":38,"path":39,"stem":40,"children":41,"page":35},"Self-hosting","i-lucide-server","\u002Fen\u002Fself-hosting","en\u002F2.self-hosting",[42,47,52,57,62,67,72,77,82,87,92,97,102],{"title":43,"path":44,"stem":45,"icon":46},"Overview","\u002Fen\u002Fself-hosting\u002Foverview","en\u002F2.self-hosting\u002F1.overview","i-lucide-layout-dashboard",{"title":48,"path":49,"stem":50,"icon":51},"Backups and restore","\u002Fen\u002Fself-hosting\u002Fbackups","en\u002F2.self-hosting\u002F10.backups","i-lucide-database-backup",{"title":53,"path":54,"stem":55,"icon":56},"Updating","\u002Fen\u002Fself-hosting\u002Fupdating","en\u002F2.self-hosting\u002F11.updating","i-lucide-refresh-cw",{"title":58,"path":59,"stem":60,"icon":61},"Security and networking","\u002Fen\u002Fself-hosting\u002Fsecurity-and-networking","en\u002F2.self-hosting\u002F12.security-and-networking","i-lucide-shield",{"title":63,"path":64,"stem":65,"icon":66},"Troubleshooting","\u002Fen\u002Fself-hosting\u002Ftroubleshooting","en\u002F2.self-hosting\u002F13.troubleshooting","i-lucide-life-buoy",{"title":68,"path":69,"stem":70,"icon":71},"Requirements","\u002Fen\u002Fself-hosting\u002Frequirements","en\u002F2.self-hosting\u002F2.requirements","i-lucide-cpu",{"title":73,"path":74,"stem":75,"icon":76},"Quick start (guided)","\u002Fen\u002Fself-hosting\u002Fquick-start","en\u002F2.self-hosting\u002F3.quick-start","i-lucide-wand-2",{"title":78,"path":79,"stem":80,"icon":81},"Manual install","\u002Fen\u002Fself-hosting\u002Fmanual-install","en\u002F2.self-hosting\u002F4.manual-install","i-lucide-terminal",{"title":83,"path":84,"stem":85,"icon":86},"GPU acceleration","\u002Fen\u002Fself-hosting\u002Fgpu-acceleration","en\u002F2.self-hosting\u002F5.gpu-acceleration","i-lucide-zap",{"title":88,"path":89,"stem":90,"icon":91},"Performance and memory","\u002Fen\u002Fself-hosting\u002Fperformance-and-memory","en\u002F2.self-hosting\u002F6.performance-and-memory","i-lucide-gauge",{"title":93,"path":94,"stem":95,"icon":96},"Configuration reference","\u002Fen\u002Fself-hosting\u002Fconfiguration-reference","en\u002F2.self-hosting\u002F7.configuration-reference","i-lucide-sliders-horizontal",{"title":98,"path":99,"stem":100,"icon":101},"Models","\u002Fen\u002Fself-hosting\u002Fmodels","en\u002F2.self-hosting\u002F8.models","i-lucide-brain",{"title":103,"path":104,"stem":105,"icon":106},"Licensing and activation","\u002Fen\u002Fself-hosting\u002Flicensing","en\u002F2.self-hosting\u002F9.licensing","i-lucide-key-round",{"title":108,"icon":109,"path":110,"stem":111,"children":112,"page":35},"Reference","i-lucide-book-open","\u002Fen\u002Freference","en\u002F3.reference",[113,118],{"title":114,"path":115,"stem":116,"icon":117},"How it works","\u002Fen\u002Freference\u002Fhow-it-works","en\u002F3.reference\u002F1.how-it-works","i-lucide-workflow",{"title":119,"path":120,"stem":121,"icon":122},"Data and privacy","\u002Fen\u002Freference\u002Fdata-and-privacy","en\u002F3.reference\u002F2.data-and-privacy","i-lucide-lock",{"id":124,"title":53,"body":125,"description":497,"extension":498,"links":499,"meta":500,"navigation":501,"path":54,"seo":502,"stem":55,"__hash__":505},"docs_en\u002Fen\u002F2.self-hosting\u002F11.updating.md",{"type":126,"value":127,"toc":483},"minimark",[128,132,181,184,189,196,203,207,217,220,231,235,301,311,322,326,332,351,357,361,413,417,421,424,439,442,446,472,476,479],[129,130,131],"p",{},"Two things update, on purpose independently:",[133,134,135,150],"table",{},[136,137,138],"thead",{},[139,140,141,144,147],"tr",{},[142,143],"th",{},[142,145,146],{},"Updates how",[142,148,149],{},"Who decides",[151,152,153,168],"tbody",{},[139,154,155,162,165],{},[156,157,158],"td",{},[159,160,161],"strong",{},"The desktop app",[156,163,164],{},"Automatically, on restart",[156,166,167],{},"Each person",[139,169,170,175,178],{},[156,171,172],{},[159,173,174],{},"The server stack",[156,176,177],{},"When you run an update",[156,179,180],{},"The administrator",[129,182,183],{},"An app update never touches your server. That's deliberate: nobody's document\nserver should restart because someone accepted an app update.",[185,186,188],"h2",{"id":187},"before-you-update","Before you update",[129,190,191,192,195],{},"Take a backup. ",[159,193,194],{},"Admin → Backups → Back up now",". Thirty seconds, and it's the\ndifference between a bad update and a lost afternoon.",[129,197,198,199,202],{},"The backend also protects itself: when an update changes the database schema, it\ndumps the database first and ",[159,200,201],{},"refuses to migrate if that dump fails",".",[185,204,206],{"id":205},"updating-from-the-app","Updating from the app",[129,208,209,212,213,216],{},[159,210,211],{},"Admin → Updates"," shows the current version and whether a newer stack is\navailable. ",[159,214,215],{},"Run update"," does the whole thing, streaming the log into the window:\nit fetches the current compose file, pulls the new images and restarts the stack.",[129,218,219],{},"Expect a few minutes and a large download. The app is unusable while the backend\nrestarts; it reconnects on its own.",[129,221,222,225,226,230],{},[159,223,224],{},"Automatically check for updates"," controls only whether you're ",[227,228,229],"em",{},"told"," about new\nversions. Nothing installs itself.",[185,232,234],{"id":233},"updating-from-a-terminal","Updating from a terminal",[236,237,243],"pre",{"className":238,"code":239,"filename":240,"language":241,"meta":242,"style":242},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd \u002Fopt\u002Fchronicler\ndocker compose pull\ndocker compose up -d\ndocker compose logs -f backend\n","Terminal","bash","",[244,245,246,259,272,285],"code",{"__ignoreMap":242},[247,248,251,255],"span",{"class":249,"line":250},"line",1,[247,252,254],{"class":253},"s2Zo4","cd",[247,256,258],{"class":257},"sfazB"," \u002Fopt\u002Fchronicler\n",[247,260,262,266,269],{"class":249,"line":261},2,[247,263,265],{"class":264},"sBMFI","docker",[247,267,268],{"class":257}," compose",[247,270,271],{"class":257}," pull\n",[247,273,275,277,279,282],{"class":249,"line":274},3,[247,276,265],{"class":264},[247,278,268],{"class":257},[247,280,281],{"class":257}," up",[247,283,284],{"class":257}," -d\n",[247,286,288,290,292,295,298],{"class":249,"line":287},4,[247,289,265],{"class":264},[247,291,268],{"class":257},[247,293,294],{"class":257}," logs",[247,296,297],{"class":257}," -f",[247,299,300],{"class":257}," backend\n",[129,302,303,306,307,310],{},[244,304,305],{},"pull"," fetches new images, ",[244,308,309],{},"up -d"," recreates the containers that changed. Your\nvolumes — database, documents, models — are untouched.",[312,313,314,315,321],"note",{},"The guided update in the app also ",[159,316,317,318],{},"replaces your ",[244,319,320],{},"docker-compose.yml"," with the\ncurrent published one. Hand edits to that file (an offsite backup mount, a\npinned model) are lost. If you've customised it, update from the terminal\ninstead, or keep your customised copy and re-apply after each update.",[185,323,325],{"id":324},"pinning-a-version","Pinning a version",[129,327,328,331],{},[244,329,330],{},"latest"," means every update takes you to the newest release. On a server people\ndepend on, pin it:",[236,333,336],{"className":238,"code":334,"filename":335,"language":241,"meta":242,"style":242},"CHRONICLER_VERSION=1.0.9\n",".env",[244,337,338],{"__ignoreMap":242},[247,339,340,344,348],{"class":249,"line":250},[247,341,343],{"class":342},"sTEyZ","CHRONICLER_VERSION",[247,345,347],{"class":346},"sMK4o","=",[247,349,350],{"class":257},"1.0.9\n",[129,352,353,354,202],{},"Then updating is a deliberate act: change the number, ",[244,355,356],{},"docker compose up -d",[185,358,360],{"id":359},"rolling-back","Rolling back",[362,363,364,369,383,387,402,406],"steps",{},[365,366,368],"h3",{"id":367},"pin-the-previous-version","Pin the previous version",[236,370,372],{"className":238,"code":371,"filename":335,"language":241,"meta":242,"style":242},"CHRONICLER_VERSION=1.0.8\n",[244,373,374],{"__ignoreMap":242},[247,375,376,378,380],{"class":249,"line":250},[247,377,343],{"class":342},[247,379,347],{"class":346},[247,381,382],{"class":257},"1.0.8\n",[365,384,386],{"id":385},"bring-it-back-up","Bring it back up",[236,388,390],{"className":238,"code":389,"filename":240,"language":241,"meta":242,"style":242},"docker compose up -d\n",[244,391,392],{"__ignoreMap":242},[247,393,394,396,398,400],{"class":249,"line":250},[247,395,265],{"class":264},[247,397,268],{"class":257},[247,399,281],{"class":257},[247,401,284],{"class":257},[365,403,405],{"id":404},"restore-the-backup-if-the-schema-changed","Restore the backup if the schema changed",[129,407,408,409,412],{},"If the newer version migrated the database, an older backend may not read it.\nRestore the backup you took before updating\n(",[410,411,48],"a",{"href":49},").",[414,415,416],"caution",{},"This is why the pre-update backup matters. Rolling back the images is easy;\nrolling back a migrated database without a backup is not.",[185,418,420],{"id":419},"updating-ollama","Updating Ollama",[129,422,423],{},"The model runtime has its own version:",[236,425,427],{"className":238,"code":426,"filename":335,"language":241,"meta":242,"style":242},"OLLAMA_VERSION=0.32.4\n",[244,428,429],{"__ignoreMap":242},[247,430,431,434,436],{"class":249,"line":250},[247,432,433],{"class":342},"OLLAMA_VERSION",[247,435,347],{"class":346},[247,437,438],{"class":257},"0.32.4\n",[129,440,441],{},"Leave it alone unless you're chasing a specific fix. Downloaded models live in a\nseparate volume and survive the change.",[185,443,445],{"id":444},"after-an-update","After an update",[447,448,449,453,460,466],"ul",{},[450,451,452],"li",{},"Sign in and ask a question.",[450,454,455,456,459],{},"Check ",[159,457,458],{},"Admin → Model"," still shows your model as active.",[450,461,455,462,465],{},[159,463,464],{},"Admin → Licensing"," still says Active.",[450,467,468,469,202],{},"If search looks wrong, run ",[159,470,471],{},"Reindex all",[185,473,475],{"id":474},"update-cadence","Update cadence",[129,477,478],{},"Roughly monthly is sensible for a working server: recent enough for fixes, not so\neager that you're testing releases for everyone else. Read the release notes for\nanything mentioning migrations or breaking changes, and never update an hour\nbefore you need the thing.",[480,481,482],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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}",{"title":242,"searchDepth":261,"depth":261,"links":484},[485,486,487,488,489,494,495,496],{"id":187,"depth":261,"text":188},{"id":205,"depth":261,"text":206},{"id":233,"depth":261,"text":234},{"id":324,"depth":261,"text":325},{"id":359,"depth":261,"text":360,"children":490},[491,492,493],{"id":367,"depth":274,"text":368},{"id":385,"depth":274,"text":386},{"id":404,"depth":274,"text":405},{"id":419,"depth":261,"text":420},{"id":444,"depth":261,"text":445},{"id":474,"depth":261,"text":475},"The app and the server update separately. Here's how each one works.","md",null,{},{"icon":56},{"title":503,"description":504},"Updating a self-hosted Chronicler server","Update the Chronicler Docker stack, pin versions, and roll back safely.","tO1VLp0CWemATGRMFd42_b_0ubkXOHwAVDnFXji4uCk",[507,509],{"title":48,"path":49,"stem":50,"description":508,"icon":51,"children":-1},"Scheduled backups, an offsite copy, and how to get your data back.",{"title":58,"path":59,"stem":60,"description":510,"icon":61,"children":-1},"Let colleagues in without letting everyone in.",1785092109417]