OpenD 域名管理面板:轻量级、插件化的域名与 DNS 管理面板,支持多解析平台与 Docker 面板联动
OpenD 域名管理面板
轻量级、插件化的域名与 DNS 管理面板,支持多解析平台、多管理面板联动,开箱即用。
OpenD 是一款基于 PHP 开发的轻量级域名管理面板,专为站长、IDC 服务商和个人开发者设计。它提供域名池管理、子域名批量管理、DNS 解析记录管理等核心能力,并通过插件化架构对接多家 DNS 服务商(Cloudflare、阿里云、DNSPod)和面板适配器联动 Docker 容器管理面板(DockSketch),实现"开通域名即自动创建容器"的自动化流程。
功能特性
域名池管理
- 主域名批量入库,支持库存、价格、月续费、年续费配置
- 主域状态管理(启用/停用),一键删除并自动清理关联配置
- 每个主域可独立绑定 DNS 解析平台与关联管理面板
子域名管理
- 子域名一键开通:自动创建 DNS 解析记录 + 自动生成管理密码 + 自动计算到期日
- 封禁 / 恢复 / 编辑(修改记录类型、目标地址、管理密码)
- 到期日自动计算,库存自动扣减
- 子域状态实时展示(正常 / 封禁 / 到期)
用户自助面板
- 域名用户使用"域名 + 管理密码"登录
- 查看域名基本信息:开通时间、到期时间、剩余天数、状态
- 实时查看该域名的 DNS 解析记录
- 到期、封禁状态自动提示
插件化 DNS 平台
| 插件 | 目录 | 说明 |
|---|---|---|
| Cloudflare | plugins/dns/cf_dns/ |
通过 Cloudflare API 管理解析记录 |
| 阿里云 | plugins/dns/aliyun_dns/ |
通过阿里云 DNS API 管理解析记录 |
| DNSPod | plugins/dns/dnspod_dns/ |
通过 DNSPod API 管理解析记录 |
每个插件包含 plugin.json(元数据)、index.php(核心逻辑)、bind.php(绑定表单),可轻松扩展新的 DNS 服务商。
面板适配器联动
| 面板 | 目录 | 说明 |
|---|---|---|
| 宝塔 | 内置 | 默认面板,跳过容器操作 |
| DockSketch | plugins/panel/docksketch/ |
通过开放 API 联动 Docker 容器 |
DockSketch 联动流程(类似宝塔对接第三方服务):
- 子域创建 → 自动在 DockSketch 创建并启动容器
- 子域封禁 → 自动停止容器
- 子域恢复 → 自动启动容器
- 子域编辑 → 自动重启容器
- 删除主域 → 自动清理面板密钥
安全防护
- 登录验证码(
safe/captcha.php) - CSRF 令牌校验(
safe/csrf.php) - 输入过滤与注入防护(
safe/filter.php) - 登录限流(
safe/limit.php) - 密码使用
password_hash加密存储
图形化安装向导
- 三步安装:数据库配置 → 管理员账号 → 完成
- 自动建库建表、自动生成随机管理员登录入口
- 安装完成后自动跳转登录
技术栈
| 组件 | 说明 |
|---|---|
| 语言 | PHP 7.4+(推荐 8.0+) |
| 数据库 | MySQL 5.7+(推荐 8.0) |
| 扩展 | PDO、pdo_mysql、curl、mbstring、openssl、json |
| 前端 | 原生 HTML/CSS/JS + Font Awesome 6 |
| 服务器 | Nginx / Apache |
快速开始
1. 环境要求
- PHP 7.4+(启用 PDO、pdo_mysql、curl、mbstring 扩展)
- MySQL 5.7+
- Nginx 或 Apache
2. 部署
# 将项目上传至 Web 目录(以 Nginx 为例)
sudo cp -r opend /var/www/html/opend
sudo chown -R www-data:www-data /var/www/html/opend
sudo chmod -R 755 /var/www/html/opend
Nginx 配置示例:
server {
listen 80;
server_name opend.example.com;
root /var/www/html/opend;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
3. 安装
浏览器访问 http://你的域名/,按向导提示完成:
- 数据库配置:填写 MySQL 地址、端口、库名、账号、密码(自动创建数据库)
- 管理员账号:设置管理员用户名(3-32 位字母数字下划线)和密码(至少 8 位)
- 完成:记录随机生成的管理员登录入口,务必保存
4. 使用
- 管理后台:通过向导生成的管理员入口登录
- 域名池:添加主域名,绑定 DNS 插件与面板
- 子域名:开通子域名,自动创建解析记录与容器
- 用户端:域名用户使用"域名 + 管理密码"登录
login.php
目录结构
opend/
├── index.php # 安装向导
├── login.php # 登录入口(管理员 / 域名用户)
├── config.php # 数据库配置(安装后自动生成,勿提交)
├── admin/ # 管理后台
│ ├── index.php # 后台框架(仪表盘 + 导航)
│ └── domain/
│ ├── add_pool.php # 主域绑定(DNS + 面板三步流程)
│ ├── sub_domain.php # 子域名管理(开通/封禁/恢复/编辑)
│ ├── plugins.php # DNS 插件管理
│ └── panels.php # 面板适配器管理
├── app/ # 用户端
│ └── domain/index.php # 域名用户自助面板
├── lib/ # 核心库
│ ├── auth.php # 认证 + 面板适配器框架
│ ├── db.php # 数据库连接
│ └── error.php # 错误处理
├── plugins/
│ ├── dns/ # DNS 插件
│ │ ├── cf_dns/ # Cloudflare
│ │ ├── aliyun_dns/ # 阿里云
│ │ └── dnspod_dns/ # DNSPod
│ └── panel/ # 面板适配器
│ └── docksketch/ # DockSketch Docker 面板
├── safe/ # 安全模块
│ ├── captcha.php # 验证码
│ ├── csrf.php # CSRF 防护
│ ├── filter.php # 输入过滤
│ ├── limit.php # 登录限流
│ └── verify.php # 校验
└── assets/ # 静态资源(CSS/JS/图片)
与 DockSketch 联动
OpenD 通过 DockSketch 的开放 API(/api/ext/*,API Key 认证)实现域名与容器的自动化联动,两个项目保持独立,仅通过 API 层对接。
配置步骤
- 部署 DockSketch 面板,登录后在 API Key 管理 创建密钥(
dsk_xxx格式) - 在 OpenD 后台 域名管理 → 绑定主域,添加主域时选择:
- DNS 解析平台:如 Cloudflare
- 管理面板:DockSketch
- 按向导填写 DockSketch 的 API 地址与 API Key,验证通过后保存
- 之后在 OpenD 中开通子域名,将自动在 DockSketch 中创建对应容器
生命周期映射
| OpenD 事件 | DockSketch API 调用 |
|---|---|
| 子域创建 | POST /api/ext/containers(创建并启动容器) |
| 子域封禁 | POST /api/ext/containers/{id}/stop |
| 子域恢复 | POST /api/ext/containers/{id}/start |
| 子域编辑 | POST /api/ext/containers/{id}/restart |
| 删除主域 | 清理面板密钥 |
安全建议
- 安装完成后立即修改管理员密码
- 修改
config.php中的管理员入口为自定义值 - 通过 Nginx/Apache 限制敏感文件访问
- 启用 HTTPS
- 定期备份 MySQL 数据库
- 生产环境删除安装向导(
index.php)防止重装
常见问题
Q: 安装时提示数据库连接失败?
A: 检查 MySQL 是否允许远程连接、账号是否有建库权限、端口是否正确。
Q: 子域名开通后 DNS 记录未生效?
A: 确认主域已正确绑定 DNS 插件,且插件 API 凭据有效;DNS 解析生效通常需要几分钟。
Q: 如何添加新的 DNS 服务商?
A: 在 plugins/dns/ 下复制一个现有插件目录,按 plugin.json + index.php + bind.php 的结构实现 {name}_add、{name}_delete、{name}_list 等函数即可。
Q: 如何添加新的面板适配器?
A: 在 plugins/panel/ 下创建适配器目录,实现 {name}_on_domain_create、{name}_on_domain_ban、{name}_on_domain_restore、{name}_on_domain_update 等生命周期钩子。
License
本项目遵循 MIT License,可自由使用、修改与分发。