前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >无需 Dockerfile,打造你的专属即时容器镜像 : 自建 Nixery 私有服务器

无需 Dockerfile,打造你的专属即时容器镜像 : 自建 Nixery 私有服务器

作者头像
iMike
发布2024-07-30 19:23:04
710
发布2024-07-30 19:23:04
举报
文章被收录于专栏:运维之美

自建一个 Nixery 实例可以让你在本地或私有服务器上运行 Nixery 服务,从而避免公共服务的不稳定性。以下是一个基本的步骤指南,帮助你在本地或服务器上部署 Nixery

1. 准备环境

确保你的系统已经安装了以下软件:

  • Nix
  • Docker
  • Git

DockerGit 属于基础软件,就不再展开讲解安装部分了。Nix 安装你可以参考 Nix 官方文档 进行安装。

2. 克隆 Nixery 仓库

首先,你需要克隆 Nixery 的代码仓库:

代码语言:javascript
复制
$ git clone https://code.tvl.fyi/depot.git:/tools/nixery.git nixery
$ cd nixery

3. 构建和运行 Nixery

使用 Nix 构建 Nixery 镜像:

代码语言:javascript
复制
$ nix-build -A nixery-image

构建完成后,你会在 result 目录中得到一个 Docker 镜像。

代码语言:javascript
复制
# 加载镜像
$ docker load < result
# 按你的实际 tag 修改下面的值
$ docker tag nixery:bbgi5sfqwpp6fsd36ccqw9yi0vykdkz3 nixery:latest

4. 配置 Nixery

Nixery 支持多种配置选项,可以通过环境变量进行设置。以下是一些常见的配置选项:

  • PORT:Nixery 应监听的 HTTP 端口
  • NIXERY_CHANNEL:用于构建 Nixery 的 Nix/NixOS 通道名称。
  • NIXERY_PKGS_REPO:包含软件包集的 git 仓库的 URL(使用本地配置的 SSH/git 凭据)
  • NIXERY_PKGS_PATH:包含用于构建的 Nix 软件包集的本地文件系统路径
  • NIXERY_STORAGE_BACKEND:要使用的后端存储类型,目前支持的值为 gcs(谷歌云存储)和 filesystem。
  • NIX_TIMEOUT:允许任何 Nix 生成器运行的秒数(默认值为 60)
  • NIX_POPULARITY_URL:指向包含软件包集受欢迎程度数据的文件的 URL(参见 popcount/)。
存储

Nixery 支持多种不同的存储后端,构建缓存和图像层都保存在这些后端中,并从这些后端提供服务。

目前可用的存储后端有谷歌云端存储和本地文件系统。

在谷歌云存储中,通过将客户端重定向到存储桶来提供镜像。存储在文件系统中的镜像图层则直接从本地磁盘提供。

要配置存储后端,必须设置这些额外的配置环境变量:

  • GCS_BUCKET:要使用的谷歌云存储桶名称(gcs 必填)
  • GOOGLE_APPLICATION_CREDENTIALS:指向 GCP 服务帐户 JSON 密钥的路径(GCS 可选)
  • STORAGE_PATH:用于存储和提供数据的文件夹的路径(本地存储路径)

如果 GOOGLE_APPLICATION_CREDENTIALS 环境变量设置为服务账户密钥,Nixery 将使用该密钥为存储桶中的图层创建签名 URL。这样就可以从存储桶中提供图层,而无需将其公开。

如果未设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量,则会重定向到 storage.googleapis.com,这意味着底层的存储桶对象需要可公开访问。

5. 运行 Nixery 容器

  • 使用本地文件系统作为存储后端
代码语言:javascript
复制
$ 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
  • 使用 GCS 作为存储后端

如果你想使用 Google Cloud Storage (GCS) 作为存储后端,可以按以下步骤操作:

代码语言:javascript
复制
$ 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
  • 访问自建的 Nixery

现在,你应该可以通过 http://localhost:8080 访问你的 Nixery 实例。

6. 使用自建的 Nixery 拉取镜像

启动 Nixery 容器后,你可以像使用公共 Nixery 服务一样使用你自建的 Nixery 实例。例如:

代码语言:javascript
复制
$ docker run --rm -it localhost:8080/shell/btop
$ docker run --rm -it IP:8080/shell/git/btop/curl

7. 进一步配置

你可以根据需要进一步配置你的 Nixery 实例,例如:

  • 使用 Nginx 或其他反向代理服务器来处理请求

以下是一个使用 Nginx 作为反向代理的示例配置:

代码语言:javascript
复制
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;
    }
}
  • 使用 HTTP 访问 Nixery 实例

自建的 Nixery 实例默认没有支持 HTTPS。你如果不想配置 HTTPS,请确保 Docker Daemon 允许使用 HTTP 连接。你可以通过以下步骤进行配置:

  1. 编辑 Docker Daemon 的配置文件(通常位于 /etc/docker/daemon.json)并添加不安全的注册表地址
代码语言:javascript
复制
{
  "insecure-registries": ["10.1.2.3:8080"]
}

注:10.1.2.3:8080 是你的 Nixery 实例的 IP 地址和端口号,请按实际情况修改。

  1. 重启 Docker 服务
代码语言:javascript
复制
$ sudo systemctl restart docker

8. 监控和日志

为了保证服务的稳定运行,你可能需要设置监控和日志系统。例如,可以使用 PrometheusGrafana 来监控 Nixery 的性能。

通过这些步骤,你能够成功自建一个 Nixery 实例并根据需要进行配置和扩展。如果你在过程中遇到任何问题,可以参考 Nixery 的文档或社区支持。

9. 彩蛋

自建 Nixery 私有服务器最大的技术难点是需要 Nix 环境。你如果不想扯腾 Nix 环境,可以直接使用我构建好的 Nixery 的镜像。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇妙的Linux世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 准备环境
  • 2. 克隆 Nixery 仓库
  • 3. 构建和运行 Nixery
  • 4. 配置 Nixery
    • 存储
    • 5. 运行 Nixery 容器
    • 6. 使用自建的 Nixery 拉取镜像
    • 7. 进一步配置
    • 8. 监控和日志
    • 9. 彩蛋
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档