3
1
mirror of https://github.com/admpub/nging synced 2022-08-13 11:39:22 +00:00
nging/README.md
2022-07-03 17:20:03 +08:00

21 KiB
Raw Permalink Blame History

Nging V4

Nging's logo

Open in Gitpod

注意这是Nging V4源代码旧版V3.x、V2.x、V1.x已经转移到 v3分支 v2分支 v1分支

Nging支持MySQL和SQLite3数据库

Nging是一个网站服务程序可以代替Nginx或Apache来搭建Web开发测试环境并附带了实用的周边工具例如计划任务、MySQL管理、Redis管理、FTP管理、SSH管理、服务器管理等。

本软件项目不仅仅实现了一些网站服务工具,本身还是一个具有很好扩展性的通用网站后台管理系统,通过本项目,您可以很轻松的构建一个全新的网站项目,省去从头构建项目的麻烦,减少重复性劳动。

当您基于本项目来构建新软件的时候,您可以根据需要来选用本系统的网站服务工具:

import (
	"github.com/admpub/nging/v4/application/library/module"

	// module
	"github.com/admpub/nging/v4/application/handler/cloud"
	"github.com/admpub/nging/v4/application/handler/task"
	"github.com/nging-plugins/caddymanager"
	"github.com/nging-plugins/collector"
	"github.com/nging-plugins/dbmanager"
	"github.com/nging-plugins/ddnsmanager"
	"github.com/nging-plugins/dlmanager"
	"github.com/nging-plugins/frpmanager"
	"github.com/nging-plugins/ftpmanager"
	"github.com/nging-plugins/servermanager"
	"github.com/nging-plugins/sshmanager"
)

并注册功能模块

func main(){
    initModule()
}

func initModule() {
	module.Register(
		&caddymanager.Module,
		&servermanager.Module,
		&ftpmanager.Module,
		&collector.Module,
		&task.Module,
		&dlmanager.Module,
		&cloud.Module,
		&dbmanager.Module,
		&frpmanager.Module,
		&sshmanager.Module,
		&ddnsmanager.Module,
	)
}

可执行文件下载

安装方式

  1. 安装Nging

    1). 自动安装方式:

    sudo sh -c "$(wget https://raw.githubusercontent.com/admpub/nging/master/nging-installer.sh -O -)"
    
    # 如果是中国境内网络,可以选择采用以下命令:
    sudo sh -c "$(wget https://gitee.com/admpub/nging/raw/master/nging-installer.sh -O -)"
    

    sudo wget https://raw.githubusercontent.com/admpub/nging/master/nging-installer.sh -O ./nging-installer.sh && sudo chmod +x ./  nging-installer.sh && sudo ./nging-installer.sh
    

    nging-installer.sh 脚本支持的命令如下

    命令 说明
    ./nging-installer.sh./nging-installer.sh install 安装(自动下载nging并启动为系统服务)
    ./nging-installer.sh upgrade./nging-installer.sh up 升级
    ./nging-installer.sh uninstall./nging-installer.sh un 卸载

    2). 手动安装方式:
    下载相应平台的安装包解压缩到当前目录进入目录执行名为“nging”的可执行程序(在Linux系统执行之前请赋予nging可执行权限)。 例如在Linux64位系统分别执行以下命令

    cd ./nging_linux_amd64
    chmod +x ./nging
    ./nging
    

    3). Docker 安装方式

  2. 配置Nging:
    打开浏览器,访问网址 http://localhost:9999/setup 在页面中配置数据库和管理员账号信息进行安装。

安装成功后,使用管理员账号登录。

Nging手动升级步骤

  1. 备份数据库和旧版可执行文件;
  2. 停止旧版本程序的运行;
  3. 将新版本所有文件复制到旧版文件目录里进行覆盖;
  4. 启动新版本程序;
  5. 登录后台检查各项功能是否正常;
  6. 升级完毕

V3 升级到 V4

config/config.yaml 文件内的 caddyftpdownload 配置块移动到 extend 块内(ftp改名为ftpserver)。即:

extend {
    caddy {
        // 内容略...
    }
    ftpserver {
        // 内容略...
    }
    download {
        // 内容略...
    }
}

开机自动运行

  1. 首先,安装为服务,执行命令 ./nging service install
  2. 启动服务,执行命令 ./nging service start

与服务相关的命令:

命令 说明
./nging service install 安装服务
./nging service start 启动服务
./nging service stop 停止服务
./nging service restart 重启服务
./nging service uninstall 卸载服务

0、基本功能

一. 系统设置

目前,在“系统设置”中提供了以下设置组:

  1. 系统: 目前提供了API密钥和调试模式的开关
  2. SMTP: 配置用于发送邮件的SMTP服务器的相关设置
  3. 日志: 在这里可以设置如何保存和输出本系统所生成的日志

