happyDomain =========== > 中文译者:[Exyone](https://www.exyone.me/) 由于软件架构限制,当前 happyDomain 仅支持简体中文,繁体中文用户请安装浏览器拓展插件以进行简繁转换。造成困扰,敬请谅解。 happyDomain 是一款免费的 Web 应用,可集中管理来自不同注册商和托管商的域名。 ![happyDomain 截图](./docs/header.webp) 它由 Golang 编写的 HTTP REST API(主要基于 https://stackexchange.github.io/dnscontrol/ 和 https://github.com/miekg/dns)与 [Svelte](https://svelte.dev/) 构建的精美 Web 界面组成。 作为单一无状态的 Linux 二进制文件运行,支持多种数据库(当前支持 LevelDB,更多选项即将推出)。 **主要特性:** * 高性能 Web 界面,响应迅速 * 支持多域名管理 * 支持 60+ DNS 提供商(含动态 DNS、RFC 2136),得益于 [DNSControl](https://stackexchange.github.io/dnscontrol/) * 支持最新资源记录类型,得益于 [CoreDNS 库](https://github.com/miekg/dns) * 区域编辑器支持差异对比,部署前轻松审查变更 * 保留部署变更历史记录 * 上下文帮助 * 支持多用户认证或单用户无认证模式 * 兼容外部认证(OpenId Connect 或 JWT 令牌:Auth0 等) **happyDomain 已可投入使用,但仍需不断完善:这是一个精心打造的概念验证版本,您的反馈将助力其不断进化!** 鉴于 DNS 配置和用户需求的多样性,我们尚未发现所有潜在问题。**若遇问题,请勿离去:[向我们反馈问题所在](https://github.com/happyDomain/happydomain/issues)。** 我们响应迅速,每个报告的 bug 都能帮助改进工具,惠及众人。 [无论使用体验如何,我们都期待您的反馈!](https://feedback.happydomain.org/) 您如何看待我们简化域名管理的方式?您的初步印象有助于我们根据**您的实际期望**来指引项目方向。 使用 Docker ------------ 我们是由 Docker 赞助的开源项目!因此您可以轻松使用 Docker/podman/kubernetes/... 来试用或部署应用。 使用 `docker compose` 启动 happyDomain: ```bash git clone https://framagit.org/happyDomain/happyDomain.git cd happyDomain docker compose up ``` 或直接使用 `docker run`: ```bash docker run -e HAPPYDOMAIN_NO_AUTH=1 -p 8081:8081 happydomain/happydomain ``` 此命令将在数秒内启动 happyDomain,用于评估测试(无认证、临时存储等)。使用浏览器访问 即可体验! 部署 happyDomain,请查阅 [Docker 镜像文档](https://hub.docker.com/r/happydomain/happydomain)。 从二进制文件安装 ------------------- 预编译二进制文件下载地址: 选择目录(最新版本或 master 分支),然后选择与您的操作系统和 CPU 架构对应的二进制文件。 使用 happyDomain --------------- 二进制文件附带默认配置,可直接启动。在终端中运行以下命令即可: ```bash ./happyDomain ``` 初始化完成后,应显示以下信息: Admin listening on ./happydomain.sock Ready, listening on :8081 访问 http://localhost:8081/ 开始使用 happyDomain。 ### 数据库配置 默认使用 LevelDB 存储引擎。可使用 `-storage-engine` 选项更改存储引擎。 运行 `./happyDomain -help` 查看可用存储引擎: ``` -storage-engine value 在 [inmemory leveldb oracle-nosql postgresql] 中选择存储引擎 (默认 leveldb) ``` #### LevelDB LevelDB 是轻量级嵌入式键值存储(类似 SQLite,无需额外守护进程)。 ``` -leveldb-path string LevelDB 数据库路径 (默认 "happydomain.db") ``` 默认在二进制文件所在目录创建 `happydomain.db` 目录。可更改为更有意义或更持久的路径。 #### inmemory 数据存储于内存中,服务停止后数据即丢失。 #### PostgreSQL PostgreSQL 支持主要面向已部署 PostgreSQL 数据库基础设施的环境。这允许您利用现有数据库设置、备份流程和运维工具,无需部署额外数据库系统。 happyDomain 以键值存储模式使用 PostgreSQL,将所有数据存储在包含 `key` 和 `value` 列的单张表中。虽然可行,但请注意,与专用键值存储相比,PostgreSQL 并非键值工作负载的最佳选择。若从头部署且需超出 LevelDB 的可扩展性,请考虑使用专为键值操作设计的存储后端。 ``` -postgres-database string PostgreSQL 数据库名称 (默认 "happydomain") -postgres-host string PostgreSQL 服务器主机名 (默认 "localhost") -postgres-password string PostgreSQL 密码 -postgres-port int PostgreSQL 服务器端口 (默认 5432) -postgres-ssl-mode string PostgreSQL SSL 模式 (disable, require, verify-ca, verify-full) (默认 "disable") -postgres-table string 键值存储的 PostgreSQL 表名 (默认 "happydomain_kv") -postgres-user string PostgreSQL 用户名 (默认 "happydomain") ``` #### Oracle NoSQL Database Oracle NoSQL Database 是来自 Oracle Cloud Infrastructure (OCI) 的全托管云服务,提供按需吞吐量和高可用的存储配置。happyDomain 可将其作为可扩展的云端存储后端用于生产部署。 使用 Oracle NoSQL Database 需拥有 OCI 账户并创建 NoSQL 表。表需包含主键字段 `key`(字符串类型)和 `value` 字段(JSON 类型)存储数据。认证使用 OCI 的 IAM 和 API 签名密钥。 配置以下选项连接 happyDomain 至 Oracle NoSQL Database: ``` -oci-compartment string NoSQL 数据库所在的 OCI 隔间 ID -oci-fingerprint string OCI 用户 API 密钥指纹 -oci-private-key-file string 给定用户的 OCI 私钥文件路径 -oci-region string NoSQL 数据库所在的 OCI 区域 (默认 "us-phoenix-1") -oci-table string 存储值的表名 (默认 "happydomain") -oci-tenancy string NoSQL 数据库所在的 OCI 租户 ID -oci-user string 访问 NoSQL 数据库的 OCI 用户 ID ``` #### 数据库管理系统 MySQL/Mariadb 等 DBMS 已不再支持,亦无相关计划。 持久化配置 ------------------- 二进制文件会自动查找以下配置文件: * 当前目录下的 `./happydomain.conf`; * `$XDG_CONFIG_HOME/happydomain/happydomain.conf`; * `/etc/happydomain.conf`。 仅使用找到的第一个文件。 也可通过命令行参数指定自定义路径: ```sh ./happyDomain /etc/happydomain/config ``` #### 配置文件格式 注释行必须以 # 开头,不支持行尾注释。 每行放置配置选项名称和期望值,用 `=` 分隔。例如: ``` storage-engine=leveldb leveldb-path=/var/lib/happydomain/db/ ``` #### 环境变量 还会查找以 `HAPPYDOMAIN_` 开头的特殊环境变量。 使用以下环境变量可达到与上述示例相同的效果: ``` HAPPYDOMAIN_STORAGE_ENGINE=leveldb HAPPYDOMAIN_LEVELDB_PATH=/var/lib/happydomain/db/ ``` 只需将短横线替换为下划线即可。 #### 需要 OVH API? OVH 没有简单的 API 密钥或凭据,需通过 Web 流程获取密钥。 启动认证流程,happyDomain 实例需配备专用应用程序密钥。 [连接 OVH,请按以下说明操作](https://help.happydomain.org/en/introduction/deploy/ovh)。 构建 -------- ### 依赖项 构建 happyDomain 项目需具备以下依赖项: * `go`; * `nodejs`,已测试版本 22; * `swag`,已测试版本 1.16(可通过 `go install github.com/swaggo/swag/cmd/swag@latest` 安装)。 ### 构建步骤 1. 首先准备前端,安装 node 模块依赖: ```bash pushd web; npm install; popd ``` 2. 然后生成 Go 代码使用的资源文件: ```bash go generate -tags swagger,web ./... ``` 3. 最后编译 Go 代码: ```bash go build -tags swagger,web ./cmd/happyDomain ``` 此命令将创建独立二进制文件 `happyDomain`。 开发环境 ----------------------- 若要为前端做贡献,而非每次修改后都重新生成前端资源(使用 `go generate`),可使用开发工具: 一个终端中使用以下参数运行 happydomain: ```bash ./happyDomain -dev http://127.0.0.1:5173 ``` 另一终端运行 node 部分: ```bash cd web; npm run dev ``` 此设置不使用集成到 go 二进制文件中的静态资源,而是将所有静态资源请求转发至 node 服务器,实现动态重载等功能。