[{"data":1,"prerenderedAt":943},["ShallowReactive",2],{"docs-pages-en":3,"doc-en-settings":154},[4,11,16,21,26,31,37,48,56,65,73,80,88,92,101,105,113,118,123,128,134,139,144,149],{"path":5,"title":6,"description":7,"order":8,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Finstallation","Installation","Install CloseYourIt on your own server with one command.",1,"start",null,{"path":12,"title":13,"description":14,"order":15,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fsettings","Settings","Every setting in the .env file, what it does and which ones you must never change.",2,{"path":17,"title":18,"description":19,"order":20,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fdatabase","Database","What the database is, what is inside, how long data stays and how much room it takes.",3,{"path":22,"title":23,"description":24,"order":25,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fupdates-and-backups","Updates and backups","Update to a new version, back up and restore the database, check the install.",4,{"path":27,"title":28,"description":29,"order":30,"group":9,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Ftroubleshooting","Troubleshooting","What to check when the install, the certificate, email or incoming data do not work.",5,{"path":32,"title":33,"description":34,"order":35,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fconnect-your-apps","Connect your apps","Every tool that sends data to CloseYourIt, and what each one collects.",6,"connect",{"path":38,"title":39,"description":40,"order":41,"group":10,"parent":42,"package":43,"note":44,"collects":45,"status":10},"\u002Fdocs\u002Fsdk-ruby","Ruby \u002F Rails","The closeyourit-ruby gem sends errors, logs, slow queries and job metrics from a Rails app.",7,"connect-your-apps","closeyourit-ruby","Errors, logs, slow queries and methods, background jobs.",{"errors":46,"logs":46,"performance":46,"visits":47,"servers":47},"full","none",{"path":49,"title":50,"description":51,"order":52,"group":10,"parent":42,"package":53,"note":54,"collects":55,"status":10},"\u002Fdocs\u002Fsdk-javascript","JavaScript","The @bussolabs\u002Fcloseyourit-js package works in the browser and on Node 20.16 or newer.",8,"@bussolabs\u002Fcloseyourit-js","Browser and Node, framework adapters and database queries from 0.13.0.",{"errors":46,"logs":46,"performance":46,"visits":46,"servers":47},{"path":57,"title":58,"description":59,"order":60,"group":10,"parent":42,"package":61,"note":62,"collects":63,"status":10},"\u002Fdocs\u002Fsdk-dart","Dart \u002F Flutter","The closeyourit package captures the errors of Flutter apps, even when the phone is offline.",9,"closeyourit","Public errors, logs and metrics from 0.9.3.",{"errors":46,"logs":64,"performance":64,"visits":47,"servers":47},"partial",{"path":66,"title":67,"description":68,"order":69,"group":10,"parent":42,"package":61,"note":70,"collects":71,"status":72},"\u002Fdocs\u002Fsdk-python","Python","The closeyourit package sends errors, logs and metrics from server-side Python applications.",10,"Server side. SQLAlchemy; Django query monitoring and FastAPI\u002FStarlette from 0.4.0.",{"errors":46,"logs":46,"performance":64,"visits":47,"servers":47},"pre_alpha",{"path":74,"title":75,"description":76,"order":77,"group":10,"parent":42,"package":75,"note":78,"collects":79,"status":10},"\u002Fdocs\u002Fsdk-sentry","Sentry SDK","Send errors with a compatible Sentry SDK; sessions and crashes have separate profiles.",11,"Compatible errors; sessions and crashes require a verified profile.",{"errors":46,"logs":47,"performance":47,"visits":47,"servers":47},{"path":81,"title":82,"description":83,"order":84,"group":10,"parent":42,"package":85,"note":86,"collects":87,"status":10},"\u002Fdocs\u002Fagent-server","Server agent","A small program on the server that sends the state of the machine every 60 seconds.",12,"closeyourit-agent","CPU, memory, disks, network, containers and services.",{"errors":47,"logs":64,"performance":47,"visits":47,"servers":46},{"path":89,"title":90,"description":91,"order":84,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnuxt","Vue and Nuxt","Connect Nuxt browser errors and Nitro server errors without exposing a server token.",{"path":93,"title":94,"description":95,"order":96,"group":10,"parent":42,"package":97,"note":98,"collects":99,"status":100},"\u002Fdocs\u002Fagent-kubernetes","Kubernetes","A read-only observer of the cluster: one copy per cluster.",13,"closeyourit-kube","Machines, apps and error events of the cluster.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":46},"coming",{"path":102,"title":103,"description":104,"order":96,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fopentelemetry","OpenTelemetry","Send server traces, metrics and logs through the optional OTLP receiver.",{"path":106,"title":107,"description":108,"order":109,"group":10,"parent":42,"package":110,"note":111,"collects":112,"status":10},"\u002Fdocs\u002Fcli","cyi CLI","The closeyourit command, cyi for short: manage projects, errors and tickets from the terminal.",14,"@bussolabs\u002Fcloseyourit-cli","It collects no data: it drives CloseYourIt from the terminal.",{"errors":47,"logs":47,"performance":47,"visits":47,"servers":47},{"path":114,"title":115,"description":116,"order":117,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fhttp-api","HTTP API","Send errors, logs, metrics and page views with plain HTTP requests, without an SDK.",15,{"path":119,"title":120,"description":121,"order":122,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fgithub-app","GitHub","Connect GitHub repositories to tickets and releases with your own GitHub App.",16,{"path":124,"title":125,"description":126,"order":127,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fingest-gateway","Ingest gateway","Keep incoming errors, logs and metrics safe when the app is slow or restarting.",17,{"path":129,"title":130,"description":131,"order":132,"group":133,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fai","AI","Turn on assistant, analysis, dictation and smart search with a CloseYourIt AI key or your own provider.",18,"automation",{"path":135,"title":136,"description":137,"order":138,"group":133,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fautomator","Automator","Let tickets be worked automatically on your own Linux machine, with Claude Code, Codex or both.",19,{"path":140,"title":141,"description":142,"order":143,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fstack-coverage","Frameworks and stack coverage","Choose a published SDK or understand the limits of a locally tested integration.",20,{"path":145,"title":146,"description":147,"order":148,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fmonitoring","Traces, measurements and sessions","Explore the new signals, compare releases and recover original error locations.",21,{"path":150,"title":151,"description":152,"order":153,"group":36,"parent":10,"package":10,"note":10,"collects":10,"status":10},"\u002Fdocs\u002Fnode-database","Node databases","Monitor slow and repeated queries with pg, mysql2, Drizzle and Prisma PostgreSQL.",22,{"id":155,"title":13,"body":156,"collects":10,"description":14,"extension":937,"group":9,"meta":938,"navigation":939,"note":10,"order":15,"package":10,"parent":10,"path":12,"seo":940,"status":10,"stem":941,"__hash__":942},"docs_en\u002Fdocs\u002Fsettings.md",{"type":157,"value":158,"toc":924},"minimark",[159,168,188,200,205,281,293,297,407,411,418,466,469,472,476,502,507,511,514,604,607,611,687,692,695,744,748,755,765,768,794,798,804,847,851,854,913,920],[160,161,162,163,167],"p",{},"All settings live in ",[164,165,166],"code",{},"\u002Fopt\u002Fcloseyourit\u002F.env",". After a change, run:",[169,170,175],"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-bash shiki shiki-themes github-light github-dark","closeyourit restart\n","bash","",[164,176,177],{"__ignoreMap":174},[178,179,181,184],"span",{"class":180,"line":8},"line",[178,182,61],{"class":183},"sScJk",[178,185,187],{"class":186},"sZZnC"," restart\n",[160,189,190,191,195,196,199],{},"The AI service is ",[192,193,194],"strong",{},"not"," set here: it has its own page in the administration area. See ",[197,198,130],"a",{"href":129},".",[201,202,204],"h2",{"id":203},"address","Address",[206,207,208,221],"table",{},[209,210,211],"thead",{},[212,213,214,218],"tr",{},[215,216,217],"th",{},"Variable",[215,219,220],{},"Use",[222,223,224,235,245,255,267],"tbody",{},[212,225,226,232],{},[227,228,229],"td",{},[164,230,231],{},"DOMAIN",[227,233,234],{},"the address Caddy serves and asks the HTTPS certificate for",[212,236,237,242],{},[227,238,239],{},[164,240,241],{},"ACME_EMAIL",[227,243,244],{},"email for the HTTPS certificate",[212,246,247,252],{},[227,248,249],{},[164,250,251],{},"APP_HOSTS",[227,253,254],{},"every address the app answers on, comma separated; the first is the main one",[212,256,257,262],{},[227,258,259],{},[164,260,261],{},"MAIL_HOST",[227,263,264,265],{},"the address used in links inside emails; defaults to the first of ",[164,266,251],{},[212,268,269,274],{},[227,270,271],{},[164,272,273],{},"APP_BASE_URL",[227,275,276,277,280],{},"the full public address, if it is not ",[164,278,279],{},"https:\u002F\u002F"," plus the main host",[160,282,283,284,286,287,289,290,292],{},"To change domain, change ",[164,285,231],{},", ",[164,288,251],{}," and ",[164,291,261],{}," together, point the new domain to the server, then restart.",[201,294,296],{"id":295},"email","Email",[206,298,299,310],{},[209,300,301],{},[212,302,303,305,308],{},[215,304,217],{},[215,306,307],{},"Default",[215,309,220],{},[222,311,312,328,343,358,373,392],{},[212,313,314,319,322],{},[227,315,316],{},[164,317,318],{},"SMTP_ADDRESS",[227,320,321],{},"empty",[227,323,324,325],{},"the SMTP server; ",[192,326,327],{},"empty means no email is sent",[212,329,330,335,340],{},[227,331,332],{},[164,333,334],{},"SMTP_PORT",[227,336,337],{},[164,338,339],{},"587",[227,341,342],{},"the port",[212,344,345,353,355],{},[227,346,347,286,350],{},[164,348,349],{},"SMTP_USERNAME",[164,351,352],{},"SMTP_PASSWORD",[227,354,321],{},[227,356,357],{},"credentials; leave both empty for a server without login",[212,359,360,365,370],{},[227,361,362],{},[164,363,364],{},"SMTP_AUTHENTICATION",[227,366,367],{},[164,368,369],{},"plain",[227,371,372],{},"the login method, used only with a username",[212,374,375,380,385],{},[227,376,377],{},[164,378,379],{},"SMTP_STARTTLS",[227,381,382],{},[164,383,384],{},"true",[227,386,387,388,391],{},"set to ",[164,389,390],{},"false"," for a server that does not offer STARTTLS",[212,393,394,399,404],{},[227,395,396],{},[164,397,398],{},"MAIL_FROM",[227,400,401],{},[164,402,403],{},"CloseYourIt \u003Cnoreply@your-domain>",[227,405,406],{},"the sender",[201,408,410],{"id":409},"uploaded-files","Uploaded files",[160,412,413,414,417],{},"Uploads stay on the server disk, in the Docker volume ",[164,415,416],{},"closeyourit_storage",". To keep them on Amazon S3 instead:",[206,419,420,428],{},[209,421,422],{},[212,423,424,426],{},[215,425,217],{},[215,427,220],{},[222,429,430,440,453],{},[212,431,432,437],{},[227,433,434],{},[164,435,436],{},"AWS_S3_BUCKET",[227,438,439],{},"the bucket; setting it switches uploads to S3",[212,441,442,447],{},[227,443,444],{},[164,445,446],{},"AWS_REGION",[227,448,449,450],{},"the region; defaults to ",[164,451,452],{},"eu-central-1",[212,454,455,463],{},[227,456,457,286,460],{},[164,458,459],{},"AWS_ACCESS_KEY_ID",[164,461,462],{},"AWS_SECRET_ACCESS_KEY",[227,464,465],{},"the credentials",[160,467,468],{},"Only Amazon S3 is supported: there is no setting for the address of another S3-compatible service.",[160,470,471],{},"Files uploaded before the switch stay on the disk and are not moved.",[201,473,475],{"id":474},"backups","Backups",[206,477,478,486],{},[209,479,480],{},[212,481,482,484],{},[215,483,217],{},[215,485,220],{},[222,487,488],{},[212,489,490,495],{},[227,491,492],{},[164,493,494],{},"BACKUP_S3_BUCKET",[227,496,497,498,501],{},"also send each database backup to this bucket, with the ",[164,499,500],{},"AWS_*"," credentials above",[160,503,504,505,199],{},"See ",[197,506,23],{"href":22},[201,508,510],{"id":509},"capacity","Capacity",[160,512,513],{},"Leave these alone until the server is clearly too busy.",[206,515,516,526],{},[209,517,518],{},[212,519,520,522,524],{},[215,521,217],{},[215,523,307],{},[215,525,220],{},[222,527,528,541,553,565,577],{},[212,529,530,535,538],{},[227,531,532],{},[164,533,534],{},"WEB_CONCURRENCY",[227,536,537],{},"1",[227,539,540],{},"processes that answer web requests",[212,542,543,548,550],{},[227,544,545],{},[164,546,547],{},"JOB_CONCURRENCY",[227,549,537],{},[227,551,552],{},"processes for general background work",[212,554,555,560,562],{},[227,556,557],{},[164,558,559],{},"INGEST_JOB_CONCURRENCY",[227,561,537],{},[227,563,564],{},"processes that save incoming errors, logs and metrics",[212,566,567,572,574],{},[227,568,569],{},[164,570,571],{},"EMBEDDINGS_JOB_CONCURRENCY",[227,573,537],{},[227,575,576],{},"processes that prepare text for AI search",[212,578,579,584,589],{},[227,580,581],{},[164,582,583],{},"RAILS_LOG_LEVEL",[227,585,586],{},[164,587,588],{},"info",[227,590,591,592,286,595,286,597,286,600,603],{},"how much the app writes in its log (",[164,593,594],{},"debug",[164,596,588],{},[164,598,599],{},"warn",[164,601,602],{},"error",")",[160,605,606],{},"Each extra process uses more memory. On a 4 GB server raise one value at a time.",[201,608,610],{"id":609},"integrations","Integrations",[206,612,613,621],{},[209,614,615],{},[212,616,617,619],{},[215,618,217],{},[215,620,220],{},[222,622,623,651,667,677],{},[212,624,625,645],{},[227,626,627,286,630,286,633,286,636,286,639,286,642],{},[164,628,629],{},"GH_APP_ID",[164,631,632],{},"GH_APP_SLUG",[164,634,635],{},"GH_APP_PRIVATE_KEY",[164,637,638],{},"GH_APP_CLIENT_ID",[164,640,641],{},"GH_APP_CLIENT_SECRET",[164,643,644],{},"GH_WEBHOOK_SECRET",[227,646,647,648],{},"the ",[197,649,650],{"href":119},"GitHub App",[212,652,653,664],{},[227,654,655,286,658,286,661],{},[164,656,657],{},"TELEGRAM_BOT_TOKEN",[164,659,660],{},"TELEGRAM_BOT_USERNAME",[164,662,663],{},"TELEGRAM_WEBHOOK_SECRET",[227,665,666],{},"a Telegram bot for notifications",[212,668,669,674],{},[227,670,671],{},[164,672,673],{},"MAXMIND_LICENSE_KEY",[227,675,676],{},"a free MaxMind license key: the country database for web analytics is then downloaded and kept fresh by itself; see below",[212,678,679,684],{},[227,680,681],{},[164,682,683],{},"GEOIP_DB_PATH",[227,685,686],{},"where the country database for web analytics is; see below",[688,689,691],"h3",{"id":690},"telegram","Telegram",[160,693,694],{},"Create a bot with BotFather, set the three variables, restart, then register the bot once:",[169,696,698],{"className":171,"code":697,"language":173,"meta":174,"style":174},"cd \u002Fopt\u002Fcloseyourit\ndocker compose exec app bin\u002Frails telegram:set_webhook\ndocker compose exec app bin\u002Frails telegram:set_commands\n",[164,699,700,709,729],{"__ignoreMap":174},[178,701,702,706],{"class":180,"line":8},[178,703,705],{"class":704},"sj4cs","cd",[178,707,708],{"class":186}," \u002Fopt\u002Fcloseyourit\n",[178,710,711,714,717,720,723,726],{"class":180,"line":15},[178,712,713],{"class":183},"docker",[178,715,716],{"class":186}," compose",[178,718,719],{"class":186}," exec",[178,721,722],{"class":186}," app",[178,724,725],{"class":186}," bin\u002Frails",[178,727,728],{"class":186}," telegram:set_webhook\n",[178,730,731,733,735,737,739,741],{"class":180,"line":20},[178,732,713],{"class":183},[178,734,716],{"class":186},[178,736,719],{"class":186},[178,738,722],{"class":186},[178,740,725],{"class":186},[178,742,743],{"class":186}," telegram:set_commands\n",[688,745,747],{"id":746},"countries-in-web-analytics","Countries in web analytics",[160,749,750,751,754],{},"The country of a visit comes from a MaxMind ",[192,752,753],{},"GeoLite2 Country"," file, which CloseYourIt does not ship. Without it everything else works and the country stays empty.",[160,756,757,758,760,761,764],{},"Create a free MaxMind account, generate a license key, set it as ",[164,759,673],{}," and restart. Every night CloseYourIt downloads the file when it is missing or a week old, and starts using it without a restart. ",[192,762,763],{},"Administration → System health"," says whether the file is there and up to date.",[160,766,767],{},"Without a key you can copy the file by hand; it is not updated then:",[169,769,771],{"className":171,"code":770,"language":173,"meta":174,"style":174},"cd \u002Fopt\u002Fcloseyourit\ndocker compose cp GeoLite2-Country.mmdb app:\u002Frails\u002Fstorage\u002FGeoLite2-Country.mmdb\n",[164,772,773,779],{"__ignoreMap":174},[178,774,775,777],{"class":180,"line":8},[178,776,705],{"class":704},[178,778,708],{"class":186},[178,780,781,783,785,788,791],{"class":180,"line":15},[178,782,713],{"class":183},[178,784,716],{"class":186},[178,786,787],{"class":186}," cp",[178,789,790],{"class":186}," GeoLite2-Country.mmdb",[178,792,793],{"class":186}," app:\u002Frails\u002Fstorage\u002FGeoLite2-Country.mmdb\n",[201,795,797],{"id":796},"written-by-the-installer","Written by the installer",[160,799,800,801,803],{},"The ",[164,802,61],{}," command manages these. Do not edit them by hand.",[206,805,806,815],{},[209,807,808],{},[212,809,810,812],{},[215,811,217],{},[215,813,814],{},"Managed by",[222,816,817,829],{},[212,818,819,824],{},[227,820,821],{},[164,822,823],{},"CLOSEYOURIT_VERSION",[227,825,826],{},[164,827,828],{},"closeyourit update",[212,830,831,839],{},[227,832,833,286,836],{},[164,834,835],{},"INGEST_ENABLED",[164,837,838],{},"INGEST_UPSTREAM",[227,840,841,289,844],{},[164,842,843],{},"closeyourit enable ingest",[164,845,846],{},"disable ingest",[201,848,850],{"id":849},"never-change-these","Never change these",[160,852,853],{},"They are generated at install time. Changing or losing one makes existing data unreadable or locks the app out of its database.",[206,855,856,865],{},[209,857,858],{},[212,859,860,862],{},[215,861,217],{},[215,863,864],{},"Protects",[222,866,867,877,887,903],{},[212,868,869,874],{},[227,870,871],{},[164,872,873],{},"POSTGRES_PASSWORD",[227,875,876],{},"the database",[212,878,879,884],{},[227,880,881],{},[164,882,883],{},"SECRET_KEY_BASE",[227,885,886],{},"sessions and signed links",[212,888,889,900],{},[227,890,891,286,894,286,897],{},[164,892,893],{},"AR_ENCRYPTION_PRIMARY_KEY",[164,895,896],{},"AR_ENCRYPTION_DETERMINISTIC_KEY",[164,898,899],{},"AR_ENCRYPTION_KEY_DERIVATION_SALT",[227,901,902],{},"encrypted columns in the database",[212,904,905,910],{},[227,906,907],{},[164,908,909],{},"SECRET_ASSETS_MASTER_KEY",[227,911,912],{},"the secrets vault",[160,914,915,916,919],{},"Keep a copy of ",[164,917,918],{},".env"," outside the server: the database backups do not contain these keys.",[921,922,923],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":174,"searchDepth":15,"depth":15,"links":925},[926,927,928,929,930,931,935,936],{"id":203,"depth":15,"text":204},{"id":295,"depth":15,"text":296},{"id":409,"depth":15,"text":410},{"id":474,"depth":15,"text":475},{"id":509,"depth":15,"text":510},{"id":609,"depth":15,"text":610,"children":932},[933,934],{"id":690,"depth":20,"text":691},{"id":746,"depth":20,"text":747},{"id":796,"depth":15,"text":797},{"id":849,"depth":15,"text":850},"md",{},true,{"title":13,"description":14},"docs\u002Fsettings","RpiQPD3s72yzI2sr7d0zaY9joL-lOhglh_zCx6GRS_o",1791302513339]