如何用 Packer 构建 DigitalOcean 快照并发布 Appsmith One-Click 新版本
【免费下载链接】appsmithPlatform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.项目地址: https://gitcode.com/GitHub_Trending/ap/appsmith
当你需要把 Appsmith 的新版本发布到 DigitalOcean Marketplace 的 One-Click 应用时,整条流程是:用 Packer 基于deploy/digital_ocean/template.json构建一个新的 DigitalOcean 快照,然后在 DigitalOcean 的Marketplace Vendor Portal中把这个快照设置为 One-Click 应用的System Image并提交审核。本文基于仓库中 deploy/digital_ocean/README.md 及其引用的模板和脚本,给出从安装 Packer 到提交 Marketplace 审核的完整操作路径。前提是你已有 DigitalOcean 账号,并且能够访问 Marketplace Vendor Portal。
准备条件:安装 Packer
构建在本地机器上执行packer build,Packer 会连接 DigitalOcean API 创建一台临时 Droplet 完成装机,再把它做成快照。按 README 的说明,Packer 可通过 Homebrew(macOS)或 apt(Ubuntu/Debian)安装:
macOS:
brew tap hashicorp/tap brew install hashicorp/tap/packerUbuntu/Debian:
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo apt-get update && sudo apt-get install packer这两组命令会在你的本机上安装 Packer 及其 HashiCorp apt 源(Ubuntu/Debian 方式需要 sudo 权限)。
构建快照:配置 token 并执行 packer build
按 README 的步骤,先按 DigitalOcean 官方文档生成一个 Personal Access Token,然后导出为环境变量:
export DIGITALOCEAN_TOKEN=<your-personal-token>其中<your-personal-token>替换为你生成的 token 值。接着进入 DigitalOcean 部署目录并执行构建:
cd deploy/digital_ocean packer build template.jsontemplate.json 的关键配置如下,token 通过{{env "DIGITALOCEAN_TOKEN"}}从环境变量读取,快照名使用 Packer 自动填充的时间戳,无需手动替换:
{ "variables": { "token": "{{env `DIGITALOCEAN_TOKEN`}}", "image_name": "appsmith-marketplace-snapshot-{{timestamp}}" }, "builders": [ { "type": "digitalocean", "api_token": "{{user `token`}}", "image": "ubuntu-20-04-x64", "region": "blr1", "size": "s-1vcpu-1gb", "ssh_username": "root", "snapshot_name": "{{user `image_name`}}" } ] }也就是说,Packer 会在blr1区域用s-1vcpu-1gb规格创建一台基于ubuntu-20-04-x64的 Droplet,以root用户 SSH 登录执行 provisioner,完成后产出名为appsmith-marketplace-snapshot-<时间戳>的快照。
构建过程中 provisioner 实际做了什么
模板中定义了五组 provisioner,全部运行在上述临时 Droplet 内(不是你的本机),了解它们有助于判断构建失败发生在哪一步:
cloud-init status --wait:等待系统初始化完成;- 把本地 files/etc/ 和 files/var/ 拷贝到 Droplet 的
/etc/和/var/,其中包含 MOTD 提示脚本 99-one-click(登录时提示 Appsmith 安装在/root/appsmith)和首启脚本 01-onboot; - 执行 install-docker.sh:安装
docker-ce、docker-ce-cli、containerd.io,下载 docker-compose 1.29.2 二进制到/usr/local/bin/docker-compose,并执行groupadd docker和usermod -aG docker $USER; - 依次执行 01-packages.sh、90-cleanup.sh、99-img_check.sh。
需要注意这几个脚本的副作用范围(都发生在临时 Droplet 上):
01-packages.sh会先fallocate -l 8G /swapfile创建 8G 交换文件以防止构建时 OOM,执行apt-get update/upgrade、安装 DigitalOcean agent、ufw enable并放行http/https/ssh;快照制作前会swapoff并删除该 swapfile。90-cleanup.sh会升级系统包,并清空/tmp、/var/tmp、bash history、/root/.ssh/authorized_keys、SSH 密钥文件、大部分日志,最后用dd if=/dev/zero of=/zerofile写零填满剩余磁盘空间以安全擦除未使用区域——脚本自带提示,磁盘较大时这一步可能需要数分钟。99-img_check.sh是 DigitalOcean Marketplace Image Validation Tool(脚本内标注v. 1.6),要求以 root 运行,用于校验镜像是否满足 Marketplace 要求。
验证构建结果
构建是否有问题,以99-img_check.sh的输出为准。该工具依次检查发行版版本是否在支持列表内(Ubuntu 16.04/18.04/20.04、Debian 9/10、CentOS 6/7/8)、cloud-init 是否安装、防火墙(如ufw)是否激活、是否有未安装的安全更新、日志是否已清理、用户账户与 SSH 密钥是否符合要求、DigitalOcean Monitoring agent 是否存在(检测到会判为 FAIL),并打印形如以下的汇总:
Scan Complete. All Tests Passed!如果存在 WARN 项,输出为Some non-critical tests failed. Please review these items.并以退出码 0 结束;如果出现关键项 FAIL,输出One or more tests failed. Please review these items and re-test.并以退出码 1 结束,需要修复后重新执行packer build重跑扫描。全部通过后,DigitalOcean 控制台中会出现名称形如appsmith-marketplace-snapshot-<时间戳>的新快照,这就是要发布的 System Image。
在 Marketplace Vendor Portal 发布新版本
快照构建完成后,按 README 的发布流程操作:
- 进入
Marketplace Vendor Portal; - 在 One-Click App 列表中选中 Appsmith 应用,编辑应用信息;
- 在 Edit 表单中点击
Select system image,选择刚刚由 Packer 创建的新快照(如需升版本号,同时把App Version改为更高的版本); - 滚动到表单底部点击
Preview,预览审核过程约需 2–3 个工作日; - 审核通过后提交,变更即应用到
DigitalOcean Marketplace。
快照的首启行为与边界说明
用户通过 One-Click 部署 Droplet 后,cloud-init 的 per-instance 脚本 01-onboot 会执行:创建/root/appsmith目录,从 Appsmith 仓库 master 分支的deploy/aws_ami/docker-compose.yml(即本仓库的 deploy/aws_ami/docker-compose.yml)下载 compose 文件,然后docker-compose pull拉取镜像并docker-compose up --detach --remove-orphans启动容器。因此快照本身预装的是 Docker 与首启拉取逻辑,Appsmith 镜像在 Droplet 首次启动时获取。
两点边界:
- 发布周期由 Marketplace 审核决定,文档明确 Preview 约需 2–3 个工作日,这是流程中最长的等待环节。
- 仓库中另有一份 deploy/packer/template.json.pkr.hcl,它同时定义了 AWS EBS 与 DigitalOcean 两个 builder 并通过 Ansible playbook 装机,与本文的 One-Click 快照路径(仅
deploy/digital_ocean/template.json、shell provisioner)不是同一条流程,两套模板的 SSH 用户、装机方式均不同。本文场景只使用deploy/digital_ocean/template.json这条 README 指定的路径。
完成上述步骤后,Marketplace 上的 Appsmith One-Click 应用即指向新快照;若审核未通过或校验脚本出现 FAIL,回到packer build修复重建,而不是直接重复提交。
【免费下载链接】appsmithPlatform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.项目地址: https://gitcode.com/GitHub_Trending/ap/appsmith
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考