如何设置雅典代理缓存
#linux #go #raspberrypi

在本地Kubernetes群集的自动设置中,我决定将大部分请求缓存到APT。这与例如我用来代理Java/Kotlin依赖性的文物。我很快面临着同样的事情。

最简单的方法可能是继续进行文物,并将其用于APT,GO,NPM等。不幸的是,只有Maven部分是免费的。

替代方案可能是联系。开源版提供了所有需要的存储库类型,例如APT或GO(以及更多)。但是有一些缺点。例如,没有.deb软件包可用。安装必须手工完成。配置是评论家的另一个要点。与文物相比,对我来说感觉很麻烦。最后,它仍然需要Java 8! Nexus背后的人们还无法将其移植到Java 9及以后。

无论哪种方式,伪像和Nexus都很“沉重”。我不会在Raspberry Pi 3上运行的东西。因此,我找到了雅典,这是一个专门的代理缓存,用于GO模块。它仍在开发中,但是我需要的是:轻巧,简单的设置。仅此处的缺点:否.deb文件,也是如此。但是他们提供了一个安装脚本,该脚本可以构建雅典并安装完全自动化的SystemD服务。不过,有一些事情要考虑。接下来的是我在Raspberry Pi 3.

上安装雅典的旅程的逐步指示。

注意:在以下各节中,我将使用hostproxy表示我的笔记本电脑和Raspberry Pi(我为“代理”受洗)。在以前,pi是任何Raspberry Pi的默认用户。如今,当您安装Raspberry Pi OS时,将提示您命名第一个用户。为了使事情变得简单,我会坚持用户pi

前飞行

在我可以通过编译雅典安装雅典之前,我听了GO版本> = 1.17。 Raspberry Pi OS基于Debian Bullseye(稳定),目前仅以1.15的速度发货。但是,可以将Debian Backports存储库添加到可用的新版本。

首先,我添加了backports repo:

echo "deb http://deb.debian.org/debian bullseye-backports main" | sudo tee -a /etc/apt/sources.list

然后我需要获取存储库密钥。为此,我用Docker在本地机器上旋转了一个Debian容器,并在公共钥匙上复制了:

mkdir -p /tmp/transfer
docker run -it --rm debian:bullseye -v /tmp/transfer:/transfer

#Within the container
cp -r  /etc/apt/trusted.gpg.d/ /transfer

接下来,我将钥匙复制到我的raspi:

scp -r /tmp/transfer/trusted.gpg.d/ pi@proxy:

我登录Raspi后,我终于复制了钥匙,因此可以找到它们:

sudo cp ~/trusted.gpg.d/*  /etc/apt/trusted.gpg.d/ 

现在,我能够从Backports存储库中安装1.19:

sudo apt update && sudo apt install golang -t bullseye-backports

雅典安装

安装雅典很简单。首先,我必须获取代码:

git clone https://github.com/gomods/athens.git

然后,我必须通过模板配置复制,并且调整是我的喜好。到目前为止,我只确保雅典不会将所有缓存的数据存储在磁盘上:

,而不是将所有缓存的数据存储在内存中:

cd athens
#systemd.sh expect a file config.toml at the root of the repository folder
cp config.dev.toml config.toml

config.toml中,我将StorageType = "memory"更改为StorageType = "disk"和“ [storage]'树中,我都设置了想要通过用RootPath = "/var/cache/athens"替换RootPath = "/path/on/disk"的所有文件的路径。

我还需要创建“ rootpath”(具有正确的权限)。当SystemD调用时,将使用用户www-data执行雅典。因此,我必须考虑到:

sudo mkdir -p /var/cache/athens
sudo chown -R www-data:www-data /var/cache/athens

scripts/systemd.sh中,我必须在doInstallConfig()中评论以下四行:

ATHENS_DISK_STORAGE_ROOT=/var/run/athens
sudo mkdir -p $ATHENS_DISK_STORAGE_ROOT
sudo chown www-data $ATHENS_DISK_STORAGE_ROOT
sudo chgrp www-data $ATHENS_DISK_STORAGE_ROOT

否则,我自定义的“ rootpath”将被覆盖。

现在,安装了正确的GO版本,定制配置文件和一些修复程序,我已经准备好安装雅典。因此,从存储库文件夹的根部我只需要执行:

scripts/systemd.sh install

该执行编译了雅典并安装了Systemd服务。

测试

回到我的主机机器上,我可以安装例如yq(尚未在debian存储库中):

export GOPROXY="http://proxy:3000
go install github.com/mikefarah/yq/v4@latest

之后,我对Raspi看了看。现在应该在/var/cache/athens中有一些数据,并且是。因此,从现在开始,雅典将拦截每个呼叫,下载任何可用的更新或直接提供任何缓存版本,以防上游没有可用的更新。

结论

雅典很简单易于设置。我唯一一段时间的唯一一件事是硬编码的ATHENS_DISK_STORAGE_ROOT变量。不幸的是,该项目没有促进此安装过程。既不在官方主页上,也不在录像机上。您可以在DEVELOPMENT.md文件中找到它。雅典提供丰富的配置设置。您绝对应该查看完整的config.dev.toml文件。提示:如果您执行scripts/systemd.sh没有任何参数,它将告诉您它可以做什么!