[{"data":1,"prerenderedAt":1229},["ShallowReactive",2],{"docs-navigation":3,"-docs-installation-storage-seaweedfs":410,"-docs-installation-storage-seaweedfs-surround":1224},[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":131,"body":412,"description":1217,"extension":1218,"links":1219,"meta":1220,"navigation":1221,"path":132,"seo":1222,"stem":133,"__hash__":1223},"docs\u002Fdocs\u002F2.installation\u002F7.storage\u002F2.seaweedfs.md",{"type":413,"value":414,"toc":1210},"minimark",[415,424,429,453,457,509,513,532,726,733,749,819,841,846,886,889,892,950,954,963,1017,1024,1075,1085,1144,1151,1155,1206],[416,417,418,419,423],"p",{},"Relic is built and tested against SeaweedFS. The Compose stack, the Helm\nchart's bundled store and the end-to-end tests use it (image\n",[420,421,422],"code",{},"chrislusf\u002Fseaweedfs:4.48",").",[425,426,428],"h2",{"id":427},"why-seaweedfs","Why SeaweedFS",[430,431,432,436,443,450],"ul",{},[433,434,435],"li",{},"Uploads, range reads, the readiness check, garbage collection, and the backup\nand restore drill are tested against its S3 gateway.",[433,437,438,439,442],{},"Per-path TTLs expire abandoned uploads in ",[420,440,441],{},"temporary"," without a lifecycle job.",[433,444,445,446,449],{},"Replication is configurable: placement ",[420,447,448],{},"010"," keeps a copy on another rack.",[433,451,452],{},"It is Apache 2.0 licensed, one binary, with no external dependencies.",[425,454,456],{"id":455},"architecture","Architecture",[458,459,460,473],"table",{},[461,462,463],"thead",{},[464,465,466,470],"tr",{},[467,468,469],"th",{},"Component",[467,471,472],{},"Role",[474,475,476,485,493,501],"tbody",{},[464,477,478,482],{},[479,480,481],"td",{},"master",[479,483,484],{},"Assigns volumes and enforces replication. Run three for high availability.",[464,486,487,490],{},[479,488,489],{},"volume servers",[479,491,492],{},"Store the data.",[464,494,495,498],{},[479,496,497],{},"filer",[479,499,500],{},"Maps bucket paths to data. Give it its own metadata store (leveldb2, or a database), never Relic's PostgreSQL.",[464,502,503,506],{},[479,504,505],{},"S3 gateway",[479,507,508],{},"The endpoint Relic talks to, on port 8333.",[425,510,512],{"id":511},"setup","Setup",[416,514,515,519,520,523,524,527,528,531],{},[516,517,518],"strong",{},"1. S3 identity."," Pass this file to the gateway with ",[420,521,522],{},"-config",", or with\n",[420,525,526],{},"-s3.config"," for ",[420,529,530],{},"weed server",":",[533,534,539],"pre",{"className":535,"code":536,"language":537,"meta":538,"style":538},"language-json shiki shiki-themes material-theme-lighter github-light-default github-dark-default","{\n  \"identities\": [\n    {\n      \"name\": \"relic\",\n      \"credentials\": [{ \"accessKey\": \"\u003Caccess-key>\", \"secretKey\": \"\u003Csecret-key>\" }],\n      \"actions\": [\"Read\", \"Write\", \"List\", \"Tagging\"]\n    }\n  ]\n}\n","json","",[420,540,541,550,569,575,602,656,708,714,720],{"__ignoreMap":538},[542,543,546],"span",{"class":544,"line":545},"line",1,[542,547,549],{"class":548},"sWneD","{\n",[542,551,553,557,561,564,566],{"class":544,"line":552},2,[542,554,556],{"class":555},"sK3rv","  \"",[542,558,560],{"class":559},"s10kg","identities",[542,562,563],{"class":555},"\"",[542,565,531],{"class":548},[542,567,568],{"class":548}," [\n",[542,570,572],{"class":544,"line":571},3,[542,573,574],{"class":548},"    {\n",[542,576,578,581,585,587,589,593,597,599],{"class":544,"line":577},4,[542,579,580],{"class":555},"      \"",[542,582,584],{"class":583},"st6vK","name",[542,586,563],{"class":555},[542,588,531],{"class":548},[542,590,592],{"class":591},"sX5mu"," \"",[542,594,596],{"class":595},"sasMN","relic",[542,598,563],{"class":591},[542,600,601],{"class":548},",\n",[542,603,605,607,610,612,614,617,619,623,625,627,629,632,634,637,639,642,644,646,648,651,653],{"class":544,"line":604},5,[542,606,580],{"class":555},[542,608,609],{"class":583},"credentials",[542,611,563],{"class":555},[542,613,531],{"class":548},[542,615,616],{"class":548}," [{",[542,618,592],{"class":555},[542,620,622],{"class":621},"syaID","accessKey",[542,624,563],{"class":555},[542,626,531],{"class":548},[542,628,592],{"class":591},[542,630,631],{"class":595},"\u003Caccess-key>",[542,633,563],{"class":591},[542,635,636],{"class":548},",",[542,638,592],{"class":555},[542,640,641],{"class":621},"secretKey",[542,643,563],{"class":555},[542,645,531],{"class":548},[542,647,592],{"class":591},[542,649,650],{"class":595},"\u003Csecret-key>",[542,652,563],{"class":591},[542,654,655],{"class":548}," }],\n",[542,657,659,661,664,666,668,671,673,676,678,680,682,685,687,689,691,694,696,698,700,703,705],{"class":544,"line":658},6,[542,660,580],{"class":555},[542,662,663],{"class":583},"actions",[542,665,563],{"class":555},[542,667,531],{"class":548},[542,669,670],{"class":548}," [",[542,672,563],{"class":591},[542,674,675],{"class":595},"Read",[542,677,563],{"class":591},[542,679,636],{"class":548},[542,681,592],{"class":591},[542,683,684],{"class":595},"Write",[542,686,563],{"class":591},[542,688,636],{"class":548},[542,690,592],{"class":591},[542,692,693],{"class":595},"List",[542,695,563],{"class":591},[542,697,636],{"class":548},[542,699,592],{"class":591},[542,701,702],{"class":595},"Tagging",[542,704,563],{"class":591},[542,706,707],{"class":548},"]\n",[542,709,711],{"class":544,"line":710},7,[542,712,713],{"class":548},"    }\n",[542,715,717],{"class":544,"line":716},8,[542,718,719],{"class":548},"  ]\n",[542,721,723],{"class":544,"line":722},9,[542,724,725],{"class":548},"}\n",[416,727,728,729,732],{},"Relic creates no buckets, so its identity needs no ",[420,730,731],{},"Admin",". Once identities are\nconfigured, the gateway refuses anonymous requests.",[416,734,735,741,742,745,746,748],{},[516,736,737,738,740],{},"2. Buckets and the ",[420,739,441],{}," TTL."," This ",[420,743,744],{},"weed shell"," session creates both\nbuckets and gives ",[420,747,441],{}," a one-day TTL:",[533,750,754],{"className":751,"code":752,"language":753,"meta":538,"style":538},"language-bash shiki shiki-themes material-theme-lighter github-light-default github-dark-default","weed shell -master=\u003Cmaster>:9333 -filer=\u003Cfiler>:8888 \u003C\u003C'EOF'\ns3.bucket.create -name artifacts\ns3.bucket.create -name temporary\nfs.configure -locationPrefix=\u002Fbuckets\u002Ftemporary\u002F -ttl=1d -apply\nEOF\n","bash",[420,755,756,799,804,809,814],{"__ignoreMap":538},[542,757,758,762,765,769,773,775,778,781,784,786,788,790,793,796],{"class":544,"line":545},[542,759,761],{"class":760},"seIyd","weed",[542,763,764],{"class":595}," shell",[542,766,768],{"class":767},"smky3"," -master=",[542,770,772],{"class":771},"s8eFF","\u003C",[542,774,481],{"class":767},[542,776,777],{"class":771},">",[542,779,780],{"class":767},":9333",[542,782,783],{"class":767}," -filer=",[542,785,772],{"class":771},[542,787,497],{"class":767},[542,789,777],{"class":771},[542,791,792],{"class":767},":8888",[542,794,795],{"class":771}," \u003C\u003C",[542,797,798],{"class":548},"'EOF'\n",[542,800,801],{"class":544,"line":552},[542,802,803],{"class":595},"s3.bucket.create -name artifacts\n",[542,805,806],{"class":544,"line":571},[542,807,808],{"class":595},"s3.bucket.create -name temporary\n",[542,810,811],{"class":544,"line":577},[542,812,813],{"class":595},"fs.configure -locationPrefix=\u002Fbuckets\u002Ftemporary\u002F -ttl=1d -apply\n",[542,815,816],{"class":544,"line":604},[542,817,818],{"class":548},"EOF\n",[416,820,821,822,825,826,527,829,832,833,836,837,840],{},"To replicate ",[420,823,824],{},"artifacts",", run ",[420,827,828],{},"fs.configure",[420,830,831],{},"\u002Fbuckets\u002Fartifacts\u002F"," with\n",[420,834,835],{},"-replication=010"," (or another placement), or start the master with\n",[420,838,839],{},"-defaultReplication",".",[416,842,843],{},[516,844,845],{},"3. Connection:",[533,847,851],{"className":848,"code":849,"language":850,"meta":538,"style":538},"language-ini shiki shiki-themes material-theme-lighter github-light-default github-dark-default","RELIC_OBJECT_STORAGE_ENDPOINT=http:\u002F\u002Fseaweedfs-s3.storage:8333\nRELIC_OBJECT_STORAGE_ACCESS_KEY=\u003Caccess-key>\nRELIC_OBJECT_STORAGE_SECRET_KEY=\u003Csecret-key>\n","ini",[420,852,853,866,876],{"__ignoreMap":538},[542,854,855,859,862],{"class":544,"line":545},[542,856,858],{"class":857},"s03VG","RELIC_OBJECT_STORAGE_ENDPOINT",[542,860,861],{"class":548},"=",[542,863,865],{"class":864},"saDVj","http:\u002F\u002Fseaweedfs-s3.storage:8333\n",[542,867,868,871,873],{"class":544,"line":552},[542,869,870],{"class":857},"RELIC_OBJECT_STORAGE_ACCESS_KEY",[542,872,861],{"class":548},[542,874,875],{"class":864},"\u003Caccess-key>\n",[542,877,878,881,883],{"class":544,"line":571},[542,879,880],{"class":857},"RELIC_OBJECT_STORAGE_SECRET_KEY",[542,882,861],{"class":548},[542,884,885],{"class":864},"\u003Csecret-key>\n",[416,887,888],{},"The default region and bucket names work.",[416,890,891],{},"Helm:",[533,893,897],{"className":894,"code":895,"language":896,"meta":538,"style":538},"language-yaml shiki shiki-themes material-theme-lighter github-light-default github-dark-default","seaweedfs:\n  enabled: false\nexistingCredentialsSecret: relic          # holds the S3 key pair, adminPassword and encryptionKey\nobjectStorage:\n  endpoint: http:\u002F\u002Fseaweedfs-s3.storage:8333\n","yaml",[420,898,899,908,919,933,940],{"__ignoreMap":538},[542,900,901,905],{"class":544,"line":545},[542,902,904],{"class":903},"smKOL","seaweedfs",[542,906,907],{"class":548},":\n",[542,909,910,913,915],{"class":544,"line":552},[542,911,912],{"class":903},"  enabled",[542,914,531],{"class":548},[542,916,918],{"class":917},"sH4kE"," false\n",[542,920,921,924,926,929],{"class":544,"line":571},[542,922,923],{"class":903},"existingCredentialsSecret",[542,925,531],{"class":548},[542,927,928],{"class":595}," relic",[542,930,932],{"class":931},"siFmp","          # holds the S3 key pair, adminPassword and encryptionKey\n",[542,934,935,938],{"class":544,"line":577},[542,936,937],{"class":903},"objectStorage",[542,939,907],{"class":548},[542,941,942,945,947],{"class":544,"line":604},[542,943,944],{"class":903},"  endpoint",[542,946,531],{"class":548},[542,948,949],{"class":595}," http:\u002F\u002Fseaweedfs-s3.storage:8333\n",[425,951,953],{"id":952},"the-helm-charts-bundled-seaweedfs","The Helm chart's bundled SeaweedFS",[416,955,956,959,960,962],{},[420,957,958],{},"seaweedfs.enabled=true"," installs SeaweedFS from its official chart\n(",[420,961,904],{}," 4.48.0), one replica of each component:",[458,964,965,974],{},[461,966,967],{},[464,968,969,971],{},[467,970,469],{},[467,972,973],{},"Kubernetes object",[474,975,976,986,996,1006],{},[464,977,978,980],{},[479,979,481],{},[479,981,982,983],{},"StatefulSet ",[420,984,985],{},"\u003Crelease>-seaweedfs-master",[464,987,988,991],{},[479,989,990],{},"volume server",[479,992,982,993],{},[420,994,995],{},"\u003Crelease>-seaweedfs-volume",[464,997,998,1000],{},[479,999,497],{},[479,1001,982,1002,1005],{},[420,1003,1004],{},"\u003Crelease>-seaweedfs-filer",", with a leveldb2 metadata store",[464,1007,1008,1010],{},[479,1009,505],{},[479,1011,1012,1013,1016],{},"Deployment ",[420,1014,1015],{},"\u003Crelease>-seaweedfs-s3",", on port 8333",[416,1018,1019,1020,1023],{},"Relic's ",[420,1021,1022],{},"values.yaml"," sets:",[430,1025,1026,1045,1063],{},[433,1027,1028,1029,1032,1033,1036,1037,1040,1041,1044],{},"PersistentVolumeClaims of the default StorageClass: 1 GiB\n(",[420,1030,1031],{},"seaweedfs.master.data.size","), 50 GiB (",[420,1034,1035],{},"seaweedfs.volume.dataDirs[0].size",")\nand 10 GiB (",[420,1038,1039],{},"seaweedfs.filer.data.size","). Set ",[420,1042,1043],{},"storageClass"," next to each\nsize to change the class.",[433,1046,1047,1050,1051,1054,1055,1058,1059,1062],{},[420,1048,1049],{},"seaweedfs.s3.enableAuth",". The SeaweedFS chart generates the key pair in the\n",[420,1052,1053],{},"\u003Crelease>-seaweedfs-s3-secret"," Secret, and Relic reads\n",[420,1056,1057],{},"admin_access_key_id"," and ",[420,1060,1061],{},"admin_secret_access_key"," from it.",[433,1064,1065,1068,1069,1058,1072,840],{},[420,1066,1067],{},"seaweedfs.s3.createBuckets",". A Job creates the missing buckets after every\ninstall and upgrade. Keep the list in step with\n",[420,1070,1071],{},"objectStorage.artifactsBucket",[420,1073,1074],{},"objectStorage.temporaryBucket",[416,1076,1077,1078,1081,1082,1084],{},"Nothing is replicated (",[420,1079,1080],{},"000","). ",[420,1083,441],{}," has no TTL, so incomplete multipart\nuploads stay. These values give it a one-day TTL:",[533,1086,1088],{"className":894,"code":1087,"language":896,"meta":538,"style":538},"seaweedfs:\n  s3:\n    createBuckets:\n      - name: artifacts\n      - name: temporary\n        ttl: 1d\n",[420,1089,1090,1096,1103,1110,1123,1134],{"__ignoreMap":538},[542,1091,1092,1094],{"class":544,"line":545},[542,1093,904],{"class":903},[542,1095,907],{"class":548},[542,1097,1098,1101],{"class":544,"line":552},[542,1099,1100],{"class":903},"  s3",[542,1102,907],{"class":548},[542,1104,1105,1108],{"class":544,"line":571},[542,1106,1107],{"class":903},"    createBuckets",[542,1109,907],{"class":548},[542,1111,1112,1115,1118,1120],{"class":544,"line":577},[542,1113,1114],{"class":548},"      -",[542,1116,1117],{"class":903}," name",[542,1119,531],{"class":548},[542,1121,1122],{"class":595}," artifacts\n",[542,1124,1125,1127,1129,1131],{"class":544,"line":604},[542,1126,1114],{"class":548},[542,1128,1117],{"class":903},[542,1130,531],{"class":548},[542,1132,1133],{"class":595}," temporary\n",[542,1135,1136,1139,1141],{"class":544,"line":658},[542,1137,1138],{"class":903},"        ttl",[542,1140,531],{"class":548},[542,1142,1143],{"class":595}," 1d\n",[416,1145,1146,1147,1150],{},"For production, run a replicated SeaweedFS, through the SeaweedFS chart's\nvalues or the SeaweedFS operator. For one outside the release, point\n",[420,1148,1149],{},"objectStorage.endpoint"," at its S3 gateway.",[425,1152,1154],{"id":1153},"gotchas","Gotchas",[430,1156,1157,1168,1193],{},[433,1158,1159,1162,1163,423],{},[516,1160,1161],{},"TLS."," The S3 gateway speaks plain HTTP unless configured. Keep it on a\nprivate network, or give it a certificate from a public CA\n(",[1164,1165,1167],"a",{"href":1166},"\u002Fdocs\u002Finstallation\u002Fstorage\u002Foverview#what-relic-does-not-support","no private CA setting",[433,1169,1170,1173,1174,1177,1178,1081,1181,1184,1185,1188,1189,1192],{},[516,1171,1172],{},"Volume size."," ",[420,1175,1176],{},"-volumeSizeLimitMB"," caps each volume; the bundled store\nkeeps the default, 1000 (",[420,1179,1180],{},"seaweedfs.master.volumeSizeLimitMB",[420,1182,1183],{},"-max=0","\n(",[420,1186,1187],{},"maxVolumes: 0"," in ",[420,1190,1191],{},"seaweedfs.volume.dataDirs",", the default) sizes the\nvolume count from free disk space.",[433,1194,1195,1198,1199,1201,1202,840],{},[516,1196,1197],{},"Filer metadata is state."," Back it up with the volumes, or copy the\n",[420,1200,824],{}," bucket elsewhere with an S3 sync tool. See ",[1164,1203,1205],{"href":1204},"\u002Fdocs\u002Fguides\u002Foperations#backup","Backup",[1207,1208,1209],"style",{},"html pre.shiki code .sWneD, html code.shiki .sWneD{--shiki-light:#39ADB5;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .sK3rv, html code.shiki .sK3rv{--shiki-light:#39ADB5;--shiki-default:#116329;--shiki-dark:#7EE787}html pre.shiki code .s10kg, html code.shiki .s10kg{--shiki-light:#9C3EDA;--shiki-default:#116329;--shiki-dark:#7EE787}html pre.shiki code .st6vK, html code.shiki .st6vK{--shiki-light:#E2931D;--shiki-default:#116329;--shiki-dark:#7EE787}html pre.shiki code .sX5mu, html code.shiki .sX5mu{--shiki-light:#39ADB5;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .sasMN, html code.shiki .sasMN{--shiki-light:#91B859;--shiki-default:#0A3069;--shiki-dark:#A5D6FF}html pre.shiki code .syaID, html code.shiki .syaID{--shiki-light:#F76D47;--shiki-default:#116329;--shiki-dark:#7EE787}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 .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 .s8eFF, html code.shiki .s8eFF{--shiki-light:#39ADB5;--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .s03VG, html code.shiki .s03VG{--shiki-light:#E53935;--shiki-default:#CF222E;--shiki-dark:#FF7B72}html pre.shiki code .saDVj, html code.shiki .saDVj{--shiki-light:#90A4AE;--shiki-default:#1F2328;--shiki-dark:#E6EDF3}html pre.shiki code .smKOL, html code.shiki .smKOL{--shiki-light:#E53935;--shiki-default:#116329;--shiki-dark:#7EE787}html pre.shiki code .sH4kE, html code.shiki .sH4kE{--shiki-light:#FF5370;--shiki-default:#0550AE;--shiki-dark:#79C0FF}html pre.shiki code .siFmp, html code.shiki .siFmp{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6E7781;--shiki-default-font-style:inherit;--shiki-dark:#8B949E;--shiki-dark-font-style:inherit}",{"title":538,"searchDepth":552,"depth":552,"links":1211},[1212,1213,1214,1215,1216],{"id":427,"depth":552,"text":428},{"id":455,"depth":552,"text":456},{"id":511,"depth":552,"text":512},{"id":952,"depth":552,"text":953},{"id":1153,"depth":552,"text":1154},"The recommended self-hosted store, how to set it up, and the connection settings.","md",null,{},true,{"title":131,"description":1217},"KbHLMDqzS2Xkx6r3MIdmSISianxEoybKIWGgQ8-8yVI",[1225,1227],{"title":127,"path":128,"stem":129,"description":1226,"children":-1},"Azure Blob Storage as object storage, with workload identity, a managed identity or a connection string.",{"title":135,"path":136,"stem":137,"description":1228,"children":-1},"Buckets, lifecycle rules, the IAM policy, credentials, encryption and settings for Amazon S3.",1793857349379]