diff --git a/DOC/DEV/PLUGGABLE.md b/DOC/DEV/PLUGGABLE.md new file mode 100644 index 0000000..91919f0 --- /dev/null +++ b/DOC/DEV/PLUGGABLE.md @@ -0,0 +1,50 @@ +## 实现插件化 +以下部分用『RP3』指代 RP3 的核心部分。 + +### 服务 +每个服务插件,需要提供以下的功能(hook), 以下以 MySQL 举例: + +* 启用 - 为 MySQL 添加一个用户 +* 暂停 - 删除 MySQL 的用户 +* 删除 - 删除这个用户所有的数据库 +* 默认配置 - 密码默认为禁用 +* 修改配置 - 修改密码 +* 显示状态 - 如显示 MySQL 数据库磁盘占用 +* 监控资源 - 如监控 MySQL 数据库磁盘占用 + +### Hook +插件可以注册 RP3 提供的 Hook 来对 RP3 的数据和逻辑进行修改。 + +如 `rendering.navbar` 表示正在渲染 HTML 输出中的导航条部分。 + +插件可以注册自己的处理程序,接收一个参数(目前的导航条条目), 返回一个值(处理后的). + +### 数据储存 +插件与 RP3 使用同一数据库,插件所使用的集合名需添加 `plugin.name` 的前缀,如 `plugin.ssh.info`. + +### 路由 +插件可以注册或覆盖 RP3 的路由。 + +### UI +插件可以在用户的面板添加区块来显示信息。 + +插件在修改配置时需要提供一段 HTML 表单。 + +### 资源监控 +需要监控的资源有: + +* CPU 时间 - 单位 秒(s) +* 内存占用 - 单位 百万字节每小时(MiB/h) +* 磁盘空间 - 单位 MiB +* 外网流量 - 可以延后实现 +* 磁盘 OI - 可以延后实现 + +当然并非每个服务都能精确地监控这些资源,这其中有很多困难,总之尽力而为吧,以下以 SSH 服务的资源监控为例: + +插件可以向 RP3 注册监控程序,如: + +* 每 30s 运行 CPU 监控程序 +* 每 60s 运行内存监控程序 +* 每 6h 运行磁盘监控程序 + +监控程序定时向 RP3 返回几种资源的使用情况,RP3 进行汇总统计。 diff --git a/DOC/DEV/PLUGINS.md b/DOC/DEV/PLUGINS.md new file mode 100644 index 0000000..eb88eda --- /dev/null +++ b/DOC/DEV/PLUGINS.md @@ -0,0 +1,146 @@ +## 插件 +### 运行时 +RP3 会安装下列语言的运行时 + +* PHP +* Python +* Golang +* Node + +### 服务 + +* MySQL + + 使用 MariaDB 实现,只监听本地端口,支持引擎: + + * MyISAM (默认) + * XtraDB(InnoDB) + + 需要提供一个类似 phpMyAdmin 的 GUI + + * 权限控制 + + 每个用户对『以自己的用户名为前缀的数据库』有操作权限 + 例如 jysperm 可以访问 jysperm_db + + * 面板操作 + + * 设置 MySQL 密码 + + * 资源监控 + + * 磁盘占用 + * 查询数量(折合为 CPU 时间,延后实现) + * XtraDB 的使用情况(折合为内存使用), 因为 XtraDB 比较消耗内存,延后实现 + + +* MongoDB + + MongoDB 开启 --auth 选项 + 权限控制:每个用户对『以自己的用户名为前缀的数据库』有操作权限 + + * 面板操作: + + * 新建数据库 + * 重置数据库权限 + * 删除数据库 + + * 资源监控 + + * 磁盘占用 + * 其他指标,延后实现 + +* SSH + + * 面板操作: + + * 设置 SSH 密码 + * 结束所有进程 + * 重置文件权限 + + * 资源监控 + + * 进程使用的 CPU 时间 + * 进程使用的内存 + * home 目录的磁盘空间 + +* Nginx + + 该插件直接对输入的 Nginx 配置文件进行解析,进行安全性检查。 + 然后将配置文件写入 Nginx, 重新加载 Nginx. + + 配置文件以站点为单位,每个站点可以暂时启用和禁用 + + * 同时提供一个 GUI 辅助用户编写配置文件 + * [支持的配置文件指令](https://gist.github.com/jysperm/6479965) + + * 面板操作 + + * 新建/修改/删除站点 + + * 资源监控 + + 可以靠根据日志来统计,或者编写 Nginx 模块 + + * 请求数 + * 流量 + +* PHP-FPM + + 为每个用户跑一个 PHP-FPM 进程池,并通过 Unix Socket 连接 + 该功能只是默认的 PHP 支持,用户完全可以运行自己的 PHP-FPM 实现深度定制。 + + * 面板操作 + + * 启用/关闭 PHP-FPM + + * 资源监控 + + 纳入 SSH 资源监控 + +* ShadowSocks + + 为每个用户使用单独的端口和密码。 + + * 面板操作 + + * 启用/关闭 ShadowSocks + * 设置密码 + + * 资源监控 + + 可能需要修改其源代码 + + * 流量 + +* PPTP VPN + + * 面板操作 + + * 设置密码 + + * 资源监控 + + 可能需要修改其源代码 + + * 流量 + +* Memcached + + 为每个用户跑一个 Memcached, 并通过 Unix Socket 连接 + + * 面板操作 + + * 启用/关闭 Memcached + * 设置缓存内存大小 + + * 资源监控 + + 纳入 SSH 资源监控 + +### 功能插件 + +* 用户手册 +* 用户剩余时长计数器 +* Bitcoin 支付 +* 支付宝担保交易 diff --git a/README.md b/README.md index 0b974cc..904075d 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,10 @@ ## RootPanel3 - -## 目标 -RP 3 是一个插件化的 Linux 虚拟主机管理和销售系统。 +RP3 是一个插件化的 Linux 虚拟主机管理和销售系统。 所谓虚拟主机就是指在同一个物理服务器(或 VPS)上,划分给多个用户使用,使其互不干扰。 相比于 VPS, 虚拟主机实现的是应用级别的虚拟化,而不是操作系统级别的虚拟机。 虚拟主机大概介于 PaaS(GAE, SAE) 和 IaaS 之间。 -RP3 就是要做一个针对 Linux 的特点深度定制的虚拟主机管理和销售系统,所谓 Linux 的特点,比如: - -* 用户机制 -* Unix Socket -* SSH 和 SFTP - -### 类似产品 -市面上有很多类似的虚拟主机管理系统,他们都不符合 RP3 的目标 - -* Usermin - 太复杂,UI 太原始,perl 太冷门 - -国内的几款: - -* AMH - 没有用户系统 -* WDCP -* LuManager - 非自由软件 - -除此之外的共同特点: - -* 对 Nginx 功能支持有限 -* 只支持 PHP - ### 功能 RP3 的核心功能包括: @@ -37,24 +13,23 @@ RP3 的核心功能包括: * 工单系统 * 管理员面板 -其他功能均以插件实现。 +其他功能均以插件实现,包括 SSH, Nginx, PHP-FPM, MySQL, ShadowSocks 等等。 -除此之外,RP3 要实现: +除此之外,RP3 支持: * 非侵入式的安装 可以定制相关配置文件的路径,可以与其他面板共存,可以同时手工管理。 - + * 国际化 支持多语言,如果有人翻译的话 - ## 技术构成 -* 前端:Bootstrap3, jQuery, jade, less -* 后端:express, Coffee -* 数据库:mongodb, memcache +* 前端:Bootstrap3, jQuery, Jade, Less +* 后端:Express, Coffee +* 数据库:MongoDB, Memcache 操作系统支持,按推荐程度排序: @@ -62,218 +37,3 @@ RP3 的核心功能包括: * Ubuntu * Arch * CentOS - -## 关于该文档 -该文档描述了 RP3 的详细需求,部分功能被标注为了『延后实现』。 - -## 核心 -### 用户系统 -功能中规中矩,注册,登录。 -登录后会有个面板,显示一些常规信息,各个插件可以向面板上添加信息。 - -用户名只允许使用字母和数字,必须以字母开头,不能使用任何符号。 -这个限制是因为在各个系统中均会以用户名为标识,为了保证和各个系统的兼容性,只好这样。 - -### 工单系统 -和 RP2 差不多 - -### 管理员面板 -默认是一个服务器基本信息报表,和一个用户列表。 - -## 插件 -### 运行时 -RP3 会安装下列语言的运行时 - -* PHP -* Python -* Golang -* Node - -### 服务 - -* MySQL - - 使用 MariaDB 实现,只监听本地端口,支持引擎: - - * MyISAM (默认) - * XtraDB(InnoDB) - - 需要提供一个类似 phpMyAdmin 的 GUI - - * 权限控制 - - 每个用户对『以自己的用户名为前缀的数据库』有操作权限 - 例如 jysperm 可以访问 jysperm_db - - * 面板操作 - - * 设置 MySQL 密码 - - * 资源监控 - - * 磁盘占用 - * 查询数量(折合为 CPU 时间,延后实现) - * XtraDB 的使用情况(折合为内存使用), 因为 XtraDB 比较消耗内存,延后实现 - - -* MongoDB - - MongoDB 开启 --auth 选项 - 权限控制:每个用户对『以自己的用户名为前缀的数据库』有操作权限 - - * 面板操作: - - * 新建数据库 - * 重置数据库权限 - * 删除数据库 - - * 资源监控 - - * 磁盘占用 - * 其他指标,延后实现 - -* SSH - - * 面板操作: - - * 设置 SSH 密码 - * 结束所有进程 - * 重置文件权限 - - * 资源监控 - - * 进程使用的 CPU 时间 - * 进程使用的内存 - * home 目录的磁盘空间 - -* Nginx - - 该插件直接对输入的 Nginx 配置文件进行解析,进行安全性检查。 - 然后将配置文件写入 Nginx, 重新加载 Nginx. - - 配置文件以站点为单位,每个站点可以暂时启用和禁用 - - * 同时提供一个 GUI 辅助用户编写配置文件 - * [支持的配置文件指令](https://gist.github.com/jysperm/6479965) - - * 面板操作 - - * 新建/修改/删除站点 - - * 资源监控 - - 可以靠根据日志来统计,或者编写 Nginx 模块 - - * 请求数 - * 流量 - -* PHP-FPM - - 为每个用户跑一个 PHP-FPM 进程池,并通过 Unix Socket 连接 - 该功能只是默认的 PHP 支持,用户完全可以运行自己的 PHP-FPM 实现深度定制。 - - * 面板操作 - - * 启用/关闭 PHP-FPM - - * 资源监控 - - 纳入 SSH 资源监控 - -* ShadowSocks - - 为每个用户使用单独的端口和密码。 - - * 面板操作 - - * 启用/关闭 ShadowSocks - * 设置密码 - - * 资源监控 - - 可能需要修改其源代码 - - * 流量 - -* PPTP VPN - - * 面板操作 - - * 设置密码 - - * 资源监控 - - 可能需要修改其源代码 - - * 流量 - -* Memcached - - 为每个用户跑一个 Memcached, 并通过 Unix Socket 连接 - - * 面板操作 - - * 启用/关闭 Memcached - * 设置缓存内存大小 - - * 资源监控 - - 纳入 SSH 资源监控 - -### 功能插件 - -* 用户手册 -* 用户剩余时长计数器 -* Bitcoin 支付 -* 支付宝担保交易 - -## 实现插件化 -以下部分用『RP3』指代 RP3 的核心部分。 - -### 服务 -每个服务插件,需要提供以下的功能(hook), 以下以 MySQL 举例: - -* 启用 - 为 MySQL 添加一个用户 -* 暂停 - 删除 MySQL 的用户 -* 删除 - 删除这个用户所有的数据库 -* 默认配置 - 密码默认为禁用 -* 修改配置 - 修改密码 -* 显示状态 - 如显示 MySQL 数据库磁盘占用 -* 监控资源 - 如监控 MySQL 数据库磁盘占用 - -### Hook -插件可以注册 RP3 提供的 Hook 来对 RP3 的数据和逻辑进行修改。 - -如 `rendering.navbar` 表示正在渲染 HTML 输出中的导航条部分。 - -插件可以注册自己的处理程序,接收一个参数(目前的导航条条目), 返回一个值(处理后的). - -### 数据储存 -插件与 RP3 使用同一数据库,插件所使用的集合名需添加 `plugin.name` 的前缀,如 `plugin.ssh.info`. - -### 路由 -插件可以注册或覆盖 RP3 的路由。 - -### UI -插件可以在用户的面板添加区块来显示信息。 - -插件在修改配置时需要提供一段 HTML 表单。 - -### 资源监控 -需要监控的资源有: - -* CPU 时间 - 单位 秒(s) -* 内存占用 - 单位 百万字节每小时(MiB/h) -* 磁盘空间 - 单位 MiB -* 外网流量 - 可以延后实现 -* 磁盘 OI - 可以延后实现 - -当然并非每个服务都能精确地监控这些资源,这其中有很多困难,总之尽力而为吧,以下以 SSH 服务的资源监控为例: - -插件可以向 RP3 注册监控程序,如: - -* 每 30s 运行 CPU 监控程序 -* 每 60s 运行内存监控程序 -* 每 6h 运行磁盘监控程序 - -监控程序定时向 RP3 返回几种资源的使用情况,RP3 进行汇总统计。