后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载本指南围绕 FerretDB 随 DEB / RPM 安装包附带的 systemd unit 展开讲解如何将 FerretDB 注册为开机自启的系统服务、通过systemctl edit覆盖环境变量并结合仓库内真实的 unit 文件与命令行参数解析源码说明每个配置项的实际作用。读完本文你将能够在 Debian/Ubuntu 或 RHEL/CentOS 系列服务器上完整落地一个由 systemd 托管的 FerretDB 实例并掌握从监听地址、Unix 域套接字到 PostgreSQL 连接串的进阶配置方法。前置条件先通过 DEB 或 RPM 安装 FerretDBsystemd unit 随安装包一起分发因此在使用 systemd 之前需要先完成二进制安装。FerretDB 官方提供生产包如ferretdb.deb/ferretdb.rpm与调试包带-dev后缀性能显著下降不建议生产使用对应安装方式参见 .deb 安装指南 与 .rpm 安装指南。以.deb系Debian、Ubuntu为例sudo dpkg -i ferretdb.deb ferretdb --version以.rpm系RHEL、CentOS为例sudo rpm -i ferretdb.rpm ferretdb --version需要特别说明的是FerretDB 安装包不会自动安装 PostgreSQL。由于 v2 系列以 PostgreSQL配合 DocumentDB 扩展作为后端请提前确保 PostgreSQL 可用。.rpm包可通过sudo yum install -y postgresql安装.deb包对应的 DocumentDB 扩展安装参见仓库中的 DocumentDB 安装文档。随包附带的 unit 文件解析安装完成后systemd 会获得一个名为ferretdb的服务单元用于在系统启动时自动拉起 FerretDB。仓库中真实打包的 unit 文件位于 build/ferretdb.service内容如下[Unit] DescriptionFerretDB Database Documentationhttps://docs.ferretdb.io/ Wantsnetwork-online.target Afternetwork-online.target [Service] ExecStart/usr/bin/ferretdb Restarton-failure # Configure the FerretDB service with systemctl edit ferretdb. # For more configuration options check https://docs.ferretdb.io/configuration/flags/ EnvironmentFERRETDB_POSTGRESQL_URLpostgres://127.0.0.1:5432/postgres [Install] WantedBymulti-user.target几个值得注意的设计点[Unit]段声明了Wants与After均为network-online.target确保 FerretDB 在网络就绪后再启动避免后端连接因网络未初始化而失败[Service]段中ExecStart/usr/bin/ferretdb直接启动主进程Restarton-failure让服务在非正常退出时自动拉起这是实现开机自启 崩溃自愈的关键内置了一条示例环境变量FERRETDB_POSTGRESQL_URLpostgres://127.0.0.1:5432/postgres即默认的 PostgreSQL 连接地址[Install]段的WantedBymulti-user.target表示服务会随多用户运行级别被启用。安装完成后即可启动并设置开机自启sudo systemctl daemon-reload sudo systemctl enable --now ferretdb sudo systemctl status ferretdb查看实时日志可使用journalctl -u ferretdb -f配置方式环境变量与命令行参数的等价关系unit 文件中的环境变量并非固定写法而是每个命令行 flag 都拥有等价的环境变量这一设计原则的体现。从 cmd/ferretdb/main.go 的源码可以看到FerretDB 使用kong库解析参数并通过kong.DefaultEnvars(FERRETDB)将--xxx-yyy形式的 flag 自动映射为FERRETDB_XXX_YYY形式的环境变量// cmd/ferretdb/main.go var cli struct { PostgreSQLURL string name:postgresql-url default:postgres://127.0.0.1:5432/postgres ... ... } kongOptions []kong.Option{ ... kong.DefaultEnvars(FERRETDB), }这意味着配置文件不存在全部配置都通过 flag 或环境变量注入恰好与 systemd 的Environment机制天然契合。官方文档的完整参数清单见 配置参数文档下表中列出与 systemd 部署最相关的配置项Flag环境变量默认值说明--postgresql-urlFERRETDB_POSTGRESQL_URLpostgres://127.0.0.1:5432/postgresPostgreSQL 连接 URL--postgresql-url-fileFERRETDB_POSTGRESQL_URL_FILE空从文件读取连接 URL非空时覆盖--postgresql-url--listen-addrFERRETDB_LISTEN_ADDR127.0.0.1:27017MongoDB 协议 TCP 监听地址置空或-可禁用--listen-unixFERRETDB_LISTEN_UNIX空MongoDB 协议 Unix 域套接字路径置空或-可禁用--listen-tlsFERRETDB_LISTEN_TLS空MongoDB 协议 TLS 监听地址--listen-data-api-addrFERRETDB_LISTEN_DATA_API_ADDR空HTTP Data API 监听地址--modeFERRETDB_MODEnormal运行模式--state-dirFERRETDB_STATE_DIR.状态目录Docker 镜像中为/state--auth/--no-authFERRETDB_AUTH开启是否启用认证--log-levelFERRETDB_LOG_LEVELinfo日志级别debug/info/warn/error另外两点值得在生产环境注意的细节若设置了FERRETDB_POSTGRESQL_URL_FILE源码中会在启动前用文件内容覆盖FERRETDB_POSTGRESQL_URL适合把连接串放在权限受控的文件中见 cmd/ferretdb/main.go 中if len(cli.PostgreSQLURLFile) 0的处理checkFlags会把值为-的监听类 flag 归一化为空串等价于禁用该监听因此即使通过环境变量把值设为-也不会误启动监听。用 systemctl edit 覆盖默认配置unit 文件中的环境变量只是示例应替换为符合你环境的真实配置。FerretDB 官方推荐的做法是使用 systemd 的 drop-in 机制执行sudo systemctl edit ferretdb该命令会打开编辑器并生成位于/etc/systemd/system/ferretdb.service.d/override.conf的覆盖文件。任何写在上方注释区与Lines below this comment will be discarded之间的内容都会与原始 unit 合并从而覆盖原有配置。示例一监听 Unix 域套接字官方文档给出的典型场景是在本机部署时改用 Unix 域套接字以省去 TCP 端口暴露。覆盖文件可写为### Editing /etc/systemd/system/ferretdb.service.d/override.conf ### Anything between here and the comment below will become the new contents of the file [Service] EnvironmentFERRETDB_LISTEN_UNIX/var/lib/ferretdb/ferretdb.sock ### Lines below this comment will be discarded ...写入后执行sudo systemctl daemon-reload sudo systemctl restart ferretdb即可生效。此时 MongoDB 客户端可通过mongodb:///var/lib/ferretdb/ferretdb.sock连接注意套接字所在目录/var/lib/ferretdb需确保存在且运行用户可写。从 cmd/ferretdb/readyz.go 的实现可以看到就绪探针会把cli.Listen.Unix自动转换为mongodb://url-encoded-path形式的连接串执行ping因此该套接字路径同样会被用于健康检查无需额外配置。示例二调整监听地址与连接串若希望服务对外提供 MongoDB 协议例如监听所有网卡并指向远端 PostgreSQL可在覆盖文件中同时设置多项[Service] EnvironmentFERRETDB_LISTEN_ADDR0.0.0.0:27017 EnvironmentFERRETDB_POSTGRESQL_URLpostgres://ferret:secret10.0.0.5:5432/ferretdb请权衡安全边界监听0.0.0.0时建议同时启用认证默认开启或在前面叠加 TLS 监听相关参数见 TLS 连接文档。验证服务可用性配置完成后除systemctl status ferretdb外FerretDB 本身也提供了两种验证手段版本校验ferretdb --version输出版本、commit、分支等构建信息就绪探测FerretDB 内置ping子命令它会按照当前配置的监听地址TCP 或 Unix 套接字实际发起 MongoDB wire 协议请求只有ping返回ok: 1才判定就绪可用于脚本化健康检查实现见 cmd/ferretdb/readyz.go。因此在 systemd 之外还可以配合ferretdb ping判断实例是否真正可服务而不仅依赖进程存活状态。注意事项与限制实验性功能随包分发 systemd unit 这一特性当前仍标记为实验性原文档中的:::note提示遇到问题可在社区反馈后端依赖FerretDB 不负责安装 PostgreSQL 与 DocumentDB 扩展请确保后端可用后再启动服务升级时也需先升级匹配版本的 DocumentDB 包见 .deb 更新指南默认值差异官方 Docker 镜像会对部分默认值进行覆盖如监听地址、状态目录而 systemd 部署直接使用二进制默认值迁移时需留意二者差异完整默认值以上述配置表格为准覆盖文件优先级通过systemctl edit生成的 drop-in 文件会合并而非替换原 unit如需彻底关闭某项监听将对应环境变量置空或设为-即可。至此一个由 systemd 全权托管、支持崩溃自愈与开机自启、并可通过 drop-in 灵活调整监听方式与后端连接的 FerretDB 服务便部署完成你可以在此基础上继续按需叠加 TLS、认证与监控能力。赞分享后端数据库文档数据库【免费下载链接】FerretDBA truly Open Source MongoDB alternative项目地址https://gitcode.com/gh_mirrors/fe/FerretDB点击查看免费下载相关推荐HeyGem.ai 本地部署实战3 步跑通 AI 数字人视频生成HeyGem.ai 本地部署实战3 步跑通 AI 数字人视频生成 HeyGem.aiDuix.Avatar是一个开源的 AI 数字人工具上传一段 10后端数据库文档数据库Label Studio Rectangle 标签为图像添加无标签矩形边界框的完整指南Label Studio Rectangle 标签为图像添加无标签矩形边界框的完整指南 Rectangle 是 Label Studio 中用于在图像上绘制矩后端数据库文档数据库FerretDB 在 Kubernetes 上的部署指南使用 Deployment、Service 与 PostgreSQL DocumentDB 搭建 MongoDB 兼容服务FerretDB 在 Kubernetes 上的部署指南使用 Deployment、Service 与 PostgreSQL DocumentDB 搭建 Mo后端数据库文档数据库上一篇终极指南如何用GLTR快速检测AI生成文本下一篇30款Illustrator脚本工具让设计效率飙升的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
