在 Equinix Metal 裸金属服务器上部署与运维 Wekan:Ubuntu GRUB 启动修复与 SSH 故障处理实战
【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan
本文以仓库中的 docs/Platforms/Propietary/Cloud/Metal/README.md 为核心,介绍开源看板 Wekan(基于 Meteor 构建)在 Equinix Metal(前身 CNCF Packet)裸金属服务器这一场景下的部署背景与两类关键运维故障处理:Ubuntu 系统重启后无法上线的 GRUB 修复,以及 macOS Ventura 下 SSH 无法使用 RSA 签名的问题。读完本文,你将掌握 Equinix Metal 实例的基本管理入口、GRUB 引导修复与 SOS 控制台恢复方法,以及 SSH 主机密钥算法的兼容性配置,并能把这些技巧与本仓库中 Wekan 的裸金属部署配置(bundle、Node.js、MongoDB 与 start-wekan.sh)结合起来使用。
背景:从 CNCF Packet 到 Equinix Metal 的裸金属实践
仓库文档明确记录:CNCF Packet 现已并入 Equinix Metal(原文档原文:"CNCF Packet is now part of Equinix Metal.")。因此,凡是早期资料中提到的"CNCF / Packet 裸金属服务器",在今天对应的实际产品即为 Equinix Metal 的裸金属实例。
裸金属服务器在本仓库的 Wekan 部署体系中并非孤立概念,而是有实际使用记录的:
- 在 docs/Platforms/Propietary/Cloud/AWS/README.md 中提到,Wekan 团队已经可以访问CNCF / Packet 提供的高性能裸金属服务器,用于运行高负载测试,这说明裸金属硬件正是 Wekan 团队进行性能压测与规模化验证的载体。
- 在 docs/Platforms/FOSS/HW/RaspberryPi/Raspberry-Pi.md 中,维护者记录了一次关键验证:"I did also test Wekan arm64 on arm64 bare metal server, same Wekan bundle worked there."——即同一份 arm64 的 Wekan bundle 可以同时跑在树莓派和 arm64 裸金属服务器上,说明Wekan 的 bundle 分发方式天然适用于裸金属服务器。
由此可以推断:在 Equinix Metal 这类提供完整硬件控制权的环境中部署 Wekan,可以采用与树莓派/自建服务器相同的"bundle + Node.js + MongoDB"方式,无需受虚拟化或受限内核约束(对比之下,docs/Platforms/Propietary/Cloud/OVH/README.md 明确指出 OVH/Kimsufi 因受限内核无法运行 Snap 或 Docker,只能从源码安装)。
Equinix Metal 控制台入口
Equinix Metal 的 Web 管理控制台地址为console.equinix.com,这是管理实例、查看串口日志、进入 Serial over SSH(SOS)控制台的统一入口。当服务器无法通过网络正常访问时(例如启动卡在 GRUB 提示符),就需要通过控制台提供的 SOS 会话进行底层恢复,这正是下文两个故障场景的核心操作路径。
在裸金属服务器上运行 Wekan:bundle 方式与核心配置
在 Equinix Metal 裸金属服务器上部署 Wekan 时,可以参照仓库中"无容器安装"的通用流程(见 docs/Platforms/FOSS/HW/RaspberryPi/Raspberry-Pi.md)。Wekan 的运行只需要三样东西:
- 对应 CPU 架构的 Wekan bundle(.zip 打包的 Javascript 等文件),唯一随架构变化的组件是
fibers包的编译产物; - Node.js 二进制;
- MongoDB。
启动方式可以是start-wekan.sh脚本、systemd 服务,或任何"设置环境变量后在 bundle 目录执行node main.js"的脚本。
核心环境变量(以仓库根目录的 start-wekan.sh 为准)
| 变量 | 含义与示例 |
|---|---|
ROOT_URL | Wekan 对外访问地址,必须与真实访问路径一致,否则翻译、附件上传等会失效。例如ROOT_URL=http://192.168.0.200(内网)或ROOT_URL=https://kanban.example.com(经 Caddy/Nginx 反代 HTTPS) |
PORT | Wekan Node.js 监听的本地端口,例如PORT=80或PORT=2000 |
MONGO_URL | MongoDB 连接串,例如MONGO_URL=mongodb://127.0.0.1:27017/wekan |
WRITABLE_PATH | 附件、头像等文件的磁盘存储路径,必须存在且可写,例如WRITABLE_PATH=.. |
MONGO_OPLOG_URL | MongoDB oplog 连接串,用于实时响应(Change Streams/Oplog)。本地副本集示例:MONGO_OPLOG_URL=mongodb://127.0.0.1:27017/local?replicaSet=rs0;远程带认证示例:MONGO_OPLOG_URL=mongodb://<user>:<password>@<host>:<port>/local?authSource=admin&replicaSet=rsWekan |
从 start-wekan.sh 的源码可以进一步看到两点与裸金属部署直接相关的重要细节:
- MongoDB 需以副本集方式运行并启用 Change Streams。脚本启动时会先检查 127.0.0.1:27017 的副本集状态,未初始化则自动初始化
rs0(通过snap-src/bin/db-eval.mjs完成,无需 mongosh 二进制)。若启用成功,会设置METEOR_REACTIVITY_ORDER=changeStreams,oplog,polling,否则回退为polling。 - Node 堆内存自动适配。脚本会读取系统内存(含 cgroup 限制),自动设置
NODE_OPTIONS=--max-old-space-size=...(约为可用内存的 3/5,上限 4096 MB),裸金属服务器内存较大时无需手工调参。
若希望 Node.js 以非 root 用户运行但仍绑定 80 端口,可先执行which node找到二进制路径,再授权:
sudo setcap cap_net_bind_service=+ep /usr/local/bin/nodesystemd 服务示例
编辑/etc/systemd/system/wekan.service:
[Unit] Description=The Wekan Service After=syslog.target network.target [Service] EnvironmentFile=/etc/default/wekan User=wekan Group=wekan WorkingDirectory=/home/wekan/bundle ExecStart=/usr/local/bin/node main.js Restart=on-failure SuccessExitStatus=143 [Install] WantedBy=multi-user.target对应/etc/default/wekan环境文件:
NODE_ENV=production WITH_API=true MONGO_URL=mongodb://127.0.0.1:27017/wekan ROOT_URL=https://kanban.example.com PORT=2000更多参数说明可参考 docs/Platforms/Webserver/Settings.md;若对外提供服务,建议在前面加一层 Nginx/Caddy/Apache 做 TLS 终止与反向代理(见 docs/Platforms/Webserver/Nginx.md)。
Ubuntu 重启修复(GRUB 引导)
Equinix Metal 的裸金属服务器在特定条件下存在一个已知问题:受影响的系统一旦重启,可能无法重新上线。此时通过 Serial over SSH(SOS)控制台观察,系统会停留在 GRUB 提示符界面,而不是正常引导进入 Ubuntu。
原文档给出的修复流程分两步:
第一步:安装 grub2-common 并重装引导器
在系统仍正常运行时(或通过 SOS 环境修复到可引导后),执行:
sudo apt-get update sudo apt-get install grub2-common sudo grub-install --bootloader-id=ubuntu命令解析:
sudo apt-get update:刷新软件包索引,确保能获取到最新版本的grub2-common;sudo apt-get install grub2-common:安装 GRUB 2 的公共组件(包含grub-install、grub-mkconfig等工具);sudo grub-install --bootloader-id=ubuntu:将 GRUB 引导器写入磁盘,并使用ubuntu作为 bootloader id。--bootloader-id指定了 EFI 引导项的名称,这与后续 SOS 恢复时configfile指向的路径约定相关。
第二步:通过 SOS 控制台从 GRUB 恢复
如果系统已经被重启并卡在 GRUB 提示符,需要通过 Equinix Metal 控制台的 Serial over SSH(SOS)会话连接进入 GRUB,然后执行:
grub> configfile ($root)/EFI/GRUB/grub.cfg该命令会让 GRUB 从当前根设备加载EFI/GRUB/grub.cfg配置文件,从而载入正确的启动序列。设备随后会恢复正常引导并回到服务状态。
恢复后的持久化修复
需要强调的是,configfile命令只解决当次恢复,属于一次性急救手段。要让系统在下次重启后不再复发,必须执行前述第一步的持久化修复命令(安装grub2-common并重新grub-install --bootloader-id=ubuntu)。两者配合才是完整的解决方案:先用 SOS 把"躺平"的系统拉起来,再在系统内修复引导器,彻底消除重启失联的隐患。
macOS Ventura 下 SSH 无法连接裸金属服务器(RSA 签名问题)
第二个常见故障来自客户端侧:macOS Ventura 系统默认的安全策略不再接受使用 RSA 签名的主机密钥,导致ssh连接 Equinix Metal 服务器时报错或失败。原文档给出了在 macOS 上重新启用 RSA 主机密钥的修改方法。
编辑 ssh_config
打开终端,执行:
sudo nano /etc/ssh/ssh_config系统会要求输入管理员密码进行认证(sudo鉴权)。
追加 RSA 算法白名单
滚动到ssh_config文件的最底部,追加以下两行:
HostkeyAlgorithms +ssh-rsa PubkeyAcceptedAlgorithms +ssh-rsa参数含义:
HostkeyAlgorithms +ssh-rsa:在默认主机密钥算法集合中追加ssh-rsa。行首的+前缀表示"在已有默认值基础上增加",而不是完全覆盖,这是保持其他算法不受影响的关键写法;PubkeyAcceptedAlgorithms +ssh-rsa:同样以追加方式允许客户端使用 RSA 公钥算法进行用户认证。
保存并退出
在 nano 编辑器中按Control+O保存文件,再按Control+X退出编辑器。之后重新执行ssh连接即可恢复正常。
如果问题依旧,可以进一步检查服务端/etc/ssh/sshd_config是否也禁用了 RSA 算法(此时应在服务端同步追加对应配置并重启 sshd),以及客户端~/.ssh/config中是否有覆盖全局设置的条目。
配套运维资源
完成部署与故障修复后,以下仓库内文档可继续支撑日常运维:
- docs/Platforms/Webserver/Settings.md:
ROOT_URL/root-url与端口组合的多种典型场景(纯内网 80 端口、自定义端口、Nginx/Caddy SSL 反代等),以及 Admin Panel、邮件、代理等配置说明; - docs/Platforms/Webserver/Nginx.md:Nginx 反代 Wekan 的完整配置示例,包含 WebSocket(SockJS)升级所需的
map $http_upgrade $connection_upgrade与proxy_set_header三件套、client_max_body_size附件大小限制、Let's Encrypt SSL 等;若浏览器控制台出现WebSocket connection to 'wss://HOST/sockjs/...' failed,可重点核对这三行配置; - docs/Platforms/FOSS/HW/RaspberryPi/Raspberry-Pi.md:无容器安装 Wekan 的通用流程(bundle + Node.js + MongoDB),其中"arm64 裸金属服务器与树莓派使用同一 bundle"的验证记录同样适用于 Equinix Metal 的 arm64 实例;
- start-wekan.sh:仓库根目录的官方启动脚本,集中注释了 MongoDB 副本集初始化、Change Streams、S3、邮件、LDAP、OAuth2/OIDC、CORS、浏览器策略等全部可用环境变量。
小结
围绕 docs/Platforms/Propietary/Cloud/Metal/README.md 的核心内容,本文给出了两套立即可用的故障处理方案:面向 Equinix Metal(原 CNCF Packet)裸金属服务器的Ubuntu GRUB 重启修复(grub2-common+grub-install --bootloader-id=ubuntu,以及 SOS 控制台下的configfile ($root)/EFI/GRUB/grub.cfg恢复),和面向 macOS Ventura 客户端的SSH RSA 签名修复(在ssh_config中追加HostkeyAlgorithms +ssh-rsa与PubkeyAcceptedAlgorithms +ssh-rsa)。同时结合本仓库源码补充了 Wekan 在裸金属环境中的 bundle 部署方式、副本集/Change Streams 配置与核心环境变量。建议运维者在部署前先执行 GRUB 修复以避免"重启即失联",并提前配置好 SOS 控制台访问权限,以应对不可预期的引导故障。
【免费下载链接】wekanThe Open Source kanban, built with Meteor. GitHub issues/PRs are only for FLOSS Developers, not for support, support is at https://wekan.fi/commercial-support/ . PR source translation to imports/i18n/data/en.i18n.json, other translations at https://app.transifex.com/wekan/wekan项目地址: https://gitcode.com/GitHub_Trending/we/wekan
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考