自建一个 Nixery
实例可以让你在本地或私有服务器上运行 Nixery
服务,从而避免公共服务的不稳定性。以下是一个基本的步骤指南,帮助你在本地或服务器上部署 Nixery
。
确保你的系统已经安装了以下软件:
Docker
和 Git
属于基础软件,就不再展开讲解安装部分了。Nix
安装你可以参考 Nix 官方文档 进行安装。
首先,你需要克隆 Nixery
的代码仓库:
$ git clone https://code.tvl.fyi/depot.git:/tools/nixery.git nixery
$ cd nixery
使用 Nix
构建 Nixery
镜像:
$ nix-build -A nixery-image
构建完成后,你会在 result
目录中得到一个 Docker
镜像。
# 加载镜像
$ docker load < result
# 按你的实际 tag 修改下面的值
$ docker tag nixery:bbgi5sfqwpp6fsd36ccqw9yi0vykdkz3 nixery:latest
Nixery
支持多种配置选项,可以通过环境变量进行设置。以下是一些常见的配置选项:
Nixery
支持多种不同的存储后端,构建缓存和图像层都保存在这些后端中,并从这些后端提供服务。
目前可用的存储后端有谷歌云端存储和本地文件系统。
在谷歌云存储中,通过将客户端重定向到存储桶来提供镜像。存储在文件系统中的镜像图层则直接从本地磁盘提供。
要配置存储后端,必须设置这些额外的配置环境变量:
如果 GOOGLE_APPLICATION_CREDENTIALS
环境变量设置为服务账户密钥,Nixery
将使用该密钥为存储桶中的图层创建签名 URL。这样就可以从存储桶中提供图层,而无需将其公开。
如果未设置 GOOGLE_APPLICATION_CREDENTIALS
环境变量,则会重定向到 storage.googleapis.com
,这意味着底层的存储桶对象需要可公开访问。
$ docker run --name nixery -d -p 8080:8080 \
-e PORT=8080 \
-e NIXERY_STORAGE_BACKEND=filesystem \
-e STORAGE_PATH=/opt/data/store \
-e NIXERY_PKGS_REPO=https://github.com/NixOS/nixpkgs \
-e NIXERY_CHANNEL=nixos-unstable \
-v ./data:/opt/data/ \
nixery:latest
如果你想使用 Google Cloud Storage
(GCS) 作为存储后端,可以按以下步骤操作:
$ docker run --name nixery -d -p 8080:8080 \
-e PORT=8080 \
-e NIXERY_STORAGE_BACKEND=gcs \
-e GCS_BUCKET=your-gcs-bucket-name \
-e NIXERY_PKGS_REPO=https://github.com/NixOS/nixpkgs \
-e NIXERY_CHANNEL=nixos-unstable \
-v ./data:/opt/data/ \
nixery
现在,你应该可以通过 http://localhost:8080
访问你的 Nixery 实例。
启动 Nixery
容器后,你可以像使用公共 Nixery
服务一样使用你自建的 Nixery
实例。例如:
$ docker run --rm -it localhost:8080/shell/btop
$ docker run --rm -it IP:8080/shell/git/btop/curl
你可以根据需要进一步配置你的 Nixery
实例,例如:
以下是一个使用 Nginx
作为反向代理的示例配置:
server {
listen 80;
server_name your.domain.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
自建的 Nixery
实例默认没有支持 HTTPS
。你如果不想配置 HTTPS
,请确保 Docker Daemon
允许使用 HTTP
连接。你可以通过以下步骤进行配置:
Docker Daemon
的配置文件(通常位于 /etc/docker/daemon.json
)并添加不安全的注册表地址{
"insecure-registries": ["10.1.2.3:8080"]
}
注:10.1.2.3:8080 是你的 Nixery 实例的 IP 地址和端口号,请按实际情况修改。
$ sudo systemctl restart docker
为了保证服务的稳定运行,你可能需要设置监控和日志系统。例如,可以使用 Prometheus
和 Grafana
来监控 Nixery
的性能。
通过这些步骤,你能够成功自建一个 Nixery 实例并根据需要进行配置和扩展。如果你在过程中遇到任何问题,可以参考 Nixery 的文档或社区支持。
自建 Nixery
私有服务器最大的技术难点是需要 Nix
环境。你如果不想扯腾 Nix
环境,可以直接使用我构建好的 Nixery
的镜像。