跳转到主要内容

turnip

项目描述

turnip

turnip是一个灵活且可扩展的Git服务器套件,使用Python和Twisted编写。

各种服务器提供可定制的虚拟主机,具有灵活的认证和授权,以及从前端到存储层的单个水平扩展。

这里的所有 Python 接口均不应被视为稳定。

架构

turnip 的架构旨在最大化简单性、可扩展性和鲁棒性。每个服务器提供大约一个服务,安装时只需运行所需的服务器。大多数服务器放弃本地状态以简化横向扩展,而那些有本地状态的服务器可以复制和/或分片它。

有两个独立的服务器堆栈:打包和 API。打包堆栈通过打包协议(git://)、智能 HTTP 或智能 SSH 与 Git 客户端通信。HTTP 和 SSH 前端解开隧道打包协议,并将其作为正常打包协议连接转发到中端。独立 HTTP API 堆栈提供对存储库高级读写操作的编程远程接口。

前端
  • 打包

  • 智能 HTTP

  • 智能 SSH

  • HTTP API

中端
  • 打包虚拟化

  • API 虚拟化

后端
  • 打包

  • API

内部协议

turnip 使用 Git 打包协议的扩展来处理其服务器之间的大部分通信。唯一的变化是 turnip 请求可以指定任意命名的参数,而不仅仅是主机名。

Git 打包协议的 git-proto-request 相关部分如下所示(以 ABNF 表示)

git-proto-request = request-command SP pathname NUL [ host-parameter NUL ]
host-parameter = "host=" hostname [ ":" port ]

turnip-proto-request 将其更改为以下内容

turnip-proto-request = request-command SP pathname NUL \*( param NUL )
param = param-name "=" param-value
param-name = \*( %x01-3C / %x3E-FF ) ; exclude NUL and =
param-value = \*%x01-FF ; exclude NUL

目前仅实现了两个附加参数,即“turnip-stateless-rpc”和“turnip-advertise-refs”,它们被智能 HTTP 服务器用于代理到标准打包协议。

开发

设置

创建一个可信容器(可选)

sudo lxc-create -t ubuntu -n turnip.trusty -- -r trusty -a amd64 -b $USER

运行以下命令

sudo add-apt-repository ppa:launchpad/ppa
sudo apt-get update
cat system-dependencies.txt | sudo xargs apt-get install -y --no-install-recommends

运行

可以使用以下命令启动打包智能 HTTP/SSH 服务

python turnipserver.py

可以使用以下命令启动 HTTP API

make run-api

部署

Turnip 可以通过 turnip juju 魅力进行部署,可从以下位置获取

git clone https://git.launchpad.net/~canonical-launchpad-branches/charms/+source/turnip

使用本地提供程序进行部署

juju switch local juju bootstrap juju deploy –repository=/path/to/loca/charm/repo/root local:trusty/turnip

turnip 的新闻

0.1.1 (2015-06-11)

  • 添加了合并检测 API。

0.1 (2015-06-02)

  • 初始发布。

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面