Loading...
Loading...
Use when deploying object storage (S3-compatible) to Zeabur. Use when user needs MinIO, RustFS, or S3-compatible storage. Use when user says "object storage", "file storage", "S3", "MinIO", "RustFS", "upload files", "store files", "blob storage", or "OSS". Also use when integrating object storage with an existing service.
npx skill4agent add zeabur/agent-skills zeabur-object-storageAlways useto invoke Zeabur CLI. Never usenpx zeabur@latestdirectly or any other installation method. Ifzeaburis not available, install Node.js first.npx
Before deploying, you MUST load theskill first to understand what Zeabur templates are, how they work, and how to deploy them. This skill only covers object storage-specific integration — all template knowledge lives inzeabur-template.zeabur-template
npx zeabur@latest template search minio -i=false --jsonservice networknpx zeabur@latest service network --id <storage-service-id> -i=falsehostname:portminio.zeabur.internal:9000MinIO and RustFS ports are HTTP type, so public access is via domain binding, not port forwarding. Bind a domain to the API port via the Dashboard to get an external S3 endpoint (e.g.,).https://minio-api.zeabur.app
variable listnpx zeabur@latest variable list --id <storage-service-id> -i=falsevariable list| Variable | Description |
|---|---|
| Access Key ID (default: |
| Secret Access Key (auto-generated) |
| Default bucket name (default: |
| Web console URL |
S3_ENDPOINT=http://minio.zeabur.internal:9000
S3_ACCESS_KEY=${MINIO_USERNAME}
S3_SECRET_KEY=${MINIO_PASSWORD}
S3_BUCKET=zeabur
S3_REGION=us-east-1
S3_FORCE_PATH_STYLE=trueThe S3 endpoint is not exposed as a variable — you must hardcode it using the internal hostname from.service network
# MinIO Client (mc)
mc alias set zeabur https://MINIO_API_DOMAIN MINIO_USERNAME MINIO_PASSWORD
mc ls zeabur/
mc cp local-file.txt zeabur/zeabur/
# AWS CLI
aws --endpoint-url https://MINIO_API_DOMAIN s3 lsMINIO_CONSOLE_URLMINIO_USERNAMEMINIO_PASSWORDzeaburvariable list| Variable | Description |
|---|---|
| Access Key ID (default: |
| Secret Access Key (auto-generated) |
S3_ENDPOINT=http://rustfs.zeabur.internal:9000
S3_ACCESS_KEY=${RUSTFS_USERNAME}
S3_SECRET_KEY=${RUSTFS_PASSWORD}
S3_BUCKET=my-bucket
S3_REGION=us-east-1
S3_FORCE_PATH_STYLE=trueThe S3 endpoint is not exposed as a variable — you must hardcode it using the internal hostname from. Also checkservice networkfor the exact service name (may beservice listnotRustFS).rustfs
You must create a bucket first — unlike MinIO, RustFS starts with zero buckets.
mc alias set zeabur https://RUSTFS_API_DOMAIN RUSTFS_USERNAME RUSTFS_PASSWORD
mc mb zeabur/my-bucket
mc ls zeabur/9001RUSTFS_USERNAMERUSTFS_PASSWORDforcePathStyle: true// Node.js (AWS SDK v3)
const { S3Client } = require("@aws-sdk/client-s3");
const s3 = new S3Client({
endpoint: process.env.S3_ENDPOINT,
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY,
secretAccessKey: process.env.S3_SECRET_KEY,
},
region: "us-east-1",
forcePathStyle: true,
});# Python (boto3)
import boto3, os
s3 = boto3.client(
"s3",
endpoint_url=os.environ["S3_ENDPOINT"],
aws_access_key_id=os.environ["S3_ACCESS_KEY"],
aws_secret_access_key=os.environ["S3_SECRET_KEY"],
region_name="us-east-1",
)// Go (aws-sdk-go-v2)
cfg, _ := config.LoadDefaultConfig(ctx,
config.WithRegion("us-east-1"),
config.WithCredentialsProvider(
credentials.NewStaticCredentialsProvider(accessKey, secretKey, ""),
),
)
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
o.BaseEndpoint = aws.String(endpoint)
o.UsePathStyle = true
})forcePathStylehttp://bucket.host:9000/keyzeaburmc mbservice network${MINIO_USERNAME}${}9000909090009001