seaweedfs 3.94
Master + Volume 是完整的存储核心;Filer 是文件系统元数据扩展层;SeaweedFS-S3 是建立在 Filer 之上的 S3 协议适配层。
Master(元数据)
Volume(文件存储)
Filer(S3/文件系统接口)
sh
mkdir master volume fileryml
services:
seaweedfs-master:
image: chrislusf/seaweedfs:3.94
container_name: seaweedfs-master
restart: unless-stopped
command: >
master
-ip=seaweedfs-master
-mdir=/data
-defaultReplication=000
expose:
- "9333"
volumes:
- ./master:/data
networks:
- seaweedfs-net
seaweedfs-volume:
image: chrislusf/seaweedfs:3.94
container_name: seaweedfs-volume
restart: unless-stopped
depends_on:
- seaweedfs-master
command: >
volume
-mserver=seaweedfs-master:9333
-ip=seaweedfs-volume
-dir=/data
-max=0
expose:
- "8080"
- "18080"
volumes:
- ./volume:/data
networks:
- seaweedfs-net
seaweedfs-filer:
image: chrislusf/seaweedfs:3.94
container_name: seaweedfs-filer
restart: unless-stopped
depends_on:
- seaweedfs-master
- seaweedfs-volume
command: >
filer
-master=seaweedfs-master:9333
-ip=seaweedfs-filer
-port=8888
expose:
- "8888"
volumes:
- ./filer:/data
networks:
- seaweedfs-net
seaweedfs-s3:
image: chrislusf/seaweedfs:3.94
container_name: seaweedfs-s3
restart: unless-stopped
depends_on:
- seaweedfs-filer
command: >
s3
-filer=seaweedfs-filer:8888
-port=8333
-ip.bind=0.0.0.0
ports:
- "8333:8333"
networks:
- seaweedfs-net
networks:
seaweedfs-net:
external: true
name: seaweedfs-net创建账号
sh
docker exec -it seaweedfs-s3 sh
# 生成配置
weed shell -master=seaweedfs-master:9333 -filer=seaweedfs-filer:8888
# 创建账号
s3.configure -user=app -actions=Read,Write,List,Tagging,Admin -apply -access_key=app_access_key -secret_key=app_secret_key_123456然后会得到
access_key = xxxxxxxxx
secret_key = xxxxxxxxx安装 MinIO Client
sh
curl -L https://dl.min.io/client/mc/release/linux-amd64/mc -o mcsh
chmod +x mc
sudo mv mc /usr/local/bin/或
sh
docker run --rm -it --network seaweedfs-net minio/mc sh
mc alias set seaweed http://seaweedfs-s3:8333 app_access_key app_secret_key_123456
mc ls seaweed
mc mb seaweed/wanx
mc ls seaweed关于线上 key
js
import crypto from "node:crypto"
import { customAlphabet } from "nanoid"
// AWS Access Key 使用的字符集(不包含容易混淆的字符)
const nanoid = customAlphabet(
"ABCDEFGHJKLMNPQRSTUVWXYZ23456789",
16,
)
/**
* 生成 S3 凭证
*/
export function generateS3Credential() {
const accessKeyId = `AKIA${nanoid()}`
const secretAccessKey = crypto
.randomBytes(32)
.toString("base64url")
return {
accessKeyId,
secretAccessKey,
}
}
// 示例
const credential = generateS3Credential()
console.log("Access Key ID: ", credential.accessKeyId)
console.log("Secret Access Key:", credential.secretAccessKey)或
js
import crypto from "node:crypto"
const ACCESS_KEY_CHARS =
"ABCDEFGHJKLMNPQRSTUVWXYZ23456789"
function randomString(length: number): string {
const bytes = crypto.randomBytes(length)
let result = ""
for (let i = 0; i < length; i++) {
result += ACCESS_KEY_CHARS[
bytes[i] % ACCESS_KEY_CHARS.length
]
}
return result
}
export function generateS3Credential() {
return {
accessKeyId: `AKIA${randomString(16)}`,
secretAccessKey: crypto
.randomBytes(32)
.toString("base64url"),
}
}