jysperm a56c418cac Merge branch 'master' of https://github.com/jysperm/RootPanel
Conflicts:
	core/router/index.coffee
2014-02-24 01:05:23 +08:00
2014-02-17 20:28:01 +08:00
2014-02-11 03:42:28 +08:00
2014-02-17 20:17:23 +08:00
2014-02-11 03:42:28 +08:00
2014-01-27 07:32:45 -08:00
2014-02-10 23:29:51 +08:00

RootPanel3

目标

RP 3 是一个插件化的 Linux 虚拟主机管理和销售系统。

所谓虚拟主机就是指在同一个物理服务器(或 VPS)上,划分给多个用户使用,使其互不干扰。
相比于 VPS, 虚拟主机实现的是应用级别的虚拟化,而不是操作系统级别的虚拟机。
虚拟主机大概介于 PaaS(GAE, SAE) 和 IaaS 之间。

RP3 就是要做一个针对 Linux 的特点深度定制的虚拟主机管理和销售系统,所谓 Linux 的特点,比如:

  • 用户机制
  • Unix Socket
  • SSH 和 SFTP

类似产品

市面上有很多类似的虚拟主机管理系统,他们都不符合 RP3 的目标

  • Usermin - 太复杂UI 太原始perl 太冷门

国内的几款:

  • AMH - 没有用户系统
  • WDCP
  • LuManager - 非自由软件

除此之外的共同特点:

  • 对 Nginx 功能支持有限
  • 只支持 PHP

功能

RP3 的核心功能包括:

  • 用户系统
  • 工单系统
  • 管理员面板

其他功能均以插件实现。

除此之外RP3 要实现:

  • 非侵入式的安装

    可以定制相关配置文件的路径,可以与其他面板共存,可以同时手工管理。

  • 国际化

    支持多语言,如果有人翻译的话

技术构成

  • 前端Bootstrap3, jQuery, jade, less
  • 后端express, Coffee
  • 数据库mongodb, memcache

操作系统支持,按推荐程度排序:

  • Debian
  • 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 辅助用户编写配置文件

    • 支持的配置文件指令

    • 面板操作

      • 新建/修改/删除站点
    • 资源监控

      可以靠根据日志来统计,或者编写 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 进行汇总统计。

Description
No description provided
Readme AGPL-3.0 1.6 MiB
Languages
CoffeeScript 80.6%
Pug 17.2%
Less 2%
HTML 0.2%