做过大型项目的同学一定都搞过自定义 yum 仓库,自定义 yum 在网上也有很多种方案,但今天我们来个不一样的玩法!
在开始之前先来抛出几个问题
如何快速的制作一个仓库?
如何快速的制作一个最精简仓库?
如何快速的制作一个包含 docker、pypi、yum 和 maven 等等的 All-in One 仓库?
如何在一个离线环境中快速的安装我们所需要的软件包?
Nexus 是什么?
简单来说 Nexus 是一个全能的仓储管理工具,它能帮我们解决有关软件包的一系列问题。下面我们来还原几个真实的场景,接下来我们就请上今天的主角, Nexus 闪亮全场!
情景一
公司接了一个超大型项目,需要在用户的离线环境中部署公司数十套产品。那么这个光荣而艰巨的任务就交到运维同学身上吧!
吃饭时间看见运维同学闷闷不乐,于是不解的过去问他,公司有大项目了,为啥还愁眉苦脸的呀?运维同学说,这十几套产品,要安装的软件一大堆,软件包依赖问题一大堆,这可如何是好呀。
我拍了拍运维同学的肩膀对他说,信杰哥,杰哥带你飞!
安装 Nexus 服务
在内网找一台可以访问公网的机器,安装 Nexus 服务
解压软件
tar xzf nexus-3.14.0-04-unix.tar.gz -C /data/sonatype-work/nexus3
echo 'NEXUS_HOME="/data/nexus-3.14.0-04"' >> ~/.bashrc
echo 'run_as_user="root"' >> /data/nexus-3.14.0-04/bin/nexus.rc
服务配置
shell> vim /etc/systemd/system/nexus.service
[Unit]
Description=nexus service
After=network.target
[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/data/nexus-3.14.0-04/bin/nexus start
ExecStop=/data/nexus-3.14.0-04/bin/nexus stop
User=root
Restart=on-abort
[Install]
WantedBy=multi-user.target
启动服务
systemctl reload-daemon
systemctl start nexus
登录
http://10.200.60.21:8081/
默认账号密码: admin/admin123
登录后记得修改 admin 密码
配置 yum proxy
创建 repository
选择 "yum(proxy)"
确定清华 Yum 仓库地址
填写 "name" 和 "Remote storage",注意 "Remote storage" 需要以 "/" 结尾
Repository 创建完成后
确定 Repository 的状态,"Online - Remote Available" 才是正确状态哦
编写客户端 Yum 配置文件,注意 "baseurl" 也需要以 "/" 结尾!
shell> vim tsinghua.repo
[tsinghua]
name=Tsinghua RHEL/CentOS $releasever - $basearch
baseurl=http://admin:[email protected]:8081/repository/tsinghua/$releasever/os/$basearch/
enabled=1
gpgcheck=0
执行安装
yum clean all; yum makecache
yum install http
安装完成后查看仓储中已经有了已安装过的 rpm 包
看到这里,不知道各位小伙伴有没有看明白,以上操作是我们使用 Nexus 仓库中 Yum proxy 的功能,创建了一个代理清华 Yum 源的 Repository,然后在内网的机器上,配置好指向 Nexus 中的 Repository,这时再安装软件,就会通过 Nexus 找到清华 Yum 源中的软件包进行安装。
只要运维同学使用了配置好的 Yum 源,所有安装过的软件都会记录在这里。到时测试完成后,批量把软件包进行下载,再通过 Nexus 创建私有仓储即可完美使用。
软件包有两种情况
如果软件包不存在,则 Nexus 会从 Proxy 端远程下载软件包
如果软件包存在,则直接返回给客户端使用
那可能有同学问了,如果清华 Yum 源的包不够用怎么办?我们还可以再添加 163、 epel 的源呀,所以只要能找到提供 Yum 的地址,都可以尽情的使用 Nexus yum proxy。并且以上配置不区别操作系统版本,如 CentOS 6 也可以使用,不信?我们来瞧瞧~
shell> cat /etc/*release*
CentOS release 6.9 (Final)
LSB_VERSION=base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
cat: /etc/lsb-release.d: Is a directory
CentOS release 6.9 (Final)
CentOS release 6.9 (Final)
cpe:/o:centos:linux:6:GA
yum clean all; yum makecache
yum install httpd -y
可以看到,出现了一个 "6" 的目录,分支下也生成了 http 相关的 rpm 包
大家想想看,这是为什么呢?
情景二
一个 DB 小 A 跑来找我,说杰哥,我要装个 MySQL 8.0,可是咱们内网 Yum 源里没安装包呀,公司下载又特别慢,你有没有办法呀?
我看了他一眼,告诉他,信杰哥,不翻车。大家说说我们有什么办法来帮助他呢?
找到 MySQL 官方 Yum 源
下载下来,定晴一看,怎么是个 rpm 包呀?不慌,rpm 本身就是个压缩包,我们用压缩工具打开看看
原来 repo 文件藏在里面呀,这里有两个 repo 文件
mysql-community-source.repo
mysql-community.repo
让我们来猜猜,带有 source 的,是有关源码的仓库,不带 source 的,是编译好打包的 rpm 包,我们直接打开 mysql-community.repo,赫然看到,原来 MySQL 官方 Yum 源都在这里呢,里面内容相信大家都不陌生吧。
看到这里,是不是大家又明白点什么了!没错,有了官方 Yum 源地址,我们就可以在 Nexus 上创建 Yum proxy
编写 repo 文件
shell> cat mysql8.repo
[mysql8]
name=Mysql for RHEL/CentOS $releasever - $basearch
baseurl=http://admin:[email protected]:8081/repository/MySQL8.0/$releasever/$basearch/
enabled=1
gpgcheck=0
执行安装
yum install yum install mysql-community-client-8.0.11 mysql-community-server-8.0.11
同样,此 Yum 源同时支持 CentOS 6 和 CentOS 7,把同样的 repo 文件放到 CentOS 6 机器上,执行安装。
情景三
这一天,又一个运维小哥跑来找我,说杰哥杰哥,我们这次有好多需求,要下载好多 docker 镜像,又要下载好多 pypi 镜像,还要安装各个版本的 MySQL,我们搞不定啦,快来支持我们一下啊~~~
我吐……这下杰哥帮不了你了,给你份文档自己看着办吧。哈哈
尾声
结合以上几个情景,相信大家对 Nexus 都有一个大致的了解,Nexus 的权限管理、LDAP,还有 https 都有相应的支持,我们甚至可以把它当做 FTP 服务器来用,我们的 CI/CD 流程也已经集成了 Nexus 。所以 Nexus 还有好多好玩的,等着大家探(入)索(坑)哈!
| 作者简介
刘志杰 | 现就职于国双科技,高级数据库工程师。
大型项目交付经验,丰富的数据库管理经验,主要负责 MySQL、PostgresSQL 和 Oracle 相关的数据库运维工作。
喜欢学习分享技术,和大家共同提高!
知数堂精品课程,MySQL、SQL优化、Python、Elastic等。
MySQL课程已全面升级到MySQL 8.0版本,现在上车刚刚好,一起开启MySQL 8.0的修行之旅吧。
加入知数堂
挑战50万+年薪!
知数堂《MySQL实战优化课》已正式上线腾讯课堂,扫码入群了解课程详情吧,撩助教妹子还有优惠哟