So I’ve been on the fence with the
On one hand, it’s great to have the modules in the project because it speeds up the build and serves as a safe storage.
On the other hand, it does increase the churn in the repository and creates a lot of duplication on disk because many projects often contain the same dependencies.
Since I do like holding on to my dependencies and
go mod works great for me, I’ve decided to try out The Athens. I’s awesome.
What is it
It is a self-hosted golang module mirror service. Unlike the public proxy.golang.org, it can cache private modules so no more
Athens offers a selection of storage back ends: local disk, S3, Minio, GCS and the like. One instance can be pointed at another with upstream services. The documentation is very approachable.
How I run it
KISS, Docker service backed with the disk type storage. Basically like this:
mkdir -p /var/lib/gomod docker run --rm \ -p 15001:3000 \ -v /var/lib/gomod:/gomod \ -e ATHENS_STORAGE_TYPE=disk \ -e ATHENS_DISK_STORAGE_ROOT=/gomod \ -d gomods/athens:latest
I’ve exported the
GOPROXY=http://localhost:15001 in my Bash profile so tools use it automatically. I have a dedicated git repository where I sync my local modules to a couple of time a day.
Long term, maybe something like the S3 storage would be a better option but I’m not sure how expensive it can get.