在 Ubuntu 24.04 上如何通过 apt 安装 CouchDB 3.3 并启用 systemd 自启动?
解读
国内生产环境普遍要求“版本锁定 + 官方签名 + 开机自启”。Ubuntu 24.04 默认仓库尚未收录 3.3,因此必须手动引入 Apache 官方仓库并完成 GPG 校验;同时 systemd 已是系统默认初始化系统,enable 与 start 两步缺一不可。面试官通过此题考察候选人三点:
- 是否熟悉国内网络环境下“换源+代理”的常规操作;
- 能否正确区分 Debian 系“apt 仓库优先级”与“hold 锁定版本”机制;
- 是否理解 CouchDB 的 systemd unit 文件为何由软件包自带,而非手工编写。
知识点
- **Apache CouchDB 官方仓库(https://apache.jfrog.io)**在国内可通过清华、中科大镜像加速
- **APT pinning(/etc/apt/preferences.d/)**用于锁定 3.3 小版本,防止意外升级
- **systemd 预设(preset)**与 systemctl enable --now 的语义差异
- couchdb 用户与 couchdb 组由 .deb 包自动创建,数据目录 /opt/couchdb 权限 0750
- /etc/couchdb/local.ini 是面试常问的配置文件,修改后无需 systemctl restart,HTTP PUT /_node/_config 可热加载,但初始安装阶段仍建议重启一次确认 unit 状态
- journalctl -u couchdb -f 是现场排障必用命令,可观察 “Apache CouchDB 3.3.x” 字样确认版本
答案
-
准备仓库(root 下执行,国内建议先 export https_proxy)
sudo apt update && sudo apt -y install curl gnupg2 curl https://couchdb.apache.org/repo/keys.asc | gpg --dearmor | sudo tee /usr/share/keyrings/couchdb-archive-keyring.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/couchdb-archive-keyring.gpg] https://apache.jfrog.io/artifactory/couchdb-deb/ noble main" | sudo tee /etc/apt/sources.list.d/couchdb.list -
锁定 3.3 小版本(防止进入 3.4/4.0)
echo -e "Package: couchdb\nPin: version 3.3*\nPin-Priority: 1001" | sudo tee /etc/apt/preferences.d/couchdb -
安装并开机自启
sudo apt update sudo apt -y install couchdb=3.3.* sudo systemctl enable --now couchdb -
验证
systemctl is-enabled couchdb # 应输出 enabled curl http://127.0.0.1:5984/ # 应返回 {"couchdb":"Welcome","version":"3.3.x"}
拓展思考
- 如果公司规定“所有服务必须跑在非 root 用户”,而 systemd unit 默认 User=couchdb,你是否还需要修改?——不需要,官方包已遵守最小权限原则。
- 当后续需要原地热升级到 3.3.3 补丁版,但业务要求零宕机,你会如何操作?——利用 集群滚动重启 或 单节点 dpkg -i couchdb_3.3.3-1_amd64.deb 后执行 sudo -u couchdb couchdb -k 优雅重启,而非 systemctl restart。
- 面试官可能追问:“假如 5984 端口被占用,如何修改端口并保证 systemd 识别?”——需编辑 /opt/couchdb/etc/local.d/port.ini 写入
[chttpd] port = 6984,再 systemctl reload couchdb(unit 支持 SIGUSR1 重载),而非直接改 /lib/systemd/system/couchdb.service。