[{"data":1,"prerenderedAt":604},["ShallowReactive",2],{"navigation_docs_en":3,"-en-self-hosting-operations-and-security-updating":143,"-en-self-hosting-operations-and-security-updating-surround":599},[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":89,"body":145,"description":590,"extension":591,"links":592,"meta":593,"navigation":594,"path":90,"seo":595,"stem":91,"__hash__":598},"docs_en\u002Fen\u002F1.self-hosting\u002F4.operations-and-security\u002F2.updating.md",{"type":146,"value":147,"toc":576},"minimark",[148,152,201,204,209,216,223,227,237,240,251,255,360,370,381,385,391,410,416,420,485,489,493,496,511,514,518,544,565,569,572],[149,150,151],"p",{},"Two things update, on purpose independently:",[153,154,155,170],"table",{},[156,157,158],"thead",{},[159,160,161,164,167],"tr",{},[162,163],"th",{},[162,165,166],{},"Updates how",[162,168,169],{},"Who decides",[171,172,173,188],"tbody",{},[159,174,175,182,185],{},[176,177,178],"td",{},[179,180,181],"strong",{},"The desktop app",[176,183,184],{},"Automatically, on restart",[176,186,187],{},"Each person",[159,189,190,195,198],{},[176,191,192],{},[179,193,194],{},"The server stack",[176,196,197],{},"When you run an update",[176,199,200],{},"The administrator",[149,202,203],{},"An app update never touches your server. That's deliberate: nobody's document\nserver should restart because someone accepted an app update.",[205,206,208],"h2",{"id":207},"before-you-update","Before you update",[149,210,211,212,215],{},"Take a backup. ",[179,213,214],{},"Admin → Backups → Back up now",". Thirty seconds, and it's the\ndifference between a bad update and a lost afternoon.",[149,217,218,219,222],{},"The backend also protects itself: when an update changes the database schema, it\ndumps the database first and ",[179,220,221],{},"refuses to migrate if that dump fails",".",[205,224,226],{"id":225},"updating-from-the-app","Updating from the app",[149,228,229,232,233,236],{},[179,230,231],{},"Admin → Updates"," shows the current version and whether a newer stack is\navailable. ",[179,234,235],{},"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.",[149,238,239],{},"Expect a few minutes and a large download. The app is unusable while the backend\nrestarts; it reconnects on its own.",[149,241,242,245,246,250],{},[179,243,244],{},"Automatically check for updates"," controls only whether you're ",[247,248,249],"em",{},"told"," about new\nversions. Nothing installs itself.",[205,252,254],{"id":253},"updating-from-a-terminal","Updating from a terminal",[256,257,258,300],"tabs",{},[259,260,263],"tabs-item",{"icon":261,"label":262},"i-lucide-monitor","Windows (PowerShell)",[264,265,271],"pre",{"className":266,"code":267,"filename":268,"language":269,"meta":270,"style":270},"language-powershell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Set-Location \"$env:ProgramData\\Chronicler\"\ndocker compose pull\ndocker compose up -d\ndocker compose logs -f backend\n","PowerShell","powershell","",[272,273,274,282,288,294],"code",{"__ignoreMap":270},[275,276,279],"span",{"class":277,"line":278},"line",1,[275,280,281],{},"Set-Location \"$env:ProgramData\\Chronicler\"\n",[275,283,285],{"class":277,"line":284},2,[275,286,287],{},"docker compose pull\n",[275,289,291],{"class":277,"line":290},3,[275,292,293],{},"docker compose up -d\n",[275,295,297],{"class":277,"line":296},4,[275,298,299],{},"docker compose logs -f backend\n",[259,301,303],{"icon":35,"label":302},"Linux",[264,304,309],{"className":305,"code":306,"filename":307,"language":308,"meta":270,"style":270},"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","Linux shell","bash",[272,310,311,321,333,345],{"__ignoreMap":270},[275,312,313,317],{"class":277,"line":278},[275,314,316],{"class":315},"s2Zo4","cd",[275,318,320],{"class":319},"sfazB"," \u002Fopt\u002Fchronicler\n",[275,322,323,327,330],{"class":277,"line":284},[275,324,326],{"class":325},"sBMFI","docker",[275,328,329],{"class":319}," compose",[275,331,332],{"class":319}," pull\n",[275,334,335,337,339,342],{"class":277,"line":290},[275,336,326],{"class":325},[275,338,329],{"class":319},[275,340,341],{"class":319}," up",[275,343,344],{"class":319}," -d\n",[275,346,347,349,351,354,357],{"class":277,"line":296},[275,348,326],{"class":325},[275,350,329],{"class":319},[275,352,353],{"class":319}," logs",[275,355,356],{"class":319}," -f",[275,358,359],{"class":319}," backend\n",[149,361,362,365,366,369],{},[272,363,364],{},"pull"," fetches new images, ",[272,367,368],{},"up -d"," recreates the containers that changed. Your\nvolumes - database, documents, models - are untouched.",[371,372,373,374,380],"note",{},"The guided update in the app also ",[179,375,376,377],{},"replaces your ",[272,378,379],{},"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.",[205,382,384],{"id":383},"pinning-a-version","Pinning a version",[149,386,387,390],{},[272,388,389],{},"latest"," means every update takes you to the newest release. On a server people\ndepend on, pin it:",[264,392,395],{"className":305,"code":393,"filename":394,"language":308,"meta":270,"style":270},"CHRONICLER_VERSION=1.0.9\n",".env",[272,396,397],{"__ignoreMap":270},[275,398,399,403,407],{"class":277,"line":278},[275,400,402],{"class":401},"sTEyZ","CHRONICLER_VERSION",[275,404,406],{"class":405},"sMK4o","=",[275,408,409],{"class":319},"1.0.9\n",[149,411,412,413,222],{},"Then updating is a deliberate act: change the number, ",[272,414,415],{},"docker compose up -d",[205,417,419],{"id":418},"rolling-back","Rolling back",[421,422,423,428,442,446,474,478],"steps",{},[424,425,427],"h3",{"id":426},"pin-the-previous-version","Pin the previous version",[264,429,431],{"className":305,"code":430,"filename":394,"language":308,"meta":270,"style":270},"CHRONICLER_VERSION=1.0.8\n",[272,432,433],{"__ignoreMap":270},[275,434,435,437,439],{"class":277,"line":278},[275,436,402],{"class":401},[275,438,406],{"class":405},[275,440,441],{"class":319},"1.0.8\n",[424,443,445],{"id":444},"bring-it-back-up","Bring it back up",[256,447,448,458],{},[259,449,450],{"icon":261,"label":262},[264,451,452],{"className":266,"code":293,"filename":268,"language":269,"meta":270,"style":270},[272,453,454],{"__ignoreMap":270},[275,455,456],{"class":277,"line":278},[275,457,293],{},[259,459,460],{"icon":35,"label":302},[264,461,462],{"className":305,"code":293,"filename":307,"language":308,"meta":270,"style":270},[272,463,464],{"__ignoreMap":270},[275,465,466,468,470,472],{"class":277,"line":278},[275,467,326],{"class":325},[275,469,329],{"class":319},[275,471,341],{"class":319},[275,473,344],{"class":319},[424,475,477],{"id":476},"restore-the-backup-if-the-schema-changed","Restore the backup if the schema changed",[149,479,480,481,484],{},"If the newer version migrated the database, an older backend may not read it.\nRestore the backup you took before updating\n(",[482,483,84],"a",{"href":85},").",[486,487,488],"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.",[205,490,492],{"id":491},"updating-ollama","Updating Ollama",[149,494,495],{},"The model runtime has its own version:",[264,497,499],{"className":305,"code":498,"filename":394,"language":308,"meta":270,"style":270},"OLLAMA_VERSION=0.32.4\n",[272,500,501],{"__ignoreMap":270},[275,502,503,506,508],{"class":277,"line":278},[275,504,505],{"class":401},"OLLAMA_VERSION",[275,507,406],{"class":405},[275,509,510],{"class":319},"0.32.4\n",[149,512,513],{},"Leave it alone unless you're chasing a specific fix. Downloaded models live in a\nseparate volume and survive the change.",[205,515,517],{"id":516},"after-an-update","After an update",[519,520,521,525,532,538],"ul",{},[522,523,524],"li",{},"Sign in and ask a question.",[522,526,527,528,531],{},"Check ",[179,529,530],{},"Admin → Model"," still shows your model as active.",[522,533,527,534,537],{},[179,535,536],{},"Admin → Licensing"," still says Active.",[522,539,540,541,222],{},"If search looks wrong, run ",[179,542,543],{},"Reindex all",[371,545,546,549,550,553,554,556,557,561,562,564],{},[179,547,548],{},"On a GPU server, once:"," the console needs ",[272,551,552],{},"CHRONICLER_GPU_VRAM_GB"," in your\n",[272,555,394],{}," to offer the GPU-class models, and installs predating that key won't have\nit. Rerun the\n",[482,558,560],{"href":559},"\u002Fen\u002Fself-hosting\u002Fperformance-and-models\u002Fgpu-acceleration#automatic-detection","detection script","\nand ",[272,563,415],{},". Updating from the app writes it for you. Nothing\nbreaks without it - you're just capped at the CPU tiers.",[205,566,568],{"id":567},"update-cadence","Update cadence",[149,570,571],{},"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.",[573,574,575],"style",{},"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 .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 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":270,"searchDepth":284,"depth":284,"links":577},[578,579,580,581,582,587,588,589],{"id":207,"depth":284,"text":208},{"id":225,"depth":284,"text":226},{"id":253,"depth":284,"text":254},{"id":383,"depth":284,"text":384},{"id":418,"depth":284,"text":419,"children":583},[584,585,586],{"id":426,"depth":290,"text":427},{"id":444,"depth":290,"text":445},{"id":476,"depth":290,"text":477},{"id":491,"depth":284,"text":492},{"id":516,"depth":284,"text":517},{"id":567,"depth":284,"text":568},"The app and the server update separately. Here's how each one works.","md",null,{},{"icon":92},{"title":596,"description":597},"Updating a self-hosted Chronicler server","Update the Chronicler Docker stack, pin versions, and roll back safely.","V2stU6rukHIhDWn_bkzsAS8yq78j2qy4eR5tOVE9av0",[600,602],{"title":84,"path":85,"stem":86,"description":601,"icon":87,"children":-1},"Scheduled backups, an offsite copy, and how to get your data back.",{"title":94,"path":95,"stem":96,"description":603,"icon":97,"children":-1},"Let colleagues in without letting everyone in.",1785127056968]