[{"data":1,"prerenderedAt":793},["ShallowReactive",2],{"docs-pages-en":3,"doc-en-installation":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":6,"body":156,"collects":10,"description":7,"extension":787,"group":9,"meta":788,"navigation":789,"note":10,"order":8,"package":10,"parent":10,"path":5,"seo":790,"status":10,"stem":791,"__hash__":792},"docs_en\u002Fdocs\u002Finstallation.md",{"type":157,"value":158,"toc":778},"minimark",[159,164,235,246,250,253,287,290,334,341,345,348,424,521,524,528,566,575,579,687,691,703,710,714,723,774],[160,161,163],"h2",{"id":162},"requirements","Requirements",[165,166,167,189,200,211,221],"ul",{},[168,169,170,171,175,176,179,180,183,184,188],"li",{},"A Linux server (Debian, Ubuntu or similar) with ",[172,173,174],"strong",{},"4 GB of memory"," and ",[172,177,178],{},"20 GB of disk",". Add ",[172,181,182],{},"6 GB"," if you plan to turn on the ",[185,186,187],"a",{"href":124},"ingest gateway",".",[168,190,191,192,196,197,188],{},"A 64-bit processor: ",[193,194,195],"code",{},"x86_64"," or ",[193,198,199],{},"arm64",[168,201,202,203,206,207,210],{},"A domain, for example ",[193,204,205],{},"bugs.example.com",", with an ",[193,208,209],{},"A"," record pointing to the server.",[168,212,213,214,175,217,220],{},"Ports ",[172,215,216],{},"80",[172,218,219],{},"443"," reachable from the internet: the certificate is issued automatically.",[168,222,223,224,227,228,175,231,234],{},"Root access (",[193,225,226],{},"sudo","), plus ",[193,229,230],{},"curl",[193,232,233],{},"openssl",", which most servers already have.",[236,237,238,239,242,243,245],"p",{},"You do ",[172,240,241],{},"not"," need to install PostgreSQL, a web server or Docker yourself. Everything runs in containers that the installer starts; see ",[185,244,18],{"href":17}," for what is inside.",[160,247,249],{"id":248},"install","Install",[236,251,252],{},"Run this on the server:",[254,255,260],"pre",{"className":256,"code":257,"language":258,"meta":259,"style":259},"language-bash shiki shiki-themes github-light github-dark","curl -fsSL https:\u002F\u002Fget.closeyour.it | sudo bash\n","bash","",[193,261,262],{"__ignoreMap":259},[263,264,266,269,273,277,281,284],"span",{"class":265,"line":8},"line",[263,267,230],{"class":268},"sScJk",[263,270,272],{"class":271},"sj4cs"," -fsSL",[263,274,276],{"class":275},"sZZnC"," https:\u002F\u002Fget.closeyour.it",[263,278,280],{"class":279},"szBVR"," |",[263,282,283],{"class":268}," sudo",[263,285,286],{"class":275}," bash\n",[236,288,289],{},"The script:",[291,292,293,296,311,318,321,328,331],"ol",{},[168,294,295],{},"checks Docker and the compose plugin, and installs them if they are missing;",[168,297,298,299,302,303,306,307,310],{},"asks for the ",[172,300,301],{},"domain",", an ",[172,304,305],{},"email"," for the HTTPS certificate and the ",[172,308,309],{},"administrator email",";",[168,312,313,314,317],{},"asks for an ",[172,315,316],{},"SMTP server"," (you can skip it and add it later);",[168,319,320],{},"warns you if the domain does not point to this server yet;",[168,322,323,324,327],{},"writes everything to ",[193,325,326],{},"\u002Fopt\u002Fcloseyourit",", with every secret key generated on the spot;",[168,329,330],{},"starts the app, the worker, PostgreSQL and Caddy, and waits up to 5 minutes for the app to answer;",[168,332,333],{},"turns on the nightly backup, at 03:00.",[236,335,336,337,340],{},"At the end it prints the address, the administrator email and the administrator password ",[172,338,339],{},"once",". It is not shown again: write it down, then change it after the first sign-in.",[160,342,344],{"id":343},"install-without-questions","Install without questions",[236,346,347],{},"Set the answers beforehand and the script does not ask for them:",[254,349,351],{"className":256,"code":350,"language":258,"meta":259,"style":259},"curl -fsSL https:\u002F\u002Fget.closeyour.it | sudo \\\n  DOMAIN=bugs.example.com \\\n  ACME_EMAIL=ops@example.com \\\n  ADMIN_EMAIL=you@example.com \\\n  SMTP_ADDRESS=smtp.example.com SMTP_PORT=587 \\\n  SMTP_USERNAME=user SMTP_PASSWORD=secret \\\n  MAIL_FROM=\"CloseYourIt \u003Cnoreply@example.com>\" \\\n  bash\n",[193,352,353,368,375,382,389,402,412,419],{"__ignoreMap":259},[263,354,355,357,359,361,363,365],{"class":265,"line":8},[263,356,230],{"class":268},[263,358,272],{"class":271},[263,360,276],{"class":275},[263,362,280],{"class":279},[263,364,283],{"class":268},[263,366,367],{"class":271}," \\\n",[263,369,370,373],{"class":265,"line":15},[263,371,372],{"class":275},"  DOMAIN=bugs.example.com",[263,374,367],{"class":271},[263,376,377,380],{"class":265,"line":20},[263,378,379],{"class":275},"  ACME_EMAIL=ops@example.com",[263,381,367],{"class":271},[263,383,384,387],{"class":265,"line":25},[263,385,386],{"class":275},"  ADMIN_EMAIL=you@example.com",[263,388,367],{"class":271},[263,390,391,394,397,400],{"class":265,"line":30},[263,392,393],{"class":275},"  SMTP_ADDRESS=smtp.example.com",[263,395,396],{"class":275}," SMTP_PORT=",[263,398,399],{"class":271},"587",[263,401,367],{"class":271},[263,403,404,407,410],{"class":265,"line":35},[263,405,406],{"class":275},"  SMTP_USERNAME=user",[263,408,409],{"class":275}," SMTP_PASSWORD=secret",[263,411,367],{"class":271},[263,413,414,417],{"class":265,"line":41},[263,415,416],{"class":275},"  MAIL_FROM=\"CloseYourIt \u003Cnoreply@example.com>\"",[263,418,367],{"class":271},[263,420,421],{"class":265,"line":52},[263,422,423],{"class":275},"  bash\n",[425,426,427,440],"table",{},[428,429,430],"thead",{},[431,432,433,437],"tr",{},[434,435,436],"th",{},"Variable",[434,438,439],{},"Use",[441,442,443,454,464,476,499,509],"tbody",{},[431,444,445,451],{},[446,447,448],"td",{},[193,449,450],{},"DOMAIN",[446,452,453],{},"the address CloseYourIt answers on",[431,455,456,461],{},[446,457,458],{},[193,459,460],{},"ACME_EMAIL",[446,462,463],{},"email for the HTTPS certificate",[431,465,466,471],{},[446,467,468],{},[193,469,470],{},"ADMIN_EMAIL",[446,472,473,474],{},"the administrator account; defaults to ",[193,475,460],{},[431,477,478,496],{},[446,479,480,483,484,483,487,483,490,483,493],{},[193,481,482],{},"SMTP_ADDRESS",", ",[193,485,486],{},"SMTP_PORT",[193,488,489],{},"SMTP_USERNAME",[193,491,492],{},"SMTP_PASSWORD",[193,494,495],{},"MAIL_FROM",[446,497,498],{},"outgoing email; set all five, or the script asks for the missing ones",[431,500,501,506],{},[446,502,503],{},[193,504,505],{},"CLOSEYOURIT_VERSION",[446,507,508],{},"a specific version instead of the latest one",[431,510,511,516],{},[446,512,513],{},[193,514,515],{},"CLOSEYOURIT_HOME",[446,517,518,519],{},"another folder instead of ",[193,520,326],{},[236,522,523],{},"If Docker is missing the script installs it: in a terminal it asks first, without one (cloud-init, CI) it goes ahead.",[160,525,527],{"id":526},"first-sign-in","First sign-in",[291,529,530,537,544,550,561],{},[168,531,532,533,536],{},"Open ",[193,534,535],{},"https:\u002F\u002F\u003Cyour-domain>"," and sign in with the administrator email and the printed password.",[168,538,539,540,543],{},"Set up the ",[172,541,542],{},"second factor",": the administration area stays closed until you do.",[168,545,546,547,188],{},"In the administration area, create your first ",[172,548,549],{},"organization",[168,551,552,553,556,557,560],{},"Inside it, create a ",[172,554,555],{},"project",", then an ",[172,558,559],{},"ingest token"," in the project settings.",[168,562,563,564,188],{},"Connect an application: see ",[185,565,33],{"href":32},[236,567,568,569,572,573,188],{},"Without an SMTP server CloseYourIt sends ",[172,570,571],{},"no email at all",": no invitations, no password reset, no alerts by email. Add it before inviting other people; see ",[185,574,13],{"href":12},[160,576,578],{"id":577},"what-lives-where","What lives where",[425,580,581,591],{},[428,582,583],{},[431,584,585,588],{},[434,586,587],{},"Path",[434,589,590],{},"What",[441,592,593,603,613,623,633,643,656,666,677],{},[431,594,595,600],{},[446,596,597],{},[193,598,599],{},"\u002Fopt\u002Fcloseyourit\u002F.env",[446,601,602],{},"settings and secret keys (readable by root only)",[431,604,605,610],{},[446,606,607],{},[193,608,609],{},"\u002Fopt\u002Fcloseyourit\u002Fcompose.yml",[446,611,612],{},"the services",[431,614,615,620],{},[446,616,617],{},[193,618,619],{},"\u002Fopt\u002Fcloseyourit\u002FCaddyfile",[446,621,622],{},"the web server in front of the app",[431,624,625,630],{},[446,626,627],{},[193,628,629],{},"\u002Fopt\u002Fcloseyourit\u002Fbackups\u002F",[446,631,632],{},"nightly database copies",[431,634,635,640],{},[446,636,637],{},[193,638,639],{},"\u002Fopt\u002Fcloseyourit\u002Fingest\u002F",[446,641,642],{},"password and encryption key of the ingest gateway",[431,644,645,650],{},[446,646,647],{},[193,648,649],{},"\u002Fusr\u002Flocal\u002Fbin\u002Fcloseyourit",[446,651,652,653,655],{},"the ",[193,654,61],{}," command",[431,657,658,663],{},[446,659,660],{},[193,661,662],{},"\u002Fetc\u002Fcron.d\u002Fcloseyourit",[446,664,665],{},"the nightly backup",[431,667,668,674],{},[446,669,670,671],{},"Docker volume ",[193,672,673],{},"closeyourit_postgres",[446,675,676],{},"the database",[431,678,679,684],{},[446,680,670,681],{},[193,682,683],{},"closeyourit_storage",[446,685,686],{},"uploaded files",[160,688,690],{"id":689},"keep-the-secret-keys-safe","Keep the secret keys safe",[692,693,694],"warning",{},[236,695,696,698,699,702],{},[193,697,599],{}," holds the keys that encrypt part of your data. They exist ",[172,700,701],{},"only in that file",": the database backups do not contain them. If you lose the file, the encrypted data cannot be read again, even with a good backup.",[236,704,705,706,709],{},"Copy ",[193,707,708],{},".env"," to a safe place right after the install, and again whenever you change it.",[160,711,713],{"id":712},"uninstall","Uninstall",[692,715,716],{},[236,717,718,719,722],{},"This deletes CloseYourIt and ",[172,720,721],{},"all its data"," from the server:",[254,724,726],{"className":256,"code":725,"language":258,"meta":259,"style":259},"cd \u002Fopt\u002Fcloseyourit && docker compose --profile ingest down --volumes\nrm -rf \u002Fopt\u002Fcloseyourit \u002Fusr\u002Flocal\u002Fbin\u002Fcloseyourit \u002Fetc\u002Fcron.d\u002Fcloseyourit\n",[193,727,728,758],{"__ignoreMap":259},[263,729,730,733,736,740,743,746,749,752,755],{"class":265,"line":8},[263,731,732],{"class":271},"cd",[263,734,735],{"class":275}," \u002Fopt\u002Fcloseyourit",[263,737,739],{"class":738},"sVt8B"," && ",[263,741,742],{"class":268},"docker",[263,744,745],{"class":275}," compose",[263,747,748],{"class":271}," --profile",[263,750,751],{"class":275}," ingest",[263,753,754],{"class":275}," down",[263,756,757],{"class":271}," --volumes\n",[263,759,760,763,766,768,771],{"class":265,"line":15},[263,761,762],{"class":268},"rm",[263,764,765],{"class":271}," -rf",[263,767,735],{"class":275},[263,769,770],{"class":275}," \u002Fusr\u002Flocal\u002Fbin\u002Fcloseyourit",[263,772,773],{"class":275}," \u002Fetc\u002Fcron.d\u002Fcloseyourit\n",[775,776,777],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}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 .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":259,"searchDepth":15,"depth":15,"links":779},[780,781,782,783,784,785,786],{"id":162,"depth":15,"text":163},{"id":248,"depth":15,"text":249},{"id":343,"depth":15,"text":344},{"id":526,"depth":15,"text":527},{"id":577,"depth":15,"text":578},{"id":689,"depth":15,"text":690},{"id":712,"depth":15,"text":713},"md",{},true,{"title":6,"description":7},"docs\u002Finstallation","JAJTSfEkqrzvU2sd8edBJ3T_kVTyCpq8iZgnl8nWUEs",1791302513339]