[{"data":1,"prerenderedAt":964},["ShallowReactive",2],{"navigation_docs_en":3,"-en-self-hosting-configuration-reference":123,"-en-self-hosting-configuration-reference-surround":959},[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":93,"body":125,"description":950,"extension":951,"links":952,"meta":953,"navigation":954,"path":94,"seo":955,"stem":95,"__hash__":958},"docs_en\u002Fen\u002F2.self-hosting\u002F7.configuration-reference.md",{"type":126,"value":127,"toc":938},"minimark",[128,133,199,210,214,265,269,318,341,345,408,412,420,523,526,530,646,650,653,696,739,749,753,763,794,807,811,873,876,880,925,934],[129,130,132],"h2",{"id":131},"where-settings-live","Where settings live",[134,135,136,152],"table",{},[137,138,139],"thead",{},[140,141,142,146,149],"tr",{},[143,144,145],"th",{},"Where",[143,147,148],{},"What",[143,150,151],{},"Applies",[153,154,155,177,188],"tbody",{},[140,156,157,168,171],{},[158,159,160,164,165],"td",{},[161,162,163],"code",{},".env"," beside ",[161,166,167],{},"docker-compose.yml",[158,169,170],{},"Password, GPU profile, ports, versions, memory knobs",[158,172,173,174],{},"After ",[161,175,176],{},"docker compose up -d",[140,178,179,182,185],{},[158,180,181],{},"Admin console",[158,183,184],{},"Model, embedding location, disk allocation, backups, licence, updates",[158,186,187],{},"Immediately",[140,189,190,193,196],{},[158,191,192],{},"Baked into the image",[158,194,195],{},"Realm, sign-up policy, licence enforcement, embedding model, internal URLs",[158,197,198],{},"Not changeable",[200,201,202,203,205,206,209],"caution",{},"The ",[161,204,163],{}," file holds your database password. It is the only key to the\n",[161,207,208],{},"postgres_data"," volume — back it up, and never regenerate it on a running\ninstall.",[129,211,213],{"id":212},"required","Required",[134,215,216,226],{},[137,217,218],{},[140,219,220,223],{},[143,221,222],{},"Variable",[143,224,225],{},"Description",[153,227,228,238],{},[140,229,230,235],{},[158,231,232],{},[161,233,234],{},"POSTGRES_PASSWORD",[158,236,237],{},"Database password. No default ships. Compose refuses to start without it.",[140,239,240,245],{},[158,241,242],{},[161,243,244],{},"COMPOSE_PROFILES",[158,246,247,248,251,252,255,256,259,260,264],{},"Which model runtime starts: ",[161,249,250],{},"cpu",", ",[161,253,254],{},"nvidia"," or ",[161,257,258],{},"amd",". Unset means ",[261,262,263],"strong",{},"no"," model runtime starts.",[129,266,268],{"id":267},"versions","Versions",[134,270,271,282],{},[137,272,273],{},[140,274,275,277,280],{},[143,276,222],{},[143,278,279],{},"Default",[143,281,225],{},[153,283,284,303],{},[140,285,286,291,296],{},[158,287,288],{},[161,289,290],{},"CHRONICLER_VERSION",[158,292,293],{},[161,294,295],{},"latest",[158,297,298,299,302],{},"Backend image tag. Pin it (e.g. ",[161,300,301],{},"1.0.9",") to make updates deliberate.",[140,304,305,310,315],{},[158,306,307],{},[161,308,309],{},"OLLAMA_VERSION",[158,311,312],{},[161,313,314],{},"0.32.4",[158,316,317],{},"Ollama image tag.",[319,320,321,322,324,325,328,329,332,333,336,337,340],"note",{},"The compose file you get from the desktop app or the release uses\n",[161,323,290],{},". If you're working from the repository's\n",[161,326,327],{},"docker\u002Fdocker-compose.yml"," instead, the equivalents are ",[161,330,331],{},"IMAGE_TAG"," and\n",[161,334,335],{},"IMAGE_NAMESPACE",", and ",[161,338,339],{},"OLLAMA_GENERATION_MODEL"," selects which model is\npre-downloaded.",[129,342,344],{"id":343},"ports","Ports",[134,346,347,357],{},[137,348,349],{},[140,350,351,353,355],{},[143,352,222],{},[143,354,279],{},[143,356,225],{},[153,358,359,374,389],{},[140,360,361,366,371],{},[158,362,363],{},[161,364,365],{},"BACKEND_PORT",[158,367,368],{},[161,369,370],{},"8410",[158,372,373],{},"Where the app connects. Change if 8410 is taken.",[140,375,376,381,386],{},[158,377,378],{},[161,379,380],{},"OLLAMA_PORT",[158,382,383],{},[161,384,385],{},"11434",[158,387,388],{},"Model runtime. Only needs to be reachable from the stack itself.",[140,390,391,396,401],{},[158,392,393],{},[161,394,395],{},"POSTGRES_PORT",[158,397,398],{},[161,399,400],{},"5432",[158,402,403,404,407],{},"Database. Bound to ",[161,405,406],{},"127.0.0.1"," — not reachable from the network, by design.",[129,409,411],{"id":410},"memory-and-performance","Memory and performance",[413,414,415,416,419],"p",{},"Full explanations on ",[417,418,88],"a",{"href":89},".",[134,421,422,432],{},[137,423,424],{},[140,425,426,428,430],{},[143,427,222],{},[143,429,279],{},[143,431,225],{},[153,433,434,453,466,478,493,508],{},[140,435,436,441,446],{},[158,437,438],{},[161,439,440],{},"OLLAMA_KEEP_ALIVE",[158,442,443],{},[161,444,445],{},"5m",[158,447,448,449,452],{},"How long the model stays in memory. ",[161,450,451],{},"-1"," = forever.",[140,454,455,460,463],{},[158,456,457],{},[161,458,459],{},"OLLAMA_NUM_PARALLEL",[158,461,462],{},"automatic",[158,464,465],{},"Concurrent requests per model. Multiplies context memory.",[140,467,468,473,475],{},[158,469,470],{},[161,471,472],{},"OLLAMA_MAX_LOADED_MODELS",[158,474,462],{},[158,476,477],{},"Models resident at once.",[140,479,480,485,490],{},[158,481,482],{},[161,483,484],{},"OLLAMA_CONTEXT_LENGTH",[158,486,487],{},[161,488,489],{},"16384",[158,491,492],{},"Default context for other clients. Does not change chat context.",[140,494,495,500,505],{},[158,496,497],{},[161,498,499],{},"POSTGRES_SHARED_BUFFERS",[158,501,502],{},[161,503,504],{},"128MB",[158,506,507],{},"Database cache.",[140,509,510,515,520],{},[158,511,512],{},[161,513,514],{},"POSTGRES_WORK_MEM",[158,516,517],{},[161,518,519],{},"4MB",[158,521,522],{},"Memory per sort.",[413,524,525],{},"A variable you leave out is not passed to the container at all, so the runtime's\nown default applies. That's intentional — there's no way to accidentally set an\nempty value.",[129,527,529],{"id":528},"a-complete-example","A complete example",[531,532,537],"pre",{"className":533,"code":534,"filename":163,"language":535,"meta":536,"style":536},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Required\nPOSTGRES_PASSWORD=8f3c1d7a9b2e4c6f0a5d8e1b3c7f9a2d4e6b8c0f\nCOMPOSE_PROFILES=nvidia\n\n# Pin the version so updates are deliberate\nCHRONICLER_VERSION=1.0.9\n\n# Memory: dedicated server, keep the model hot, four people\nOLLAMA_KEEP_ALIVE=-1\nOLLAMA_NUM_PARALLEL=4\nPOSTGRES_SHARED_BUFFERS=2GB\nPOSTGRES_WORK_MEM=16MB\n","bash","",[161,538,539,548,562,572,579,585,595,600,606,616,626,636],{"__ignoreMap":536},[540,541,544],"span",{"class":542,"line":543},"line",1,[540,545,547],{"class":546},"sHwdD","# Required\n",[540,549,551,554,558],{"class":542,"line":550},2,[540,552,234],{"class":553},"sTEyZ",[540,555,557],{"class":556},"sMK4o","=",[540,559,561],{"class":560},"sfazB","8f3c1d7a9b2e4c6f0a5d8e1b3c7f9a2d4e6b8c0f\n",[540,563,565,567,569],{"class":542,"line":564},3,[540,566,244],{"class":553},[540,568,557],{"class":556},[540,570,571],{"class":560},"nvidia\n",[540,573,575],{"class":542,"line":574},4,[540,576,578],{"emptyLinePlaceholder":577},true,"\n",[540,580,582],{"class":542,"line":581},5,[540,583,584],{"class":546},"# Pin the version so updates are deliberate\n",[540,586,588,590,592],{"class":542,"line":587},6,[540,589,290],{"class":553},[540,591,557],{"class":556},[540,593,594],{"class":560},"1.0.9\n",[540,596,598],{"class":542,"line":597},7,[540,599,578],{"emptyLinePlaceholder":577},[540,601,603],{"class":542,"line":602},8,[540,604,605],{"class":546},"# Memory: dedicated server, keep the model hot, four people\n",[540,607,609,611,613],{"class":542,"line":608},9,[540,610,440],{"class":553},[540,612,557],{"class":556},[540,614,615],{"class":560},"-1\n",[540,617,619,621,623],{"class":542,"line":618},10,[540,620,459],{"class":553},[540,622,557],{"class":556},[540,624,625],{"class":560},"4\n",[540,627,629,631,633],{"class":542,"line":628},11,[540,630,499],{"class":553},[540,632,557],{"class":556},[540,634,635],{"class":560},"2GB\n",[540,637,639,641,643],{"class":542,"line":638},12,[540,640,514],{"class":553},[540,642,557],{"class":556},[540,644,645],{"class":560},"16MB\n",[129,647,649],{"id":648},"volumes","Volumes",[413,651,652],{},"These three are your install. Everything else is disposable.",[134,654,655,665],{},[137,656,657],{},[140,658,659,662],{},[143,660,661],{},"Volume",[143,663,664],{},"Contents",[153,666,667,676,686],{},[140,668,669,673],{},[158,670,671],{},[161,672,208],{},[158,674,675],{},"Database: accounts, documents, the search index.",[140,677,678,683],{},[158,679,680],{},[161,681,682],{},"backend_uploads",[158,684,685],{},"Uploaded files, generated backups, the server's signing key and install id.",[140,687,688,693],{},[158,689,690],{},[161,691,692],{},"ollama_data",[158,694,695],{},"Downloaded models. Large, and re-downloadable.",[531,697,700],{"className":533,"code":698,"filename":699,"language":535,"meta":536,"style":536},"docker volume ls | grep chronicler\ndocker system df -v          # how much space each one uses\n","Terminal",[161,701,702,723],{"__ignoreMap":536},[540,703,704,708,711,714,717,720],{"class":542,"line":543},[540,705,707],{"class":706},"sBMFI","docker",[540,709,710],{"class":560}," volume",[540,712,713],{"class":560}," ls",[540,715,716],{"class":556}," |",[540,718,719],{"class":706}," grep",[540,721,722],{"class":560}," chronicler\n",[540,724,725,727,730,733,736],{"class":542,"line":550},[540,726,707],{"class":706},[540,728,729],{"class":560}," system",[540,731,732],{"class":560}," df",[540,734,735],{"class":560}," -v",[540,737,738],{"class":546},"          # how much space each one uses\n",[200,740,741,744,745,748],{},[161,742,743],{},"docker compose down -v"," deletes these volumes and everything in them. Plain\n",[161,746,747],{},"docker compose down"," does not. There is no undo.",[129,750,752],{"id":751},"optional-an-offsite-backup-folder","Optional: an offsite backup folder",[413,754,755,756,758,759,762],{},"To have scheduled backups copied somewhere outside Docker, mount a host folder\ninto the backend container. Edit your ",[161,757,167],{},", under the ",[161,760,761],{},"backend","\nservice:",[531,764,768],{"className":765,"code":766,"filename":167,"language":767,"meta":536,"style":536},"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","yaml",[161,769,770,779,787],{"__ignoreMap":536},[540,771,772,776],{"class":542,"line":543},[540,773,775],{"class":774},"swJcz","    volumes",[540,777,778],{"class":556},":\n",[540,780,781,784],{"class":542,"line":550},[540,782,783],{"class":556},"      -",[540,785,786],{"class":560}," backend_uploads:\u002Fapp\u002Fuploads\n",[540,788,789,791],{"class":542,"line":564},[540,790,783],{"class":556},[540,792,793],{"class":560}," \u002Fmnt\u002Fnas\u002Fchronicler-backups:\u002Fmnt\u002Fbackups\n",[413,795,796,797,800,801,804,805,419],{},"Then enter ",[161,798,799],{},"\u002Fmnt\u002Fbackups"," as the offsite folder in ",[261,802,803],{},"Admin → Backups",". Details:\n",[417,806,48],{"href":49},[129,808,810],{"id":809},"what-you-cant-change-and-why","What you can't change, and why",[134,812,813,823],{},[137,814,815],{},[140,816,817,820],{},[143,818,819],{},"Fixed",[143,821,822],{},"Why",[153,824,825,833,841,849,857,865],{},[140,826,827,830],{},[158,828,829],{},"Single-organisation mode",[158,831,832],{},"A self-hosted server serves one organisation. This is what makes accounts, sharing and licensing behave predictably.",[140,834,835,838],{},[158,836,837],{},"No open sign-up",[158,839,840],{},"Accounts are created by an administrator, never self-serve.",[140,842,843,846],{},[158,844,845],{},"Licence enforcement",[158,847,848],{},"On, always. It cannot be switched off from the compose file.",[140,850,851,854],{},[158,852,853],{},"Central licence URL",[158,855,856],{},"Fixed, and responses are signed, so pointing the check at another server doesn't work.",[140,858,859,862],{},[158,860,861],{},"Embedding model",[158,863,864],{},"Changing it would invalidate every index built with the old one. Baked into the image so it can never be missing.",[140,866,867,870],{},[158,868,869],{},"Internal service URLs",[158,871,872],{},"The backend reaches the database and the model runtime over the stack's private network.",[413,874,875],{},"The security-relevant ones are enforced inside the image, not in the compose\nfile, so editing the compose file cannot turn them off.",[129,877,879],{"id":878},"getting-a-clean-look-at-your-configuration","Getting a clean look at your configuration",[531,881,883],{"className":533,"code":882,"filename":699,"language":535,"meta":536,"style":536},"docker compose config          # the fully resolved file, all variables expanded\ndocker compose ps              # what's running\ndocker compose logs backend    # what the backend thinks\n",[161,884,885,898,910],{"__ignoreMap":536},[540,886,887,889,892,895],{"class":542,"line":543},[540,888,707],{"class":706},[540,890,891],{"class":560}," compose",[540,893,894],{"class":560}," config",[540,896,897],{"class":546},"          # the fully resolved file, all variables expanded\n",[540,899,900,902,904,907],{"class":542,"line":550},[540,901,707],{"class":706},[540,903,891],{"class":560},[540,905,906],{"class":560}," ps",[540,908,909],{"class":546},"              # what's running\n",[540,911,912,914,916,919,922],{"class":542,"line":564},[540,913,707],{"class":706},[540,915,891],{"class":560},[540,917,918],{"class":560}," logs",[540,920,921],{"class":560}," backend",[540,923,924],{"class":546},"    # what the backend thinks\n",[413,926,927,930,931,933],{},[161,928,929],{},"docker compose config"," is the honest answer to \"did my ",[161,932,163],{}," actually take\neffect\" — it shows the values Compose resolved, not what you meant to write.",[935,936,937],"style",{},"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}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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":536,"searchDepth":550,"depth":550,"links":939},[940,941,942,943,944,945,946,947,948,949],{"id":131,"depth":550,"text":132},{"id":212,"depth":550,"text":213},{"id":267,"depth":550,"text":268},{"id":343,"depth":550,"text":344},{"id":410,"depth":550,"text":411},{"id":528,"depth":550,"text":529},{"id":648,"depth":550,"text":649},{"id":751,"depth":550,"text":752},{"id":809,"depth":550,"text":810},{"id":878,"depth":550,"text":879},"Every setting you can change, where it lives, and what is deliberately fixed.","md",null,{},{"icon":96},{"title":956,"description":957},"Chronicler self-hosting configuration reference","The complete list of environment variables, ports and volumes for the Chronicler self-hosted stack.","TL1zmWaZDrk5s42a1AYjzSLT0w_oP94L5JXWbknxVts",[960,962],{"title":88,"path":89,"stem":90,"description":961,"icon":91,"children":-1},"Give the stack more RAM, and know which knob actually changes anything.",{"title":98,"path":99,"stem":100,"description":963,"icon":101,"children":-1},"Which model writes your answers, how to change it, and what each one needs.",1785092110486]