受国内的网络环境限制,直接使用python官方的pypi源速度不稳定还经常抽风。对公司来说,搭建一个自己的pypi镜像非常有必要。
搭建pypi镜像的目的以及相关方案
方案 | 优点 | 缺点 |
---|---|---|
PyPiImplementations | 功能强大,提供用户注册、包管理等各项功能。 | 配置复杂,需对pypi源进行全量同步。全量同步速度慢,且经常失败。 |
PyPiImplementations Simple repository with fallback using Apache | 配置相对简单。可通过ftp等方式实现私有包的管理。增加反向代理缓存后可实现官方pypi源的加速。 | 部分python包只是在pypi上放了一个链接,真正的包放在自己的服务器上(极少数包),对这类包无法通过反向代理进行加速。 权限管理功能稍弱。 私有包需要通过ftp等方式进行管理。 注:私有包管理的问题可通过安装web版的文件管理工具来规避。 |
考虑到部门内部pypi镜像的需求简单,不需涉及太多权限功能方面的工作,建议使用“Simple repository with fallback using Apache”方案。
反向代理方案
“Simple repository with fallback using Apache”中只是将本地无法处理的pypi请求直接转发到官方pypi源。在对官方源进行同步时无法实现对官方pypi源进行加速。为解决该问题,需要对官网的请求进行反向代理并缓存。
关于反向代理的支持请参考:代理、反向代理知识普及squid apache-mod_proxy lighttpd nginx
squid是老牌的反向代理服务器,但在实际使用过程中发现squid太过强大的功能导致配置复杂,不推荐使用。
nginx发展迅速的新兴服务器,对反向代理提供良好的支持,并被多家大型网站使用。最重要的是nginx的配置比squid要容易太多。
nginx配置要点
- 参考:
- 使用nginx的proxy_cache缓存功能取代squid
- nginx ChsHttpProxyModule nginx的文档化做的不是太好,在配置中有些要点需要注意。
- 安装
- 官方安装文档 ubuntu官方源版本比较老,建议添加ppa源再安装。
- 按照说明添加ppa源不可用时,可查看 /etc/apt/sources.list.d 中的nginx ppa源配置并修正
- nginx配置
- nginx默认启用了gzip支持。pip无法识别gzip后的网页,需要关闭gzip支持。
proxy_cache_path /var/lib/nginx/cache/ levels=1:1:2 inactive=24000h keys_zone=cache:100m;
server {
listen 8000 default;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
#中间省略部分默认配置
location /pypi {
proxy_pass http://pypi.python.org/simple;
proxy_cache cache;
proxy_cache_valid any 2400h;
}
location /packages {
proxy_pass http://pypi.python.org/packages;
proxy_cache cache;
proxy_cache_valid any 24000h;
}
}