[{"data":1,"prerenderedAt":989},["ShallowReactive",2],{"docs-navigation":3,"-docs-installation-cloudflare":410,"-docs-installation-cloudflare-surround":984},[4,19,166,319,333,397],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":18},"Overview","i-lucide-compass","\u002Fdocs\u002Foverview","docs\u002F1.overview",[10,14],{"title":11,"path":12,"stem":13},"Introduction","\u002Fdocs\u002Foverview\u002Fintroduction","docs\u002F1.overview\u002F1.introduction",{"title":15,"path":16,"stem":17},"JFrog compatibility","\u002Fdocs\u002Foverview\u002Fjfrog-compatibility","docs\u002F1.overview\u002F2.jfrog-compatibility",false,{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":18},"Installation","i-lucide-download","\u002Fdocs\u002Finstallation","docs\u002F2.installation",[25,29,43,68,108,112,116,162],{"title":26,"path":27,"stem":28},"Choosing a method","\u002Fdocs\u002Finstallation\u002Foverview","docs\u002F2.installation\u002F1.overview",{"title":30,"icon":31,"path":32,"stem":33,"children":34,"page":18},"Single binary","i-lucide-terminal","\u002Fdocs\u002Finstallation\u002Fsingle-binary","docs\u002F2.installation\u002F2.single-binary",[35,39],{"title":36,"path":37,"stem":38},"Quick start","\u002Fdocs\u002Finstallation\u002Fsingle-binary\u002Fquick-start","docs\u002F2.installation\u002F2.single-binary\u002F1.quick-start",{"title":40,"path":41,"stem":42},"Limits and backups","\u002Fdocs\u002Finstallation\u002Fsingle-binary\u002Foperations","docs\u002F2.installation\u002F2.single-binary\u002F2.operations",{"title":44,"icon":45,"path":46,"stem":47,"children":48,"page":18},"Docker","i-simple-icons-docker","\u002Fdocs\u002Finstallation\u002Fdocker","docs\u002F2.installation\u002F3.docker",[49,52,56,60,64],{"title":36,"path":50,"stem":51},"\u002Fdocs\u002Finstallation\u002Fdocker\u002Fquick-start","docs\u002F2.installation\u002F3.docker\u002F1.quick-start",{"title":53,"path":54,"stem":55},"PostgreSQL and S3","\u002Fdocs\u002Finstallation\u002Fdocker\u002Fpostgresql-and-s3","docs\u002F2.installation\u002F3.docker\u002F2.postgresql-and-s3",{"title":57,"path":58,"stem":59},"Docker Compose","\u002Fdocs\u002Finstallation\u002Fdocker\u002Fcompose","docs\u002F2.installation\u002F3.docker\u002F3.compose",{"title":61,"path":62,"stem":63},"Compose settings","\u002Fdocs\u002Finstallation\u002Fdocker\u002Fcompose-settings","docs\u002F2.installation\u002F3.docker\u002F4.compose-settings",{"title":65,"path":66,"stem":67},"Compose with another object store","\u002Fdocs\u002Finstallation\u002Fdocker\u002Fcompose-other-object-storage","docs\u002F2.installation\u002F3.docker\u002F5.compose-other-object-storage",{"title":69,"icon":70,"path":71,"stem":72,"children":73,"page":18},"Kubernetes","i-simple-icons-kubernetes","\u002Fdocs\u002Finstallation\u002Fkubernetes","docs\u002F2.installation\u002F4.kubernetes",[74,77,80,84,88,92,96,100,104],{"title":5,"path":75,"stem":76},"\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Foverview","docs\u002F2.installation\u002F4.kubernetes\u002F1.overview",{"title":36,"path":78,"stem":79},"\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fquick-start","docs\u002F2.installation\u002F4.kubernetes\u002F2.quick-start",{"title":81,"path":82,"stem":83},"External PostgreSQL","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fexternal-postgresql","docs\u002F2.installation\u002F4.kubernetes\u002F3.external-postgresql",{"title":85,"path":86,"stem":87},"External object storage","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fexternal-object-storage","docs\u002F2.installation\u002F4.kubernetes\u002F4.external-object-storage",{"title":89,"path":90,"stem":91},"Exposing Relic","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fexposing","docs\u002F2.installation\u002F4.kubernetes\u002F5.exposing",{"title":93,"path":94,"stem":95},"Values","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fvalues","docs\u002F2.installation\u002F4.kubernetes\u002F6.values",{"title":97,"path":98,"stem":99},"Upgrades and removal","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fupgrades","docs\u002F2.installation\u002F4.kubernetes\u002F7.upgrades",{"title":101,"path":102,"stem":103},"Hardening and probes","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fhardening","docs\u002F2.installation\u002F4.kubernetes\u002F8.hardening",{"title":105,"path":106,"stem":107},"Monitoring","\u002Fdocs\u002Finstallation\u002Fkubernetes\u002Fmonitoring","docs\u002F2.installation\u002F4.kubernetes\u002F9.monitoring",{"title":109,"path":110,"stem":111},"Cloudflare","\u002Fdocs\u002Finstallation\u002Fcloudflare","docs\u002F2.installation\u002F5.cloudflare",{"title":113,"path":114,"stem":115},"Configuration reference","\u002Fdocs\u002Finstallation\u002Fconfiguration","docs\u002F2.installation\u002F6.configuration",{"title":117,"icon":118,"path":119,"stem":120,"children":121,"page":18},"Storage","i-lucide-hard-drive","\u002Fdocs\u002Finstallation\u002Fstorage","docs\u002F2.installation\u002F7.storage",[122,126,130,134,138,142,146,150,154,158],{"title":123,"path":124,"stem":125},"Storage overview","\u002Fdocs\u002Finstallation\u002Fstorage\u002Foverview","docs\u002F2.installation\u002F7.storage\u002F1.overview",{"title":127,"path":128,"stem":129},"Azure Blob Storage","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fazure-blob-storage","docs\u002F2.installation\u002F7.storage\u002F10.azure-blob-storage",{"title":131,"path":132,"stem":133},"SeaweedFS","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fseaweedfs","docs\u002F2.installation\u002F7.storage\u002F2.seaweedfs",{"title":135,"path":136,"stem":137},"Amazon S3","\u002Fdocs\u002Finstallation\u002Fstorage\u002Famazon-s3","docs\u002F2.installation\u002F7.storage\u002F3.amazon-s3",{"title":139,"path":140,"stem":141},"Cloudflare R2","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fcloudflare-r2","docs\u002F2.installation\u002F7.storage\u002F4.cloudflare-r2",{"title":143,"path":144,"stem":145},"MinIO","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fminio","docs\u002F2.installation\u002F7.storage\u002F5.minio",{"title":147,"path":148,"stem":149},"Google Cloud Storage","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fgoogle-cloud-storage","docs\u002F2.installation\u002F7.storage\u002F6.google-cloud-storage",{"title":151,"path":152,"stem":153},"Backblaze B2","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fbackblaze-b2","docs\u002F2.installation\u002F7.storage\u002F7.backblaze-b2",{"title":155,"path":156,"stem":157},"Other S3-compatible services","\u002Fdocs\u002Finstallation\u002Fstorage\u002Fother","docs\u002F2.installation\u002F7.storage\u002F8.other",{"title":159,"path":160,"stem":161},"Filesystem","\u002Fdocs\u002Finstallation\u002Fstorage\u002Ffilesystem","docs\u002F2.installation\u002F7.storage\u002F9.filesystem",{"title":163,"path":164,"stem":165},"Development","\u002Fdocs\u002Finstallation\u002Fdevelopment","docs\u002F2.installation\u002F8.development",{"title":167,"icon":168,"path":169,"stem":170,"children":171,"page":18},"Guides","i-lucide-book-open","\u002Fdocs\u002Fguides","docs\u002F3.guides",[172,176,180,254,296,300,303,307,311,315],{"title":173,"path":174,"stem":175},"Repositories","\u002Fdocs\u002Fguides\u002Frepositories","docs\u002F3.guides\u002F1.repositories",{"title":177,"path":178,"stem":179},"Replication","\u002Fdocs\u002Fguides\u002Freplication","docs\u002F3.guides\u002F10.replication",{"title":181,"icon":182,"path":183,"stem":184,"children":185,"page":18},"Package types","i-lucide-package","\u002Fdocs\u002Fguides\u002Fpackage-types","docs\u002F3.guides\u002F2.package-types",[186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250],{"title":187,"path":188,"stem":189},"npm, yarn and pnpm","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fnpm","docs\u002F3.guides\u002F2.package-types\u002F01.npm",{"title":191,"path":192,"stem":193},"Maven and Gradle","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fmaven-gradle","docs\u002F3.guides\u002F2.package-types\u002F02.maven-gradle",{"title":195,"path":196,"stem":197},"Docker and OCI","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fdocker","docs\u002F3.guides\u002F2.package-types\u002F03.docker",{"title":199,"path":200,"stem":201},"Go","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fgo","docs\u002F3.guides\u002F2.package-types\u002F04.go",{"title":203,"path":204,"stem":205},"PyPI","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fpypi","docs\u002F3.guides\u002F2.package-types\u002F05.pypi",{"title":207,"path":208,"stem":209},"Helm","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fhelm","docs\u002F3.guides\u002F2.package-types\u002F06.helm",{"title":211,"path":212,"stem":213},"NuGet","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fnuget","docs\u002F3.guides\u002F2.package-types\u002F07.nuget",{"title":215,"path":216,"stem":217},"RubyGems","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Frubygems","docs\u002F3.guides\u002F2.package-types\u002F08.rubygems",{"title":219,"path":220,"stem":221},"Cargo","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fcargo","docs\u002F3.guides\u002F2.package-types\u002F09.cargo",{"title":223,"path":224,"stem":225},"Conan","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fconan","docs\u002F3.guides\u002F2.package-types\u002F10.conan",{"title":227,"path":228,"stem":229},"Terraform and OpenTofu","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fterraform","docs\u002F3.guides\u002F2.package-types\u002F11.terraform",{"title":231,"path":232,"stem":233},"Hugging Face","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fhugging-face","docs\u002F3.guides\u002F2.package-types\u002F12.hugging-face",{"title":235,"path":236,"stem":237},"Generic files","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fgeneric","docs\u002F3.guides\u002F2.package-types\u002F13.generic",{"title":239,"path":240,"stem":241},"RPM","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Frpm","docs\u002F3.guides\u002F2.package-types\u002F14.rpm",{"title":243,"path":244,"stem":245},"Debian","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fdebian","docs\u002F3.guides\u002F2.package-types\u002F15.debian",{"title":247,"path":248,"stem":249},"Alpine","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Falpine","docs\u002F3.guides\u002F2.package-types\u002F16.alpine",{"title":251,"path":252,"stem":253},"Nix","\u002Fdocs\u002Fguides\u002Fpackage-types\u002Fnix","docs\u002F3.guides\u002F2.package-types\u002F17.nix",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":18},"Security","i-lucide-shield","\u002Fdocs\u002Fguides\u002Fsecurity","docs\u002F3.guides\u002F3.security",[260,264,268,272,276,280,284,288,292],{"title":261,"path":262,"stem":263},"Permissions","\u002Fdocs\u002Fguides\u002Fsecurity\u002Fpermissions","docs\u002F3.guides\u002F3.security\u002F1.permissions",{"title":265,"path":266,"stem":267},"LDAP","\u002Fdocs\u002Fguides\u002Fsecurity\u002Fldap","docs\u002F3.guides\u002F3.security\u002F2.ldap",{"title":269,"path":270,"stem":271},"Access tokens","\u002Fdocs\u002Fguides\u002Fsecurity\u002Ftokens","docs\u002F3.guides\u002F3.security\u002F3.tokens",{"title":273,"path":274,"stem":275},"Relic Scan","\u002Fdocs\u002Fguides\u002Fsecurity\u002Frelic-scan","docs\u002F3.guides\u002F3.security\u002F4.relic-scan",{"title":277,"path":278,"stem":279},"CVE intelligence","\u002Fdocs\u002Fguides\u002Fsecurity\u002Fcve-intelligence","docs\u002F3.guides\u002F3.security\u002F5.cve-intelligence",{"title":281,"path":282,"stem":283},"Audit log","\u002Fdocs\u002Fguides\u002Fsecurity\u002Faudit-log","docs\u002F3.guides\u002F3.security\u002F6.audit-log",{"title":285,"path":286,"stem":287},"Single sign-on","\u002Fdocs\u002Fguides\u002Fsecurity\u002Fsingle-sign-on","docs\u002F3.guides\u002F3.security\u002F7.single-sign-on",{"title":289,"path":290,"stem":291},"SCIM provisioning","\u002Fdocs\u002Fguides\u002Fsecurity\u002Fscim","docs\u002F3.guides\u002F3.security\u002F8.scim",{"title":293,"path":294,"stem":295},"Workload identities","\u002Fdocs\u002Fguides\u002Fsecurity\u002Fworkload-identities","docs\u002F3.guides\u002F3.security\u002F9.workload-identities",{"title":297,"path":298,"stem":299},"Operations","\u002Fdocs\u002Fguides\u002Foperations","docs\u002F3.guides\u002F4.operations",{"title":105,"path":301,"stem":302},"\u002Fdocs\u002Fguides\u002Fmonitoring","docs\u002F3.guides\u002F5.monitoring",{"title":304,"path":305,"stem":306},"Metrics reference","\u002Fdocs\u002Fguides\u002Fmetrics-reference","docs\u002F3.guides\u002F6.metrics-reference",{"title":308,"path":309,"stem":310},"Webhooks","\u002Fdocs\u002Fguides\u002Fwebhooks","docs\u002F3.guides\u002F7.webhooks",{"title":312,"path":313,"stem":314},"Projects","\u002Fdocs\u002Fguides\u002Fprojects","docs\u002F3.guides\u002F8.projects",{"title":316,"path":317,"stem":318},"AI agents","\u002Fdocs\u002Fguides\u002Fai-agents","docs\u002F3.guides\u002F9.ai-agents",{"title":320,"icon":321,"path":322,"stem":323,"children":324,"page":18},"API","i-lucide-braces","\u002Fdocs\u002Fapi","docs\u002F4.api",[325,329],{"title":326,"path":327,"stem":328},"API usage","\u002Fdocs\u002Fapi\u002Foverview","docs\u002F4.api\u002F1.overview",{"title":330,"path":331,"stem":332},"Relic API","\u002Fdocs\u002Fapi\u002Frelic-api","docs\u002F4.api\u002F2.relic-api",{"title":334,"icon":31,"path":335,"stem":336,"children":337,"page":18},"CLI","\u002Fdocs\u002Fcli","docs\u002F5.cli",[338,341,345,349,353,357,361,365,369,373,377,381,385,389,393],{"title":5,"path":339,"stem":340},"\u002Fdocs\u002Fcli\u002Foverview","docs\u002F5.cli\u002F01.overview",{"title":342,"path":343,"stem":344},"Sign in and contexts","\u002Fdocs\u002Fcli\u002Fsign-in","docs\u002F5.cli\u002F02.sign-in",{"title":346,"path":347,"stem":348},"Resources","\u002Fdocs\u002Fcli\u002Fresources","docs\u002F5.cli\u002F03.resources",{"title":350,"path":351,"stem":352},"apply, diff and delete","\u002Fdocs\u002Fcli\u002Fapply","docs\u002F5.cli\u002F04.apply",{"title":354,"path":355,"stem":356},"Artifacts","\u002Fdocs\u002Fcli\u002Ffiles","docs\u002F5.cli\u002F05.files",{"title":358,"path":359,"stem":360},"Server, API and tokens","\u002Fdocs\u002Fcli\u002Fplatform","docs\u002F5.cli\u002F06.platform",{"title":362,"path":363,"stem":364},"Builds and images","\u002Fdocs\u002Fcli\u002Fbuilds","docs\u002F5.cli\u002F07.builds",{"title":366,"path":367,"stem":368},"Scanning and auditing","\u002Fdocs\u002Fcli\u002Fsecurity","docs\u002F5.cli\u002F08.security",{"title":370,"path":371,"stem":372},"Releases","\u002Fdocs\u002Fcli\u002Freleases","docs\u002F5.cli\u002F09.releases",{"title":374,"path":375,"stem":376},"Evidence","\u002Fdocs\u002Fcli\u002Fevidence","docs\u002F5.cli\u002F10.evidence",{"title":378,"path":379,"stem":380},"Package managers","\u002Fdocs\u002Fcli\u002Fpackage-managers","docs\u002F5.cli\u002F11.package-managers",{"title":382,"path":383,"stem":384},"Scan reports and VEX","\u002Fdocs\u002Fcli\u002Freports-and-vex","docs\u002F5.cli\u002F12.reports-and-vex",{"title":386,"path":387,"stem":388},"Migrating from Artifactory","\u002Fdocs\u002Fcli\u002Fimport","docs\u002F5.cli\u002F13.import",{"title":390,"path":391,"stem":392},"Database","\u002Fdocs\u002Fcli\u002Fdatabase","docs\u002F5.cli\u002F14.database",{"title":394,"path":395,"stem":396},"Machine setup","\u002Fdocs\u002Fcli\u002Fsetup","docs\u002F5.cli\u002F15.setup",{"title":398,"icon":399,"path":400,"stem":401,"children":402,"page":18},"SDK","i-lucide-boxes","\u002Fdocs\u002Fsdk","docs\u002F6.sdk",[403,406],{"title":5,"path":404,"stem":405},"\u002Fdocs\u002Fsdk\u002Foverview","docs\u002F6.sdk\u002F1.overview",{"title":407,"path":408,"stem":409},"Relic API clients","\u002Fdocs\u002Fsdk\u002Frelic-api-clients","docs\u002F6.sdk\u002F2.relic-api-clients",{"id":411,"title":109,"body":412,"description":977,"extension":978,"links":979,"meta":980,"navigation":981,"path":110,"seo":982,"stem":111,"__hash__":983},"docs\u002Fdocs\u002F2.installation\u002F5.cloudflare.md",{"type":413,"value":414,"toc":968},"minimark",[415,424,429,470,474,477,491,495,502,506,509,545,548,562,565,578,585,639,654,660,684,687,707,710,730,737,757,764,784,788,791,807,816,819,835,838,842,850,864,867,871,877,942,948,964],[416,417,418,419,423],"p",{},"Each release publishes ",[420,421,422],"code",{},"relic-cloudflare_vX.Y.Z.tar.gz",": a Worker that passes\nevery request to one Relic container, set to run that release. Content goes to R2, metadata to a PostgreSQL database you run\nelsewhere.",[425,426,428],"h2",{"id":427},"limits","Limits",[430,431,432,440,450,464],"ul",{},[433,434,435,439],"li",{},[436,437,438],"strong",{},"The container's disk is wiped at every start",", so this setup needs\nPostgreSQL and R2. Grype's database is downloaded again after each start.",[433,441,442,445,446,449],{},[436,443,444],{},"Cloudflare limits request bodies by plan:"," 100 MB on Free and Pro, 200 MB\non Business; Enterprise can raise it. Larger uploads fail with ",[420,447,448],{},"413",",\nincluding a Docker push with a larger layer.",[433,451,452,455,456,459,460,463],{},[436,453,454],{},"One container"," runs the server and the background jobs\n(",[420,457,458],{},"relic server start --worker --no-tls","), on instance type ",[420,461,462],{},"standard-2","\n(1 vCPU, 6 GiB of memory, 12 GB of disk).",[433,465,466,469],{},[436,467,468],{},"A cron trigger calls Relic every five minutes"," so background jobs keep\nrunning; Cloudflare bills that time. Without it, the container sleeps after\n15 idle minutes, and background jobs stop.",[425,471,473],{"id":472},"before-you-start","Before you start",[416,475,476],{},"You need:",[430,478,479,482,485,488],{},[433,480,481],{},"a Cloudflare account on the Workers Paid plan",[433,483,484],{},"Docker running locally, because Wrangler builds the image",[433,486,487],{},"Node.js 24 and pnpm",[433,489,490],{},"a PostgreSQL database that accepts TLS connections from the internet",[425,492,494],{"id":493},"create-the-r2-buckets","Create the R2 buckets",[416,496,497,498,501],{},"Create the buckets, lifecycle rules and API token as\n",[499,500,139],"a",{"href":140}," describes.",[425,503,505],{"id":504},"configure","Configure",[416,507,508],{},"Download the deployment and unpack it:",[510,511,516],"pre",{"className":512,"code":513,"language":514,"meta":515,"style":515},"language-bash shiki shiki-themes material-theme-lighter github-light-default github-dark-default","curl -fsSL https:\u002F\u002Fgithub.com\u002Frelicbuild\u002Frelic\u002Freleases\u002Fdownload\u002FvX.Y.Z\u002Frelic-cloudflare_vX.Y.Z.tar.gz | tar -xz\n","bash","",[420,517,518],{"__ignoreMap":515},[519,520,523,527,531,535,539,542],"span",{"class":521,"line":522},"line",1,[519,524,526],{"class":525},"seIyd","curl",[519,528,530],{"class":529},"smky3"," -fsSL",[519,532,534],{"class":533},"sasMN"," https:\u002F\u002Fgithub.com\u002Frelicbuild\u002Frelic\u002Freleases\u002Fdownload\u002FvX.Y.Z\u002Frelic-cloudflare_vX.Y.Z.tar.gz",[519,536,538],{"class":537},"s8eFF"," |",[519,540,541],{"class":525}," tar",[519,543,544],{"class":529}," -xz\n",[416,546,547],{},"Run the commands on this page in the directory it creates:",[510,549,551],{"className":512,"code":550,"language":514,"meta":515,"style":515},"cd relic-cloudflare_vX.Y.Z\n",[420,552,553],{"__ignoreMap":515},[519,554,555,559],{"class":521,"line":522},[519,556,558],{"class":557},"sRZlD","cd",[519,560,561],{"class":533}," relic-cloudflare_vX.Y.Z\n",[416,563,564],{},"Install the Worker's dependencies:",[510,566,568],{"className":512,"code":567,"language":514,"meta":515,"style":515},"pnpm install\n",[420,569,570],{"__ignoreMap":515},[519,571,572,575],{"class":521,"line":522},[519,573,574],{"class":525},"pnpm",[519,576,577],{"class":533}," install\n",[416,579,580,581,584],{},"Edit ",[420,582,583],{},"wrangler.jsonc",":",[430,586,587,610,621],{},[433,588,589,590,593,594,597,598,601,602,605,606,609],{},"In ",[420,591,592],{},"vars",", replace ",[420,595,596],{},"\u003Caccount-id>"," in ",[420,599,600],{},"RELIC_OBJECT_STORAGE_ENDPOINT"," with\nyour account ID. The buckets default to ",[420,603,604],{},"relic-artifacts"," and\n",[420,607,608],{},"relic-temporary",".",[433,611,612,613,616,617,620],{},"To serve Relic on your own domain, add\n",[420,614,615],{},"\"routes\": [{ \"pattern\": \"relic.example.com\", \"custom_domain\": true }]",".\nWithout it, the Worker answers on its ",[420,618,619],{},"workers.dev"," address.",[433,622,623,624,627,628,631,632,635,636,609],{},"The container's ",[420,625,626],{},"image_vars"," set ",[420,629,630],{},"RELIC_VERSION"," to the release you\ndownloaded, ",[420,633,634],{},"vX.Y.Z","; the image is ",[420,637,638],{},"ghcr.io\u002Frelicbuild\u002Frelic:vX.Y.Z",[416,640,641,642,645,646,649,650,653],{},"The Worker passes every ",[420,643,644],{},"RELIC_"," variable and secret to the container, so any\n",[499,647,648],{"href":114},"setting"," works. ",[420,651,652],{},"wrangler secret put"," asks\nfor each secret's value.",[416,655,656,657,584],{},"Store the database URL, such as\n",[420,658,659],{},"postgres:\u002F\u002Frelic:\u003Cpassword>@db.example.com:5432\u002Frelic?sslmode=require",[510,661,663],{"className":512,"code":662,"language":514,"meta":515,"style":515},"pnpm exec wrangler secret put RELIC_DATABASE_URL\n",[420,664,665],{"__ignoreMap":515},[519,666,667,669,672,675,678,681],{"class":521,"line":522},[519,668,574],{"class":525},[519,670,671],{"class":533}," exec",[519,673,674],{"class":533}," wrangler",[519,676,677],{"class":533}," secret",[519,679,680],{"class":533}," put",[519,682,683],{"class":533}," RELIC_DATABASE_URL\n",[416,685,686],{},"Store the R2 access key ID:",[510,688,690],{"className":512,"code":689,"language":514,"meta":515,"style":515},"pnpm exec wrangler secret put RELIC_OBJECT_STORAGE_ACCESS_KEY\n",[420,691,692],{"__ignoreMap":515},[519,693,694,696,698,700,702,704],{"class":521,"line":522},[519,695,574],{"class":525},[519,697,671],{"class":533},[519,699,674],{"class":533},[519,701,677],{"class":533},[519,703,680],{"class":533},[519,705,706],{"class":533}," RELIC_OBJECT_STORAGE_ACCESS_KEY\n",[416,708,709],{},"Store the R2 secret access key:",[510,711,713],{"className":512,"code":712,"language":514,"meta":515,"style":515},"pnpm exec wrangler secret put RELIC_OBJECT_STORAGE_SECRET_KEY\n",[420,714,715],{"__ignoreMap":515},[519,716,717,719,721,723,725,727],{"class":521,"line":522},[519,718,574],{"class":525},[519,720,671],{"class":533},[519,722,674],{"class":533},[519,724,677],{"class":533},[519,726,680],{"class":533},[519,728,729],{"class":533}," RELIC_OBJECT_STORAGE_SECRET_KEY\n",[416,731,732,733,736],{},"Store the encryption key, the output of ",[420,734,735],{},"openssl rand -base64 32",". Keep a copy\noutside Cloudflare: without it, Relic cannot read the secrets it stores.",[510,738,740],{"className":512,"code":739,"language":514,"meta":515,"style":515},"pnpm exec wrangler secret put RELIC_ENCRYPTION_KEY\n",[420,741,742],{"__ignoreMap":515},[519,743,744,746,748,750,752,754],{"class":521,"line":522},[519,745,574],{"class":525},[519,747,671],{"class":533},[519,749,674],{"class":533},[519,751,677],{"class":533},[519,753,680],{"class":533},[519,755,756],{"class":533}," RELIC_ENCRYPTION_KEY\n",[416,758,759,760,763],{},"Store the ",[420,761,762],{},"admin"," password:",[510,765,767],{"className":512,"code":766,"language":514,"meta":515,"style":515},"pnpm exec wrangler secret put RELIC_ADMIN_PASSWORD\n",[420,768,769],{"__ignoreMap":515},[519,770,771,773,775,777,779,781],{"class":521,"line":522},[519,772,574],{"class":525},[519,774,671],{"class":533},[519,776,674],{"class":533},[519,778,677],{"class":533},[519,780,680],{"class":533},[519,782,783],{"class":533}," RELIC_ADMIN_PASSWORD\n",[425,785,787],{"id":786},"deploy","Deploy",[416,789,790],{},"Build and push the image and deploy the Worker:",[510,792,794],{"className":512,"code":793,"language":514,"meta":515,"style":515},"pnpm exec wrangler deploy\n",[420,795,796],{"__ignoreMap":515},[519,797,798,800,802,804],{"class":521,"line":522},[519,799,574],{"class":525},[519,801,671],{"class":533},[519,803,674],{"class":533},[519,805,806],{"class":533}," deploy\n",[416,808,809,810,813,814,609],{},"Open ",[420,811,812],{},"https:\u002F\u002Frelic.example.com\u002F"," and sign in as ",[420,815,762],{},[416,817,818],{},"Follow the Worker's requests and errors:",[510,820,822],{"className":512,"code":821,"language":514,"meta":515,"style":515},"pnpm exec wrangler tail\n",[420,823,824],{"__ignoreMap":515},[519,825,826,828,830,832],{"class":521,"line":522},[519,827,574],{"class":525},[519,829,671],{"class":533},[519,831,674],{"class":533},[519,833,834],{"class":533}," tail\n",[416,836,837],{},"Relic's own log is on the container's page in the Cloudflare dashboard.",[425,839,841],{"id":840},"upgrade","Upgrade",[416,843,844,845,597,847,849],{},"Change ",[420,846,630],{},[420,848,626],{}," to the new release's tag, then deploy\nagain:",[510,851,852],{"className":512,"code":793,"language":514,"meta":515,"style":515},[420,853,854],{"__ignoreMap":515},[519,855,856,858,860,862],{"class":521,"line":522},[519,857,574],{"class":525},[519,859,671],{"class":533},[519,861,674],{"class":533},[519,863,806],{"class":533},[416,865,866],{},"Relic applies migrations when the new container starts.",[425,868,870],{"id":869},"run-it-locally","Run it locally",[416,872,873,874,584],{},"Locally the disk lasts as long as the container, so SQLite and a directory\nwork. Put these settings in ",[420,875,876],{},".dev.vars",[510,878,882],{"className":879,"code":880,"language":881,"meta":515,"style":515},"language-ini shiki shiki-themes material-theme-lighter github-light-default github-dark-default","RELIC_DATABASE_URL=sqlite:\u002F\u002F\u002Fvar\u002Flib\u002Frelic\u002Fdata\u002Frelic.db\nRELIC_OBJECT_STORAGE_TYPE=filesystem\nRELIC_OBJECT_STORAGE_PATH=\u002Fvar\u002Flib\u002Frelic\u002Fdata\u002Fobjects\nRELIC_ADMIN_PASSWORD=\u003Cadmin-password>\nRELIC_ENCRYPTION_KEY=\u003Copenssl rand -base64 32>\n","ini",[420,883,884,898,909,920,931],{"__ignoreMap":515},[519,885,886,890,894],{"class":521,"line":522},[519,887,889],{"class":888},"s03VG","RELIC_DATABASE_URL",[519,891,893],{"class":892},"sWneD","=",[519,895,897],{"class":896},"saDVj","sqlite:\u002F\u002F\u002Fvar\u002Flib\u002Frelic\u002Fdata\u002Frelic.db\n",[519,899,901,904,906],{"class":521,"line":900},2,[519,902,903],{"class":888},"RELIC_OBJECT_STORAGE_TYPE",[519,905,893],{"class":892},[519,907,908],{"class":896},"filesystem\n",[519,910,912,915,917],{"class":521,"line":911},3,[519,913,914],{"class":888},"RELIC_OBJECT_STORAGE_PATH",[519,916,893],{"class":892},[519,918,919],{"class":896},"\u002Fvar\u002Flib\u002Frelic\u002Fdata\u002Fobjects\n",[519,921,923,926,928],{"class":521,"line":922},4,[519,924,925],{"class":888},"RELIC_ADMIN_PASSWORD",[519,927,893],{"class":892},[519,929,930],{"class":896},"\u003Cadmin-password>\n",[519,932,934,937,939],{"class":521,"line":933},5,[519,935,936],{"class":888},"RELIC_ENCRYPTION_KEY",[519,938,893],{"class":892},[519,940,941],{"class":896},"\u003Copenssl rand -base64 32>\n",[416,943,944,945,584],{},"Start the Worker and the container on ",[420,946,947],{},"http:\u002F\u002Flocalhost:8787",[510,949,951],{"className":512,"code":950,"language":514,"meta":515,"style":515},"pnpm exec wrangler dev\n",[420,952,953],{"__ignoreMap":515},[519,954,955,957,959,961],{"class":521,"line":522},[519,956,574],{"class":525},[519,958,671],{"class":533},[519,960,674],{"class":533},[519,962,963],{"class":533}," dev\n",[965,966,967],"style",{},"html pre.shiki code .seIyd, html code.shiki .seIyd{--shiki-light:#E2931D;--shiki-default:#953800;--shiki-dark:#FFA657}html pre.shiki code .smky3, html code.shiki .smky3{--shiki-light:#91B859;--shiki-default:#0550AE;--shiki-dark:#79C0FF}html pre.shiki code .sasMN, html code.shiki .sasMN{--shiki-light:#91B859;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .s8eFF, html code.shiki .s8eFF{--shiki-light:#39ADB5;--shiki-default:#CF222E;--shiki-dark:#FF7B72}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 .sRZlD, html code.shiki .sRZlD{--shiki-light:#6182B8;--shiki-default:#0550AE;--shiki-dark:#79C0FF}html pre.shiki code .s03VG, html code.shiki .s03VG{--shiki-light:#E53935;--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .sWneD, html code.shiki .sWneD{--shiki-light:#39ADB5;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .saDVj, html code.shiki .saDVj{--shiki-light:#90A4AE;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}",{"title":515,"searchDepth":900,"depth":900,"links":969},[970,971,972,973,974,975,976],{"id":427,"depth":900,"text":428},{"id":472,"depth":900,"text":473},{"id":493,"depth":900,"text":494},{"id":504,"depth":900,"text":505},{"id":786,"depth":900,"text":787},{"id":840,"depth":900,"text":841},{"id":869,"depth":900,"text":870},"Run Relic in a Cloudflare Container behind a Worker, with R2 and your own PostgreSQL.","md",null,{},true,{"title":109,"description":977},"xiCcJYSZB61Nr_QE09SnuiZ2mmrNTXMOHL64Bk8N8gE",[985,987],{"title":105,"path":106,"stem":107,"description":986,"children":-1},"Get metrics, traces, logs and dashboards from the chart, with its own monitoring stack or yours.",{"title":113,"path":114,"stem":115,"description":988,"children":-1},"Every environment variable the Relic server and worker read.",1793857336448]