如何优雅的打造 All-in One 仓库

做过大型项目的同学一定都搞过自定义 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:admin123@10.200.60.21: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:admin123@10.200.60.21: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实战优化课》已正式上线腾讯课堂,扫码入群了解课程详情吧,撩助教妹子还有优惠哟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值