本文记录在 OpenCloudOS 9 服务器上安装 Node.js 22、以源码方式部署 Certd、接入 Nginx,并通过腾讯云 DNSPod 为 shuomishengda.cn 自动申请和部署泛域名证书的完整过程。
1. 文档说明
- 记录日期:2026-08-05
- Certd 源码分支:
v2 - Certd 默认端口:HTTP
7001、HTTPS7002 - Certd 数据目录:
/opt/certd/packages/ui/certd-server/data - 图文操作教程:Certd 演示示例
- 官方源码部署文档:Certd 源码部署
2. 证书覆盖范围
当前业务域名包括:
mini.shuomishengda.cn
platform.shuomishengda.cn
store.shuomishengda.cn
test-mini.shuomishengda.cn
mbiz.shuomishengda.cn
申请证书时填写:
*.shuomishengda.cn
shuomishengda.cn
*.shuomishengda.cn 可以覆盖上述一级子域名,但不能覆盖根域名 shuomishengda.cn,因此建议将两者放入同一张证书。泛域名证书必须使用 DNS-01 验证。
3. 安装系统依赖
使用 root 用户执行:
dnf install -y git curl wget unzip xz gcc gcc-c++ make python3 lsof
uname -m
本文服务器架构为 x86_64。如果输出为 aarch64,Node.js 安装包应改用 linux-arm64。
4. 安装 Node.js 22
使用 Node.js 官方二进制包安装到 /usr/local:
cd /tmp
curl -fLO https://nodejs.org/dist/latest-v22.x/node-v22.23.2-linux-x64.tar.xz
echo "d60acfe00a2932254bb0ad20e01b0d74397a0875595de719654b214f4b03f307 node-v22.23.2-linux-x64.tar.xz" \
| sha256sum -c -
tar -xJf node-v22.23.2-linux-x64.tar.xz \
-C /usr/local \
--strip-components=1
node --version
npm --version
command -v node
command -v npm
预期 Node.js 版本为 v22.23.2,程序路径通常为:
/usr/local/bin/node
/usr/local/bin/npm
4.1 处理 sudo: npm: command not found
首次执行 Certd 的 start.sh 时出现:
安装pnpm@10.33.4, 前提是已经安装了nodejs
sudo: npm: command not found
原因是 Certd 脚本执行了 sudo npm,而 OpenCloudOS 的 sudo secure_path 默认没有包含 /usr/local/bin。即使当前用户是 root,再次执行 sudo 时仍会使用该受限路径。
创建 sudo 路径配置:
visudo -f /etc/sudoers.d/local-bin
写入:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
验证配置:
chmod 440 /etc/sudoers.d/local-bin
visudo -cf /etc/sudoers.d/local-bin
sudo npm -v
sudo npm -v 能正常输出版本后即可继续。Certd 的 start.sh 会自动安装 pnpm@10.33.4,无须提前手动安装 pnpm。
5. 下载并构建 Certd
cd /opt
git clone --depth=1 --branch v2 https://github.com/certd/certd.git
cd /opt/certd
chmod +x start.sh
./start.sh
第一 次询问是否后台运行时输入 n:
是否后台运行(第一次运行建议选择n,调试没有问题之后,重新运行,选择y)
y/n: n
脚本会依次完成:
- 安装指定版本 pnpm。
- 安装项目依赖。
- 构建 Certd 服务端。
- 下载对应版本的前端 UI。
- 前台启动 Certd。
首次访问:
http://服务器IP:7001
默认登录信息:
账号:admin
密码:123456
首次登录后立即修改默认密码。确认页面正常后,在终端按 Ctrl+C 停止前台进程。
6. 使 用 systemd 托管 Certd
创建低权限运行用户:
useradd --system --home-dir /opt/certd --shell /sbin/nologin certd
chown -R certd:certd /opt/certd
创建 /etc/systemd/system/certd.service:
[Unit]
Description=Certd Certificate Management
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=certd
Group=certd
WorkingDirectory=/opt/certd/packages/ui/certd-server
Environment=NODE_ENV=production
Environment=PATH=/usr/local/bin:/usr/bin:/bin
ExecStart=/usr/local/bin/pnpm run start
Restart=always
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
启用服务:
systemctl daemon-reload
systemctl enable --now certd
systemctl status certd
journalctl -u certd -n 100 --no-pager
ss -lntp | grep -E ':7001|:7002'