二. 用户管理

提供对后台用户的修改、添加和删除等操作。可以为后台用户分配相应的角色,从而对其进行权限控制

三. 角色管理

一个角色就是一个权限集合。在本系统中我们将权限分为了操作权限和指令权限。

  1. 操作权限:基于网址操作来进行权限判断
  2. 指令权限:用于指定该角色可以执行的指令(这里的指令是指系统命令)

四. 邀请码

邀请码用来邀请其他人来注册成为本系统的后台用户。您可以指定受邀人注册后所拥有的角色,从而限制其操作权限。

五. 验证码

在这里可以查看短信验证码和邮箱验证码的发送记录以及使用时间

六. 指令集

为了对系统命令的执行进行权限控制,可以定义某个系统命令为指令

七. 修改个人资料

可以在此修改自己的头像、邮箱、手机号、密码等信息

八. 使用两步验证

如果想要提高账号的安全性,请启用两步验证。本系统已经实现了对两步验证的完整支持。

Ⅰ、特色功能

一. Web服务

Web服务采用caddy作为内核。
caddy 是类似于nginx或apache的网站服务软件。caddy的配置文件比nginx更加简洁易用。 Nging采用了图形化界面来配置caddy这使得对caddy的配置变得更加的容易。

设置网站服务的一般流程为:添加分组 - 添加网站 - 启动服务

1. 创建分组

首先,我们来添加一个分组。点击左边竖向导航栏上的网站管理展开子菜单,点击添加分组打开创建界面,在表单录入框组名称中输入名称后提交

2. 添加网站

