配置本地缓存服务器(一)
绝大多数系统管理员都遇到过开发部门抱怨软件包下载慢,严重影响工作效率的问题。对此问题,系统管理员也很无奈,无论接入带宽是10M、100M还是1G光纤,都不能解决这个问题。原因是很多时候下载慢并不是因为接入带宽不够,而是因为去源库的路上要翻越千山万水,克服重重困难,才能取到我们需要的真经。尽管分布在各地的各种镜像,缓解了部分问题,真正能解决问题的方式是建立本地镜像或缓存。
解决这个问题在最好办法是在本地建立镜像,但这种做法并不现实,资源要求太大,系统维护要求太高。我们采用了本地缓存方法来解决这个问题,原因是这种方式能解决绝大部分的问题,又没有大的资源和维护要求,完全能满足企业开发部门的需求。
本文将介绍如何使用多种缓存软件组合为完整的缓存服务器,满足企业软件开发部分的需求。
我们使用的免费缓存软件分别为:
Nexus Repository Manager 3 OSS:用于缓存 Bower、Docker、Git LFS、Maven、npm、NuGet、PyPI和Ruby Gems。
Apt-cacher-ng:该软件开发的目的是用于缓存Debian系的APT包,但实际上也能用于缓存YUM、RPM、BSD等的软件库。
SQUID:可缓存任意想缓存的内容,但配置复杂。我们将用它缓存其他软件库,如CPAN、CRAN、PECL等等。
下面我们将分别介绍它们的安装、配置和使用。
基于Nexus Repository Manager 3 OSS的缓存服务
这是由Sonatype公司开发的一款软件库管理软件,我们只介绍使用其缓存功能。我们可以从其下载页面获取该软件。
安装Nexus Repository Manager 3 OSS
安装Oracle Java 8
注意:NXRM 3 OSS 和 OpenJDK 有兼容性问题,所以安装Oracle的Java。
添加Oracle Java APT库
add-apt-repository ppa:webupd8team/java
更新APT
apt update
安装Java
apt install oracle-java8-installer
检查已安装的Java
root@appcache:~# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
root@appcache:~#
将Nexus Repository 解压、安装到 /opt下
tar xvzf nexus-3.14.0-04-unix.tar.gz -C /opt
链接 /opt/nexus-3.14.0-04 到 /opt/nexus
ln -s /opt/nexus-3.14.0-04 /opt/nexus
设置 Nexus Repository 启停
在链接 /opt/nexus/bin/nexus 到 /etc/init.d/nexus
ln -s /opt/nexus/bin/nexus /etc/init.d/nexus
设置自动启动和自动停止
update-rc.d nexus defaults
启动Nexus命令:service nexus start
停止Nexus命令:service nexus stop
重启Nexus命令:service nexus restart
显示Nexus状态:service nexus status
重新加载配置文件: /etc/init.d/nexus reload
Nexus Repository Manager已安装完成。重启系统,Nexus Repository Manager 将随系统自动启动。
设置Nexus Repository Manager 3 OSS
本文只介绍和缓存相关的内容。
这是管理员登陆后的界面,管理员默认登陆为admin:admin123。
点击上方工具条中的齿轮图标进入管理页面。
NXRM OOS是一个功能非常丰富的Repository管理系统,本文只涉及其中的一小部分:Repository缓存。
就是Repository部分,我们也只关心Repositories部分,其他三部分采用默认设置。
点击【Repositories】
可以看到这儿有三个Repositories已经建立,分别为maven-central、maven-imagej和maven-public。下面我们将分别介绍这三个库。
maven-central缓存库
这个库是用于缓存Maven的Central Repositoray,下面是一些参数介绍。
- Name:必须在NXRM OSS中是唯一的,这里用的是
maven-central
。 - Type:这是缓存Central库,所以是
proxy
。 - URL:URL能操作到这个缓存库,这个链接是系统自动产生的。
- Remote Repository:这是我们要缓存的库,这里是Central库,URL是
https://repo1.maven.org/maven2/
- Maximum Metadata Age:我们把数字从一天延长为一个月,目的是减少检查meta数据的频率,降低因获取metadata失败造成的build失败几率。
在建立缓存库是,真正需要输入的只用Name
和Remote Repository
。其他的采用默认值即可,默认值能满足绝大多数的需求。
maven-imagej缓存库
这个库是用于缓存ImageJ的Maven Repository。其他的设置和maven-central完全一样,除了Name
和Remote Repository
。
Name:maven-imagej
Remote Repository:http://maven.imagej.net/content/groups/public
maven-public缓存库
这个库和上面二个完全不一样,不是一个缓存库,它的作用是把该系统上的其他maven库集合成一个Maven总库,其他maven库中的artifacts都可以通过它来获取,它就是您的本地Central库。当增加新的Maven库时,开发者的本地Maven配置并不需要修改,这给开发人员提供了很大方便。
maven-public包含前面介绍的二个缓存库,maven-public查找排在最上面的库,如没找到需要的artifact,再从排在它下面的库中找。以此类推,直到找到或找完所有的成员库。
maven-public库的URL可点击它所对应的【Copy】键获取。
配置NXRM OSS就是这么方便,这是我们选用它来做 Bower、Docker、Git LFS、Maven、npm、NuGet、PyPI和Ruby Gems 的缓存服务器的一个重要原因。
使用Nexus Repository Manager 3 OSS
首先需要设置本地的Maven的配置,新建立的maven-public库将成为配置文件中的唯一Maven库。
$HOMEDIR/.m2/settings.xml
<settings>
<mirrors>
<mirror>
<!--This sends everything else to /public -->
<id>lswin</id>
<mirrorOf>*</mirrorOf>
<url>http://appcache.lswin.cn:8081/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>lswin</id>
<!--Enable snapshots for the built in central repo to direct -->
<!--all requests to nexus via the mirror -->
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>