
VictoriaMetrics 的 DigitalOcean Marketplace 发布指南Packer 镜像构建与 Kubernetes 1-Click App 上架全流程【免费下载链接】VictoriaMetricsVictoriaMetrics: fast, cost-effective monitoring solution and time series database项目地址: https://gitcode.com/GitHub_Trending/vi/VictoriaMetricsVictoriaMetrics 项目通过deployment/marketplace/digitialocean/目录维护其在 DigitalOcean Marketplace 上的两套分发形态面向单机部署的1-ClickApp Droplet一键镜像与面向集群部署的Kubernetes 1-Click AppStack。本文以仓库中的 RELEASE_GUIDE.md 为骨架完整讲解两个发布通道的实操流程并结合仓库内的 Packer 模板、构建脚本、systemd 单元与配置文件还原每次发版背后从「二进制打包」到「镜像快照」再到「Marketplace 审核」的完整链路。读完本文你将掌握如何为 VictoriaMetrics Single 构建 DigitalOcean 快照镜像、如何维护 Kubernetes Stack 的版本更新以及如何在 Vendor Portal 上正确提交发布申请。发布通道概览DigitalOcean Marketplace 的 VictoriaMetrics 存在两条相互独立、却共享同一套版本号VM_VERSION的发布路径发布通道产物形态承载组件发布动作1-ClickApp DropletDigitalOcean 快照镜像snapshotVictoriaMetrics Single单机用 Packer 构建后在 Vendor Portal 选择该快照Kubernetes 1-Click AppMarketplace Stack 中的 Helm/原生 YAMLvmagent vmcluster集群向marketplace-kubernetes仓库提交 PR两条通道的版本更新节奏并不强制同步但都需要先确定本次要发布的 VictoriaMetrics 版本对应 GitHub Releases 页面上的 tag例如v1.94.0再分别走各自的构建与审核流程。一、构建 1-ClickApp Droplet 镜像的前置准备构建 Droplet 快照需要三样东西DigitalOcean API Token、Packer 命令行工具与目标 VictoriaMetrics 版本号。1. 准备 API TokenAPI Token 用于让 Packer 在你的 DigitalOcean 账号中创建临时 Droplet、执行脚本并最终生成快照。Token 有两种获取途径在 DigitalOcean 控制台的 API/Tokens 页面生成对应 Personal Access Token直接使用团队密码管理器中已生成好的 Token仓库发布说明中明确提到可从 OnePassword 中取用已有 Token。Token 具备完整的 Droplet 创建与快照权限属于高敏感凭据切勿提交进任何仓库或写死在配置中。Packer 模板通过环境变量注入的方式读取它见下文。2. 安装 PackerPacker 是 HashiCorp 的镜像构建工具负责「起一台临时 Droplet → 上传文件 → 执行配置脚本 → 关机打快照」的自动化流程。请先参照 HashiCorp 官方 Packer 安装教程完成 CLI 安装并确保packer命令位于PATH中。3. 确定目标版本号在项目的 GitHub Releases 页面选择要发布的 VictoriaMetrics 版本例如1.94.0。该版本号将同时用于下载对应版本的官方二进制压缩包victoria-metrics-linux-amd64-v${VM_VERSION}.tar.gz写入登录时的 MOTDMessage of the Day提示信息让用户在 Droplet 上能直接看到当前镜像内置的版本号。二、执行镜像构建一条 Make 命令完成全流程仓库为发布流程封装了 Make target构建命令如下原样取自发布指南make release-victoria-metrics-digitalocean-oneclick-droplet DIGITALOCEAN_API_TOKENdop_v23_2e46f4759ceeeba0d0248 VM_VERSION1.94.0执行前需要把两个变量设置好DIGITALOCEAN_API_TOKEN上一步获取的 API TokenVM_VERSION要发布的 VictoriaMetrics 版本号不带v前缀。这条命令会经历「模板预处理 → Packer 初始化 → Packer 构建」三个阶段其具体行为定义在 Makefile 中RELEASE_NAME : vm-oneclick-droplet VM_VERSION ? $(shell git describe --abbrev0 --tags) release-victoria-metrics-digitalocean-oneclick-droplet: cp ./files/etc/update-motd.d/99-one-click.tpl ./files/etc/update-motd.d/99-one-click sed -i -e s/VM_VERSION/${VM_VERSION}/g ./files/etc/update-motd.d/99-one-click packer init template.pkr.hcl packer build template.pkr.hcl1. 版本号缺省时的推导逻辑如果调用 Make 时没有显式传入VM_VERSION它会回退到 Git 标签推导VM_VERSION ? $(shell git describe --abbrev0 --tags)即取仓库最近一次打 tag 的版本号。这意味着在 tagged 提交上直接执行make release-victoria-metrics-digitalocean-oneclick-droplet也能得到与 tag 一致的版本。显式传入VM_VERSION则是为了「发布非最新 tag」或「预先验证未来版本」的场景两者均被支持。2. MOTD 模板的版本号注入99-one-click.tpl是登录欢迎信息的模板见 99-one-click.tpl其中以占位符形式写入版本号与访问信息# This image includes VM_VERSION version of VictoriaMetrics. # See Release notes https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/vVM_VERSIONMake 先将其复制为实际生效的99-one-click再用sed -i -e s/VM_VERSION/${VM_VERSION}/g把两处VM_VERSION全部替换成真实版本号。同时该模板也负责向首次登录的 root 用户展示防火墙放行端口、数据目录位置/var/lib/victoria-metrics-data以及配置文件的存放路径/etc/victoriametrics/single/victoriametrics.conf。3. Packer 初始化与构建packer init template.pkr.hcl负责下载模板声明所需的所有插件如 DigitalOcean builder 插件packer build template.pkr.hcl则真正执行镜像构建。整个构建流程由 template.pkr.hcl 描述。三、解析 Packer 模板镜像构建的自动化蓝图template.pkr.hcl是整个构建流程的核心配置分为变量定义、构建源source与构建步骤build三部分。1. 变量定义variable token { type string default ${env(DIGITALOCEAN_API_TOKEN)} description DigitalOcean API token used to create droplets. } variable image_id { type string default ubuntu-20-04-x64 description DigitalOcean linux image ID. } variable victoriametrics_version { type string default ${env(VM_VERSION)} description Version number of the desired VictoriaMetrics binary. } variable image_name { type string default victoriametrics-snapshot-{{timestamp}} description Name of the snapshot created on DigitalOcean. }四个变量中token与victoriametrics_version直接读取环境变量这也是为什么发布命令必须把DIGITALOCEAN_API_TOKEN与VM_VERSION作为环境变量传给 Make 的原因image_id默认使用ubuntu-20-04-x64image_name默认带{{timestamp}}占位符由 Packer 在构建时替换为时间戳保证每次构建生成的快照名唯一。2. 构建源Source临时 Droplet 的规格source digitalocean default { api_token ${var.token} image ${var.image_id} region nyc3 size s-1vcpu-1gb snapshot_name ${var.image_name} ssh_username root }每次构建会在nyc3区域拉起一台s-1vcpu-1gb1 vCPU / 1GB 内存的 Ubuntu 20.04 临时 Droplet以 root 用户 SSH 登录执行配置完成后关机并生成victoriametrics-snapshot-{{timestamp}}命名的快照。3. 构建步骤Build三段式 ProvisionerBuild 块依次执行文件上传、系统配置、VictoriaMetrics 安装与收尾清理四组动作build { sources [source.digitalocean.default] provisioner file { destination /etc/ source files/etc/ } provisioner file { destination /var/ source files/var/ } # Setup instance configuration provisioner shell { environment_vars [ DEBIAN_FRONTENDnoninteractive ] scripts [ scripts/01-setup.sh, scripts/02-firewall.sh, ] } # Install VictoriaMetrics provisioner shell { environment_vars [ VM_VERSION${var.victoriametrics_version}, DEBIAN_FRONTENDnoninteractive ] scripts [ scripts/04-install-victoriametrics.sh, ] } # Cleanup and validate instance provisioner shell { environment_vars [ DEBIAN_FRONTENDnoninteractive ] scripts [ scripts/89-cleanup-logs.sh, scripts/90-cleanup.sh, scripts/99-img-check.sh ] } }file provisioner把files/etc/与files/var/目录原样拷贝进临时 Droplet 的/etc/与/var/即预置 systemd 单元、VictoriaMetrics 配置、MOTD 脚本与开机自启脚本shell provisioner配置阶段执行系统初始化与防火墙配置shell provisioner安装阶段以VM_VERSION环境变量传入目标版本号执行 VictoriaMetrics 二进制安装shell provisioner收尾阶段清理日志与构建痕迹并对镜像做最终校验保证交付的快照干净、可复现。四、镜像内部构造从脚本到运行态1. 系统初始化01-setup.sh01-setup.sh 负责创建专用的运行用户与数据目录groupadd -r victoriametrics useradd -g victoriametrics -d /var/lib/victoria-metrics-data -s /sbin/nologin --system victoriametrics mkdir -p /var/lib/victoria-metrics-data chown -R victoriametrics:victoriametrics /var/lib/victoria-metrics-data关键设计点使用独立的victoriametrics系统用户nologinshell无登录能力运行数据库符合最小权限原则数据目录/var/lib/victoria-metrics-data的所有权交给该用户随后执行apt update与全量升级并安装curl、git、wget、software-properties-common等基础工具清理/var/log/kern.log与/var/log/ufw.log避免把构建机的日志带进镜像。2. 防火墙规则02-firewall.sh02-firewall.sh 基于 UFW 配置访问控制。镜像默认只放行固定端口其余全部阻断ufw allow ssh comment SSH port ufw allow http comment HTTP port ufw allow https comment HTTPS port ufw allow 8428 comment VictoriaMetrics Single HTTP port ufw allow 8089/tcp comment TCP Influx Listen port for VictoriaMetrics ufw allow 8089/udp comment UDP Influx Listen port for VictoriaMetrics ufw allow 2003/tcp comment TCP Graphite Listen port for VictoriaMetrics ufw allow 2003/udp comment UDP Graphite Listen port for VictoriaMetrics ufw allow 4242 comment OpenTSDB Listen port for VictoriaMetrics ufw --force enable放行端口与 VictoriaMetrics 各协议监听端口一一对应22SSH、80/443HTTP/HTTPS、8428HTTP API 与 vmui、8089Influx line protocolTCP/UDP、2003GraphiteTCP/UDP、4242OpenTSDB。如果用户不需要某种协议发布说明明确建议用 UFW 自行关闭对应端口。3. 安装 VictoriaMetrics04-install-victoriametrics.sh04-install-victoriametrics.sh 完成二进制下载与安装# Wait for cloud-init cloud-init status --wait wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v${VM_VERSION}/victoria-metrics-linux-amd64-v${VM_VERSION}.tar.gz -O /tmp/victoria-metrics.tar.gz tar xvf /tmp/victoria-metrics.tar.gz -C /usr/bin chmod x /usr/bin/victoria-metrics-prod chown root:root /usr/bin/victoria-metrics-prod # Enable VictoriaMetrics on boot systemctl enable vmsingle.service先用cloud-init status --wait等待 cloud-init 完成避免与云初始化脚本竞争资源从 GitHub Releases 下载与VM_VERSION精确对应的victoria-metrics-linux-amd64-v${VM_VERSION}.tar.gz解压出victoria-metrics-prod到/usr/bin启用vmsingle.service使数据库随 Droplet 开机自启。4. systemd 单元与运行参数服务由 vmsingle.service 管理[Unit] DescriptionVictoriaMetrics is a fast, cost-effective and scalable monitoring solution and time series database. Afternetwork.target [Service] Typesimple Uservictoriametrics Groupvictoriametrics WorkingDirectory/var/lib/victoria-metrics-data StartLimitBurst5 Restarton-failure RestartSec5 EnvironmentFile-/etc/victoriametrics/single/victoriametrics.conf ExecStart/usr/bin/victoria-metrics-prod $ARGS ExecStop/bin/kill -s SIGTERM $MAINPID ExecReload/bin/kill -HUP $MAINPID ProtectSystemfull LimitNOFILE1048576 LimitNPROC1048576 LimitCOREinfinity StandardOutputsyslog StandardErrorsyslog SyslogIdentifiervmsingle [Install] WantedBymulti-user.target几个值得注意的生产级配置通过EnvironmentFile加载启动参数文件运维可直接修改配置而无需改动 unit 文件ProtectSystemfull保护系统分区只读LimitNOFILE/LimitNPROC提升到 1048576避免高指标量下句柄耗尽失败自动重启Restarton-failure间隔 5s支持SIGTERM优雅停止与HUP热重载。VictoriaMetrics 的启动参数定义在 victoriametrics.confARGS-promscrape.config/etc/victoriametrics/single/scrape.yml -storageDataPath/var/lib/victoria-metrics-data -retentionPeriod12 -httpListenAddr:8428 -graphiteListenAddr:2003 -opentsdbListenAddr:4242 -influxListenAddr:8089 -enableTCP6参数含义参数值作用-promscrape.config/etc/victoriametrics/single/scrape.yml指定 Prometheus 风格抓取配置启用自采集能力-storageDataPath/var/lib/victoria-metrics-data数据存储目录-retentionPeriod12数据保留 12 个月-httpListenAddr:8428HTTP 服务查询 API、vmui、Prometheus 写入等监听地址-graphiteListenAddr:2003Graphite 协议含 statsdTCP 监听-opentsdbListenAddr:4242OpenTSDB 协议 TCP 监听-influxListenAddr:8089InfluxDB line protocol UDP 监听-enableTCP6—同时启用 IPv6 监听对应上述启动参数的 flag 声明可在 app/victoria-metrics/main.go 中找到如-httpListenAddr、-graphiteListenAddr、-opentsdbListenAddr、-influxListenAddr等均在 main 入口处注册与解析可据此确认各协议端口的实际行为与默认值。5. 抓取配置与开机脚本自采集配置位于 scrape.yml默认每 10 秒抓取本机8428端口的/metricsscrape_configs: - job_name: self_scrape scrape_interval: 10s static_configs: - targets: [127.0.0.1:8428]开机自启由 001_onboot 保证首次开机时启动vmsingle.service并移除构建过程中写入 sshd_config 的强制登出ForceCommand规则后重启 SSH确保镜像交付给用户时 SSH 行为正常。五、构建完成后的 Vendor Portal 更新Droplet 通道Packer 构建成功并生成快照后还需要在 DigitalOcean Vendor Portal 上把新快照关联到产品页发布才算完成进入 DigitalOcean Vendor Portalcloud.digitalocean.com 下的 vendorportal 区域选择需要更新的产品VictoriaMetrics 1-ClickApp Droplet为本次 release 填写更新的版本信息并在「选择镜像快照」处选中刚构建好的快照注意快照名带时间戳选最近一次构建的即可提交更新等待 DigitalOcean Marketplace 审核通过后对外生效。从源码结构看Droplet 通道的发布产物链可以总结为Makefile 触发 → 模板预置files/→ 脚本配置scripts/→ 快照生成 → Vendor Portal 关联 → 市场审核每一次发布都是「构建自动化」与「人工审核」的组合。六、Kubernetes 1-Click App 的发布流程第二条发布通道面向集群部署DigitalOcean 维护着一个独立的marketplace-kubernetes仓库VictoriaMetrics 集群形态vmagent vmcluster以 Stack 的形式托管其中。其发布流程与 Droplet 通道完全不同核心动作是「提交 PR 更新产品页」。1. 提交 Pull RequestFork DigitalOcean 的marketplace-kubernetes仓库修改stacks/victoria-metrics-cluster/yaml目录下的vmagent.yaml与vmcluster.yaml将镜像版本如vmagent、vminsert、vmselect、vmstorage的镜像 tag更新到目标VM_VERSION向marketplace-kubernetes仓库发送 PR等待 DigitalOcean 侧审核与合并。这一步必须完成的原因在于Kubernetes 1-Click App 安装时直接拉取的是 Stack 内 YAML 声明的镜像版本PR 未合并意味着新版二进制并未真正进入市场分发链路。2. 更新 Vendor Portal 产品页只有在 PR 已提交并通过审核、完成合并的前提下才能进入产品页更新环节更新App Version字段与本次发布的 VictoriaMetrics 版本保持一致仅当 PR 已提交且被批准合并后勾选「I made a change, submitted a pull request, and the pull request was approved and merged.」确认框更新Software Included一节中的软件包版本号并同步指向对应版本的 changelog 链接在Reason for update一节描述本次更新的内容新增功能、修复项等提交更改等待 Marketplace 审核。该流程的关键约束是顺序性先合并 PR再勾选确认框。如果 PR 尚未合并就提交产品页更新审核会被驳回。七、发布前的自查清单综合两个通道的流程可将每次发布收敛为如下清单Droplet 1-ClickApp 通道已确定目标版本号VM_VERSIONGitHub Releases 上存在对应 tag已准备DIGITALOCEAN_API_TOKEN新建或取自密码管理器本机已安装 Packer CLI执行make release-victoria-metrics-digitalocean-oneclick-droplet DIGITALOCEAN_API_TOKEN... VM_VERSION...成功确认新快照在账号中出现victoriametrics-snapshot-timestampVendor Portal 选择该快照、填写版本信息并提交审核Kubernetes 1-Click App 通道在marketplace-kubernetes的stacks/victoria-metrics-cluster/yaml中更新vmagent.yaml、vmcluster.yamlPR 已发送且被批准合并Vendor Portal 更新 App Version、Software Included 与 changelog 链接勾选确认框填写 Reason for update 并提交结语VictoriaMetrics 的 DigitalOcean 发布体系将「单机镜像」与「集群 Stack」两条通道分离前者依靠 Packer Make 实现完全自动化的快照构建版本号、MOTD、systemd 服务、防火墙规则全部由仓库内的 template.pkr.hcl 与scripts/、files/目录驱动后者则依赖外部 Marketplace 仓库的 PR 协作与 Vendor Portal 的审核闭环。理解这一整套流程不仅有助于复现 VictoriaMetrics 的上架路径也可以作为自建监控组件在云市场分发时的参考范式——从二进制、配置、服务编排到镜像产物与市场审核每一步都在仓库源码中有据可查。【免费下载链接】VictoriaMetricsVictoriaMetrics: fast, cost-effective monitoring solution and time series database项目地址: https://gitcode.com/GitHub_Trending/vi/VictoriaMetrics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考