cloud-git 扩展s3 存储支持说明
从原理上来说,实现还是比较简单的,主要是关于接口实现的问题,cloud-git 官方已经提供了相关的说明
核心接口说明
开发的扩展继承自GitRepository
- 接口实现说明
class GitRepository {
// Must be overriden
async getRefs(req) {}
async receivePack(req, commands, objects) {}
async getObject(req, hash) {}
// May be overriden
async getHeadRef(req) {}
async authorize(req, res, next) {}
async getReceivePackSuccessMessage(req, commands, objects) {}
async getUploadPackSuccessMessage(req, objects) {}
}
参考格式
async getRefs(req)
[
{ "ref": "{refName}", "sha": "{sha}" },
]
async receivePack(req, commands, objects)
注意destId 空值的问题,官方提供了帮助函数
[
{ "srcId": "{sha}", "destId": "{sha}", "ref": "{refName}" },
]
async getObject(req, sha)
{ "sha": "{sha}", "objectType": "blob|tree|commit|tag", "data": <Buffer> }
集成s3 说明
我们可以直接基于pixl-server-storage s3 存储扩展解决,具体代码可以参考github
核心使用到的就是pixl-server-storage 的hash 操作,以及callback 转promise,没多大的技术难度
- 参考使用
const Express = require("express");
const {S3GitRepository} = require("@dalongrong/cloud-git-s3");
const StandaloneStorage = require('pixl-server-storage/standalone');
const configS3 = {
"engine": "S3",
"AWS": {
"accessKeyId": "minio",
"secretAccessKey": "minio123",
"region": "us-west-1",
"sslEnabled": false,
"s3ForcePathStyle": true,
"endpoint": "localhost:9000",
"correctClockSkew": true,
"maxRetries": 5,
"httpOptions": {
"connectTimeout": 5000,
"timeout": 5000
}
},
"S3": {
"keyPrefix": "",
"fileExtensions": true,
"params": {
"Bucket": "s3app"
},
"cache": {
"enabled": true,
"maxItems": 1000,
"maxBytes": 10485760
}
}
};
const storage = new StandaloneStorage(configS3, function (err) {
if (err) {
console.log("not ok")
}
});
const app = Express();
app.use("/", new S3GitRepository(storage).createExpress(Express));
require("http").createServer(app).listen(3000);
参考资料
https://github.com/fusebit/cloud-git
https://github.com/jhuckaby/pixl-server-storage
https://github.com/rongfengliang/cloud-git-s3
https://www.npmjs.com/package/@dalongrong/cloud-git-s3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2020-10-09 airline开发类似git cli 的jar 包
2020-10-09 开发自己的jdbc驱动——基本说明
2019-10-09 rushjs来自微软的单体仓库管理工具
2018-10-09 12 Factor CLI Apps
2018-10-09 oclif cli app开发简单试用
2017-10-09 openfaas k8s 集成
2014-10-09 转 HTTP.SYS 详解