如何让 Git 使用 HTTP 代理服务器

因为我们的内部网络使用了代理,所以在 安装 OpenStack 基于 Web 的管理控制台 的时候有个小麻烦,我们的 http 代理服务器无法通过 git 协议下载 openstack-dashboard 所需的代码,也就是说可以 git clone https:// 这样克隆代码,但是不能使用 git 协议 git clone git://。糟糕的是在 openstack-dashboard/tools/pip-requires 里恰好用到了 git 协议,所以运行 openstack-dashboard 安装脚本的时候会因为网络无法连接 git:// 而中途失败。如何让 git 使用 http 代理服务器呢?

如果是 git clone http:// 或 git clone https:// 的话直接把代理服务器加到环境变量就可以了:

$ export http_proxy="http://username:password@squid.vpsee.com:3128/"
$ export https_proxy="http://username:password@squid.vpsee.com:3128/"

如果是 git clone git:// 的话麻烦一些(可能有的 git 源不提供 http/https 的方式),需要先安装 socat,然后创建一个叫做 gitproxy 的脚本并填上合适的服务器地址、端口号等,最后配置 git 使用 gitproxy 脚本:

$ sudo apt-get install socat

$ sudo vi /usr/bin/gitproxy
#!/bin/bash

PROXY=squid.vpsee.com
PROXYPORT=3128
PROXYAUTH=username:password
exec socat STDIO PROXY:$PROXY:$1:$2,proxyport=$PROXYPORT,proxyauth=$PROXYAUTH

$ sudo  chmod +x /usr/bin/gitproxy

$ git config --global core.gitproxy gitproxy

配置 Squid 服务器的硬件要求

去年有台 Squid 主服务器的主板坏了,因为有备份服务器所以不碍事,这台备份服务器是一台很老的 Pentium III 级别的 PC,平时不怎么用,只有主服务器 down 掉的时候才临时应付一下。VPSee 现在要抓紧时间把那台 Squid 主服务器换掉(在备份服务器坏掉之前~~),不考虑买新机器了,去年升级留下了很多老机器,以及一些内存、硬盘等配件,相互搭配一下应该可以配出几台好机器。

Squid 服务器的性能对内存和硬盘的要求比较敏感,硬盘缓存多少数据和需要多大内存之间有某种关系,这是因为每个缓存过的 object 在内存里都保留相应的 metadata,方便 Squid 能迅速查询 cache,这些 metadata 是由 StoreEntry 数据结构来保存的,每个 StoreEntry 占用 56 Bytes,加上每个 StoreEntry 都有1个 16-byte 的 cache key,所以保存在 cache 里面的每个 object 在内存中都对应占用 72 Bytes(metadata),这是在32位机器上的情况,如果是64位机器会占用更多(104 Bytes)。算下来在硬盘上缓存 1,000,000 个 objects 的话相应需要占用 72MB 内存用来做 metadata,而实际情况则比这个要多得多。这篇 Wiki 也解释了为什么 Squid 需要大量内存。如何来决定到底需要多少内存呢?能不能有某个公式可以直接套用呢? Squid: The Definitive Guide 这本书给出了这样一个建议,每缓存 1GB 需要 32MB 内存,这样的话一台 1GB 内存的机器可以在硬盘上缓存 32GB 的数据(object)。

As rule of thumb, you need 32 MB of memory for each GB of disk space.

除了知道以上内存和硬盘的关系以外,我们还需要通过实际需求来决定什么样配置的机器能满足用户需求并且取得最佳性价比。那么如何判断需要用多大的硬盘来缓存用户的记录呢?根据去年一年使用 LightSquid 对用户的日志统计和分析,VPSee 发现绝大部分用户每天消耗都不到 100MB 带宽(平均起来才 50MB 每用户每工作日),这样如果算每人每天平均消耗 50MB,每个月算20个工作日,那么每人每月就是消耗 1GB,算下来100人每月应该消耗 100GB 带宽,也就是要缓存每个月的用户记录的话需要 100GB 硬盘空间,根据上面 1GB/32GB 的公式,一台 4GB 内存的服务器就可以完全满足要求。幸运的是,Squid 服务器对 CPU 要求不高,只需要在老机器上加点内存就可以了。

还需要注意的是,一定要再配一台 Squid 服务器作为备份服务器以应付突发事件,cache 的数据不是很重要,所以不必做 RAID,不必花钱在一些昂贵的存储设备上,但是要保证至少有一台备份 Squid 服务器 stand by,在主服务器不能工作的时候能随时替换。Squid: The Definitive Guide 的作者推荐使用 FreeBSD 作为 Squid 服务器的操作系统。