OpenD:基于 PHP/MySQL 的插件化域名 DNS 管理项目

OpenD 域名管理面板:轻量级、插件化的域名与 DNS 管理面板,支持多解析平台与 Docker 面板联动

分支1Tags0
文件最后提交记录最后更新时间
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前
1 个月前

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://你的域名/,按向导提示完成:

  1. 数据库配置:填写 MySQL 地址、端口、库名、账号、密码(自动创建数据库)
  2. 管理员账号:设置管理员用户名(3-32 位字母数字下划线)和密码(至少 8 位)
  3. 完成:记录随机生成的管理员登录入口,务必保存

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 层对接。

配置步骤

  1. 部署 DockSketch 面板,登录后在 API Key 管理 创建密钥(dsk_xxx 格式)
  2. 在 OpenD 后台 域名管理 → 绑定主域,添加主域时选择:
    • DNS 解析平台:如 Cloudflare
    • 管理面板:DockSketch
  3. 按向导填写 DockSketch 的 API 地址与 API Key,验证通过后保存
  4. 之后在 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,可自由使用、修改与分发。

项目介绍

OpenD 域名管理面板:轻量级、插件化的域名与 DNS 管理面板,支持多解析平台与 Docker 面板联动

定制我的领域