然后,我们来添加一个网站。点击左边竖向导航栏上的网站管理展开子菜单,点击添加网站打开创建界面,这里向我们展示了创建网站服务所要配置的一些录入框,我们现在分别来说明各个录入框的作用:

  • 分组:如果网站特别多,需要按组进行归类,您可以在这里选择相应分组,这里我们选择第一步添加的分组

  • 监听地址可以是网址、域名或IP。如果不提供端口则默认为2005如果不提供协议(比如https://)则默认为http如果不提供IP和域名则默认为0.0.0.0如果只想允许本地访问请设置为localhost或127.0.0.1。
    域名支持通配符“*”(例如*.admpub.com)和环境变量(环境变量用花括号括起来例如localhost:{$PORT})。
    例子: https://admpub.com:443 admpub.com:80 :8080 127.0.0.1:9999
    监听地址如有多个,用空格隔开。

  • 网站位置:网站文件夹在服务器上的绝对路径

  • 网站名称:网站的名字

  • 日志文件:输入保存访问日志文件的路径

  • 默认首页在访问某个目录的时候默认的首页文件。如有多个用空格隔开。如不填写默认为index.html index.htm index.txt default.html default.htm default.txt

  • 响应Header可以对网址中的某个起始路径的访问设置响应头参数支持添加、删除和修改Header

    删除Header在Header名称前使用减号(-)并将其值留空

  • HTTPS支持手动和自动设置SSL证书。
    在手动模式下需要分别填写证书和私钥文件位置在自动模式下必须填写电子邮箱地址以便自动获取Let's encrypt 证书

  • GZIP:压缩数据,用于减少页面或静态文件的网络传输尺寸,可以通过指定扩展名的方式来对特定文件进行压缩

  • FastCGIFastCGI代理用于将请求转发到FastCGI服务。尽管此指令最常见的用途是为PHP站点提供服务但默认情况下它是通用的。支持设置多个不同的请求路径。

  • Proxy:反向代理功能用于将接收到的请求转发到指定的后台。通过设置多个后台地址我们能实现服务器的负载均衡。

  • 文件服务:用于提供文件的直接访问

  • IP过滤通过设置过滤规则来禁止某些IP或国家来访问我们的网站

  • 网址重写:将请求的网址重写为其它值。常用于资源重定向、伪静态等场景

  • 备注:记录当前网站的一些附加说明

  • 网站状态:如果是启用状态则表示该网站能够上线

  • 是否重启修改配置后必须重启Web服务后才会生效

3. 启动服务

Web服务是默认启动的。

可以在网站列表页面点击重新应用配置来重新生成Caddy配置文件和重启服务。

当然,你也可以在左边的导航菜单中点击服务器链接然后再点击展开的子菜单服务管理在打开的页面中点击Web服务的控制按钮来进行单纯的重启和关闭

二. 服务器

  1. 服务器信息

    展示服务器的操作系统、CPU、磁盘、内存、网络等信息。

    在这个页面中,使用了进度条和百分比来直观的展示数据和资源的占用量。

  2. 网络端口

    列出占用网络端口的进程,并且支持关闭进程

  3. 执行命令

    执行简单的控制台命令。

    用聊天对话框的方式来与机器进行简单的交互。

  4. 服务管理

    控制Web和FTP服务的启动和关闭

  5. 进程值守

    进程保活,即当执行的程序被异常关闭后自动重新启动此程序

    1. 添加配置

      在左边的导航菜单中点击服务器链接然后再点击展开的子菜单进程值守打开列表页,点击列表右上角的添加配置按钮,我们来添加一个配置,在配置表单中我们可以录入以下信息:

      • 状态:指定是否启用当前配置。如果启用则会自动开始值守
      • 名称:描述一下要值守的这个进程的名字
      • 命令:进程的启动命令
      • 环境变量:如果启动的程序需要一些特定的环境变量,您可以在这里进行设置。输入的格式为“环境变量的名称=环境变量的值”,比如“NAME=Nging”。如有多个,一行一个
      • 命令参数:其实在命令输入框中已经可以带参数了,但是如果参数比较多,则可以在这里添加,格式为-c=value,如有多个则一行一个
      • 工作目录:有的时候我们需要切换到某个目录下之后再执行程序,对于这种情况在这里输入这个目录的路径即可
      • 信息日志文件:值守的信息日志保存位置。如果不填,则输出到控制台
      • 错误日志文件:错误日志保存位置。如果不填,则输出到控制台
      • 重试次数:连续重试的次数。如果连续启动程序都失败了并且达到重试次数的限制,则退出值守
      • 启动延时:程序异常退出后,等待多长时间后再启动。格式为数字和单位字母的组合,有效的单位有:"ns", "us" (or "µs"), "ms", "s", "m", "h" 分别表示 "纳秒", "微秒", "毫秒", "秒", "分钟", "小时"
      • 心跳检测间隔也就是多久检测一次程序运行状态。默认1m即1分钟。格式同启动延时
      • 说明:该配置的附加说明
      • 调试模式:如果开启,则会在控制台输出调试信息
    2. 启动和关闭值守

      在列表页点击“启用状态”列中的复选框可以控制值守程序的开和关

三. FTP账号

  1. 添加账号分组

    对于有大量FTP账号的情况可以通过建立分组来进行归类

  2. 添加FTP账号

    要使用Nging提供的FTP功能必须首先要创建一个FTP账号。

    FTP客户端使用这里创建的账号来登录。

  3. 开关FTP服务

    在左边的导航菜单中点击服务器链接然后再点击展开的子菜单服务管理在打开的页面中点击FTP服务的控制按钮来进行重启和关闭

    为了避免与原有FTP服务发生冲突本系统的FTP服务默认端口为233可以通过修改配置文件config/config.yaml中ftp节点内的port字段值来指定其它端口。

四. 数据采集

数据采集模块提供了强大的采集功能,它包含了以下特色:

  • 灵活便捷的配置表单
  • 支持无限级页面
  • 支持多种页面格式(html,json,text)
  • 支持多类型采集规则(regexp,regexp2,goquery)
  • 丰富的过滤器和验证器
  • 支持多种浏览器引擎(chromedpwebdriver等)
  • 三种去重验证机制
  • 支持代理
  • 支持自动导出采集数据到不同的数据源(WebAPI,DSN)
  • 支持定时采集
  1. 添加采集规则

    在左边的导航菜单中点击数据采集链接然后再点击展开的子菜单新建规则,我们来添加一个新规则,在配置表单中我们可以录入以下信息:

    • 规则名称:首先您得为规则取一个名字

    • 分组:为当前规则选择一个分组

    • 说明:规则附加说明

    • 判断重复:选择一个判断重复的方式,这样可以避免重复采集相同的数据

    • 入口页面网址在这里您可以指定多个入口页面网址每一个网址单独放在一行支持使用Go语言的模板语法循环输出网址此外每一个网址中都支持使用数字范围标签,在数字范围标签中,连续的范围我们使用-来指定,不连续的范围使用,来罗列,同时支持指定步进值,且步进值与范围值之间用:分隔默认步进值为1例如{(1-9,11,13-19:2)}

      例如http://www.admpub.com/{(1-2)}.html 会生成网址:  
      http://www.admpub.com/1.html  
      http://www.admpub.com/2.html  
      
    • 最大超时:请求页面时的最大等待时长(秒)

    • 间歇时间:每个页面的随机等待的秒数范围

    • 代理地址:例如:http://admpub:123456@123.123.123.123:8080。支持格式protocol://user:password@ip:port

      • protocol - 支持http、https、socks5
      • user - 用户名(选填)
      • password - 密码(选填)
      • ip - IP地址
      • port - 端口
    • 页面格式目标页面的内容格式支持的有HTML/JSON/Text

    • 浏览引擎目前支持standard/chromedp/webdriver这三种其中standard为普通方式速度最快默认为standard。chromedp和webdriver为调用chrome浏览器速度相对较慢

    • 页面类型:可以选择“列表页”和“内容页”选项,请根据所采集页面的实际类型来选择

    • 页面字符集:比如gbkutf-8。此项为选填,不填写的情况下会根据网页内容自动判断

    • 区域规则:指定所要采集页面上的某个区域的匹配规则。这里支持两种类型的规则:

      1. 选择器规则即类似于jQuery匹配页面元素的规则比如div.container > h1
      2. 正则匹配规则:需要在规则前添加前缀regexp:regexp2:。其中regexp:为Go语言原生正则表达式规则regexp2:为兼容 Perl5 和 .NET 的正则表达式规则(相关文档:https://github.com/admpub/regexp2
    • 规则:此处指定以下规则

      1. 数据采集规则:所要采集的数据匹配规则,如果指定了区域规则则在该区域内进行查找
      2. 数据保存变量名:指定数据保存到哪个变量里
      3. 数据过滤器和验证器:多个过滤器或验证器之间用管道符“|”分隔以下划线“_”开头的为验证器不符合验证器规则的数据会被跳过

    然后可以点击“添加下一级页面”链接来对添加第二级页面的规则。页面的层级数量没有限制。

  2. 测试采集规则

点击“测试”按钮可以进行采集测试,为了快速获取测试结果,每一级页面只采集一条

  1. 执行采集

点击“采集”按钮进行手动采集

  1. 将采集加入计划任务

也可以将采集任务加入到计划任务中,进行自动定时采集

  1. 添加导出规则

    定义采集数据的导出方式。如果希望在采集的时候自动将采集到的数据导入其它系统,请在这里添加导出规则。 目前支持两种导出方式:

    1、导入到数据库 2、提交到API接口将JSON数据POST提交到API接口

五. 计划任务

crontab的完美替代并采用了图形化配置界面支持记录日志、发送错误报告邮件等

六. 离线下载

这里的离线下载支持并行下载。
对于需要很长时间才能下载完成的大文件我们只需要建立一个离线下载任务并且启动然后就可以关闭浏览器去做其它的事情了Nging会自动在后台帮您下载。

七. 云服务

  1. 云存储账号 可以管理所有与Amazon S3 API兼容的对象存储文件比如亚马逊AWS、阿里云OSS、腾讯云COS、网易云NOS、百度云BOS、华为云OBS、七牛云Kodo等
  2. 文件备份 可以通过配置将指定目录下的文件备份到云存储

八. 数据库管理

  1. 管理MySQL
  2. 管理Redis
  3. MySQL表结构比较/同步

九. FRP内网穿透

当你想要将局域网内的电脑暴露到外网,以便于外网的用户也能访问到您的网站服务时,这时候就需要用到内网穿透。

内网穿透支持服务端模式和客户端模式,全图形化的配置界面让配置变得非常容易。

要成功使用内网穿透功能必须在局域网电脑上启动客户端模式在提供外网的服务器或VPS上启动服务端模式。

十. SSH管理

SSH管理功能实现了SSH的Web客户端管理功能您可以在Nging网页上进行SSH命令行交互操作也可以通过Nging以SFTP方式来进行文件的上传、下载、删除和编辑

十一. 工具箱DDNS

DDNS功能特色

  1. 支持 阿里云DNS / DNSPod / Cloudflare / 华为云DNS / Namecheap
  2. 支持IPv4、IPv6
  3. 支持通过API、网卡、命令行查询IP
  4. 支持同时更新多个DNS服务
  5. 支持指定域名和线路
  6. 支持多个 Webhook
  7. 支持更新通知

Ⅱ、先睹为快

运行

安装

安装:

安装

登录:

登录

系统信息:

系统信息

实时状态:

实时状态

在线编辑文件:

在线编辑文件

添加计划任务:

添加计划任务

MySQL数据库管理

MySQL数据库管理

Ⅲ、开发环境下的启动方式

  • 第一步: 安装GO环境(必须1.12.1版以上)配置GOPATH、GOROOT环境变量并将%GOROOT%/bin%GOPATH%/bin加入到PATH环境变量中
  • 第二步: 执行命令go get github.com/admpub/nging
  • 第三步: 进入%GOPATH%/src/github.com/admpub/nging/目录中启动run_first_time.bat(linux系统启动run_first_time.sh)
  • 第四步: 打开浏览器,访问网址http://localhost:8080/setup,在页面中配置数据库账号和管理员账号信息进行安装
  • 第五步: 安装成功后会自动跳转到登录页面,使用安装时设置的管理员账号进行登录

请注意本系统的源代码基于AGPL协议发布不管您使用本系统的完整代码还是部分代码都请遵循AGPL协议。

如果需要更宽松的商业授权协议,请联系我购买授权。