如何在 Ubuntu 或 Debian 上设置 Apt 缓存服务器
如果您经常在 Linux 计算机上创建来宾 VM 或容器,您将在不同的 VM/容器之间多次安装软件包。在这种情况下,您的时间可能最好花在更高效的事情上,而不是仅仅等待完成安装包。虽然 Puppet、Chef 或 Ansible 等服务器配置工具可以自动化整个机器配置过程,但它们对于单台笔记本电脑或台式计算机上的虚拟化来说太过分了。当网络速度较慢时,并行下载的效果也有限。
节省在计算机上的一次性虚拟机/容器上安装软件包的时间的更实用方法是设置本地 Apt/Yum 存储库镜像,以便可以在本地而不是通过 Internet 提取软件包。然而,镜像整个存储库会占用磁盘空间和带宽,并且不值得付出努力,因为所需的包数量通常不是很大。
存储库镜像的替代方法是为 Apt/Yum 存储库设置本地缓存服务器。在这种情况下,所有下载的包都会缓存在缓存服务器上,因此相同包的任何后续安装都可以快速完成。在许多情况下,您最终都会以任何方式安装类似的软件包。所以缓存效果非常好。
在基于 Debian 的系统中,有几个软件允许您为 Apt 存储库设置缓存服务器/代理。例如,apt-proxy 是最古老的设计,后来创建了 apt-cacher 来解决其前身的速度和可靠性问题。然后是 apt-cacher-ng,它为 apt-cacher 添加了多线程和 HTTP 管道支持。
在本教程中,我将展示如何使用 apt-cacher-ng 设置 Apt 缓存服务器。
在 Debian 或 Ubuntu 上安装和配置 apt-cacher-ng
在基于 Debian 的系统上设置 apt-cacher-ng 非常简单。
$ sudo apt-get install apt-cacher-ng
安装后,apt-cacher-ng
将设置为在您的系统上自动启动。 apt-cacher-ng
的默认配置文件位于 /etc/apt-cacher-ng/acng.conf
。评论很多,所以一定要查看。但对于大多数情况,默认配置就可以了。
每当您修改配置时,请重新启动apt-cacher-ng
。
$ sudo service apt-cacher-ng restart
apt-cacher-ng
附带一个内置 Web 服务器,能够代理基于 HTTP 的 apt-get
下载。还可以访问集成网络服务器以进行基于网络的管理和报告。要验证 apt-cacher-ng 是否正常工作,请将网络浏览器指向 http://
。 apt-cacher-ng
的管理页面如下所示。

在此示例中,apt-cacher
服务器的 IP 地址为 192.168.1.243
。
一旦 apt-cacher 服务器准备就绪,您需要配置其他客户端计算机、虚拟机或容器,以便它们可以通过缓存服务器安装软件包。在每台客户端计算机上,在 /etc/apt/apt.conf.d
中创建代理配置,指向缓存服务器,如下所示。
$ sudo vi /etc/apt/apt.conf.d/00aptproxy
Acquire::http::Proxy "http://192.168.1.242:3142";
当客户端计算机安装软件包时,缓存服务器将开始在 /var/cache/apt-cacher-ng
中缓存下载的软件包。
要检查缓存统计信息,请单击流量统计表内的统计数据
按钮。

请注意,磁盘缓存是针对不同的发行版(例如 Debian、Ubuntu、Linu Mint)进行组织的。

使用 apt-cacher-ng 时的有用提示
以下是 apt-cacher-ng 的一些有用提示。
1. 访问控制
有时,出于安全目的,限制对 apt-cacher-ng 服务器的访问很有用。 apt-cacher-ng 附带使用 TCP 包装器的内置 ACL(访问控制列表)支持。因此,如果您想为服务器的传入连接设置白名单或黑名单,可以使用 /etc/hosts.allow
或 /etc/hosts.deny
。
例如,如果您想要阻止特定 IP 地址(192.168.1.242
、192.168.1.100
),您可以指定以下内容。
在 /etc/hosts.deny 中:
apt-cacher-ng : 192.168.1.242 192.168.1.100
如果您想要阻止除 192.168.1.160
之外的所有本地流量 (192.168.1.0/24
),请执行以下操作。
在 /etc/hosts.allow 中:
apt-cacher-ng : 192.168.1.160
在 /etc/hosts.deny 中:
apt-cacher-ng : 192.168.1.0/24
设置 ACL 时无需重新启动 apt-cacher-ng。
2.本地缓存清理
当 apt-cacher-ng 服务器开始缓存下载的包时,服务器上的磁盘将开始随着时间的推移而变满。因此您需要定期清理其磁盘空间。
其基于网络的管理界面可以帮助实现这一点。只需单击开始扫描
按钮,它就会扫描缓存内容并计划从磁盘中删除任何不必要的包。


或者,您可以手动(或通过 cron 作业)清理整个缓存,如下所示。
$ sudo service apt-cacher-ng stop
$ sudo rm -rf /var/cache/apt-cacher-ng/
$ sudo service apt-cacher-ng start
作为最后的奖励,以下是如何使用单个 Docker 命令设置 apt-cacher-ng 服务器(假设您已经安装了 Docker)。当您需要时,可以分离出一个 apt-cacher-ng 容器,并在完成后将其扔掉。无需搞乱主机系统。
$ docker run --name apt-cacher-ng -d --restart=always --publish 3142:3142 --volume /srv/docker/apt-cacher-ng:/var/cache/apt-cacher-ng sameersbn/apt-cacher-ng:latest