PyPI

推荐使用bandersnatch搭建,bandersnatch是基于PEP381的一个分支,更推荐前者。 bandersnatch的安装配置看官方文档就可以搞定了,这里大概说下基本步骤:

  1. 通过pip和easy_install安装bandersnatch,或者下载源码。
  2. 你需要一个nginx,lighttpd,或apache之类的webserver,推荐前二者选其一。配置好webserver。
  3. bandersnatch.conf位于/etc/下(安装后先执行 bandersnatch mirror 生成默认配置文件),按需修改该配置文件,对应条目都有说明,简单翻译如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    [mirror]
    ; 同步内容存储的目录位置.
    directory = /home/mirror/pypi
    
    ; 将同步的上有PyPI服务器,第一次同步可以选择清华,中科大,中大,豆瓣等国内服务器.
    ; 后期的同步再修改为官方服务器。
    ;master = https://testpypi.python.org
    ;master = http://pypi.mirrors.ustc.edu.cn
    ;master = http://pypi.douban.com
    
    master = https://pypi.python.org
    
    ;超时设置
    ;The network socket timeout to use for all connections. This is set to a
    ; somewhat aggressively low value: rather fail quickly temporarily and re-run
    ; the client soon instead of having a process hang infinitely and have TCP not
    ; catching up for ages.
    timeout = 10
    
    ; 并行下载的线程数量.
    ; 建议的线程设置:
    ; - 保持默认设置3,以防止上游服务器过载
    ; - 数据中心的官方服务器可以设置为20
    ; - 50以上的设置可能不稳定,并会被bandersnatch禁止
    workers = 3
    
    ;快速同步中遇到错误是否停止同步,如果是,将导致同步失败。
    ;第一次同步时候建议设置为 false,后续可更改为true。
    ; 值: "true" or "false".
    stop-on-error = false
    
    ;本地服务器是否删除上游服务器已经删除的包。
    ; 重要: 如果你的服务器是作为一个官方镜像提供给用户,请打开该选项。
    delete-packages = true
    
    [statistics]
    ; A glob pattern matching all access log files that should be processed to
    ; generate daily access statistics that will be aggregated on the master PyPI.
    access-log-pattern = /var/log/nginx/*.pypi.python.org*access*
    ; vim: set ft=cfg:

4.设置cron任务,自动定时执行同步命令,将任务文件放在/etc/cron.d文件下时,注意命名规则。

1
2
3
LC_ALL=en_US.utf8
*/2 * * * * root bandersnatch mirror |& logger -t bandersnatch[mirror]
12 * * * * root bandersnatch update-stats |& logger -t bandersnatch[update-stats]

5.关于bandersnatch更多配置请参考官方文档,另外可以配置exim4和编写脚本分析日记文件进行监控和报警。

RubyGems

RubyGems的搭建,可参考Ruby-China上帖子,按照huacnlee的步骤搭建即可,补充几点:

  1. 据说RubyGems会根据中国用户的ip将请求自动转 到日本的镜像站,这个很不错,但是我自己试用了几次都卡住不会跳,囧。日本的服务器地址是:http://tokyo-m.rubygems.org ,我曾经也将这个作为镜像站的上游进行同步,但是日本这个服务器不稳定,所以选择只能是与淘宝镜像或者将镜像服务器上FQ(proxychains,vpn等工具)。
  2. 除了使用上面的同步工具搭建镜像站,也可配置反向代理并cache.
  3. 初始同步可设置上游为淘宝,清华,中大等等。
  4. 如果你是搭建一个公共的镜像站提供服务,不建议使用Geminabox 中WEBrick作为webserver,换用nginx或者lighttpd吧。
  5. 将同步命令放入/etc/cron.d时除了要注意文件命名方式还可能遇到“rake aborted!”,这表明没设置PATH,参考如下(请按你的PATH进行配置):

    1
    2
    3
    4
    
    #RUbygems
    PATH=...#查看PATH的命令:echo $PATH
    #解释:10分钟一次,配置flock锁,执行rubygems中的同步,日记格式输出,邮件报警命令等。
    */10 * * * * flock -xn /var/lock/mirror/rubygems.lock -c " bash /root/scripts/bin/rubygems "

6.注意需要配置同步锁。可用上例代码中的flock,也可以自己touch一个lock凑合用。