Ubuntu 18.04基于bandersnatch搭建python Pypi本地镜像-很细节

Python大火,越来越多人学习python,我们将实现python pypi镜像本地化的实现过程分享,自己实践过程遇到很多坑,走了不少弯路,下面整理我本地搭建的整个过程以及用到的知识点:

安装ubuntu 18.04

安装过程跳过,大家都会。

修改root密码

执行某些指令时,加sudo总是不方便,用root权限:

sudo passwd root

根据提示先输入当前账户密码,再输入root密码。

修改永久DNS

Ubuntu 18.04和此前版本的DNS修改不一样,方法如下:

vim /etc/systemd/resolved.conf

修改DNS为8.8.8.8和114.114.114.114,取消注释,内容如下:

[Resolve]
DNS=114.114.114.114
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

修改完后,需要重启服务:

systemctl restart systemd-resolved.service

##重启后,还需要验证

systemd-resolve --status

这里修改后reboot 时DNS才会实际生效。除了DNS,我的服务器是有两张网卡,所以还有路由也要配置为永久路由。

Ubuntu自带python升级3.8

Ubuntu自带的python是3.6版本,我们先将python升级到3.8版本。不为什么,就是升级新版本。(其实是有坑)

先看看现在的python版本:

python3 -V

安装python3.8,可以通过APT的方式安装,先安装相关依赖包:

apt-get update
apt-get install software-properties-common

添加PPA源:

add-apt-repository ppa:deadsnakes/ppa

apt安装python3.8

apt install python3.8

需要将python3默认改为python3.8,先找到刚才安装的python3.8的安装路径:

which python3.8
/usr/bin/python3.8

通过update-alternatives来处理python3.6->python3.8的切换:

update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
update-alternatives --config python3
There are 2 choices for the alternative python3 (providing /usr/bin/python3).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/python3.6   2         auto mode
  1            /usr/bin/python3.6   2         manual mode
* 2            /usr/bin/python3.8   1         manual mode

Press  to keep the current choice[*], or type selection number: 2

最后验证python3的版本,确认切换是否成功:

python -V

PIP3安装:

apt-get install python3-pip

前面我们就完成python3和pip3的安装了。因为同步pypi源需要较大的存储空间,20211123约需要12T的空间,所以,我们要远程挂载一个NFS目录。

NFS安装和配置

先安装NFS客户端配置:

apt-get install nfs-common

我实际是用一台windows server做的NFS,我们在将远端的NFS目录挂载到本地:

mount 192.168.1.1:/python /mnt

网上查了一下,mount后,再配置一个开机自动挂载,并配置读取权限:

vim /etc/fstab
192.168.1.1:/python /mnt  nfs rw 0 0

PS:NFS server端也有配置,仅允许指定客户端可以挂载改目录,这个也是为了安全考虑。

这里还需要注意,我们需要给mount进来的目录提供权限:

chmod -R 777 /mnt

因为是测试环境,非生产环境,所以权限给777。

接下来我们要进行最重要环节,实现pypi源同步,方式有多种,我尝试了两种,最后还是选择了官网推荐的bandersnatch,简单方便一些。pip的方式也是很好,就是要写脚本。

安装bandersnatch

bandersnatch是一个用于同步pypi源的工具,它可以同步官网,实际上也可以下载国内源。

pip3 install bandersnatch

安装完成后,要等一会儿,可以用如下指令找到安装的路径:

find / -name master.py

生成配置文件:

bandersnatch mirror

修改配置文件:

vi /etc/bandersnatch.conf

config文件有几项内容需要调整:

directory = /srv/pypi  默认路径要修改为NFS路径:/mnt/pypi

下载所有package到本地:

bandersnatch mirror

Bandersnatch 同步和Filter

mirror配置里面有一个小细节,学习网上查到的资料,实测可用:

mirror master从官网同步,等到产生todo文件后,按Ctrl+C结束。

master = https://pypi.python.org

再修改download URL为国内镜像源,国内源有很多,我选择了阿里的:

download-mirror = https://mirrors.aliyun.com/pypi/
download-mirror-no-fallback = False

bandersnatch mirror除mirror配置外,还支持filter配置

我的配置内容参考如下,也是反复测试,查官网资料后摸索实现出来的。

[plugins]
enabled =
   size_project_metadata
   latest_release
   exclude_platform
   blocklist_project
   blocklist_release
[blocklist]
platforms =
   macos
   freebsd
   linux
;这里特指只同步windows,不下载macos、freebsd、linux文件。
[latest_release]
keep = 3
;这里特指要最新更新的三个版本,更久的历史版本不下载。
[size_project_metadata]
max_package_size = 100M
;这里特指大于100M的包也不下载。根据自己的存储空间和实际需求调整。
以上实测有效可用。

mirror过程要很长时间,有耐心,慢慢等。一直到结束。根据环境不同,可能几天吧。

 管理bandersnatch

更新package方法同下载:

bandersnatch mirror

强制bandersnatch检查更新:

bandersnatch mirror --force-check

现在会有一些不怀好意的人,上传一些有威胁的package到镜像站,删除特定镜像包的方式:

bandersnatch delete --help

设定bandersantch自动同步:

/etc/cron.d/bandersnatch
    LC_ALL=en_US.utf8
    */2 * * * * root bandersnatch mirror |& logger -t bandersnatch[mirror]

安装Nginx

apt-get install nginx

更改nginx.conf的配置:

vi /etc/nginx/sites-enabled/default

同样,因为有mount NFS,所以,路径要修改:

root /mnt/pypi/web

验证web发布是否成功:

http://pipserverip

以上就是泣血过程,过程很简单,实现很泣血。踩过很多坑,但是收获非常大。意义在于无聊的事,总有体现价值的地方。致学习技术路上的同学们。

你可能感兴趣的:(运维技术,python,ubuntu,pip,nfs,linux,运维)