站长博客
站长博客随手笔记
Toggle navigation
站长博客
Home
MacOS
Database
Linux
PHP
Git
Golang
About Me
Archives
Tags
Go语言Web开发项目Nging2.0.0beta版发布
Nging
2019-05-08 00:58:05
428
0
0
admin
Nging
# Nging ![Nging's logo](https://github.com/admpub/nging/blob/master/public/assets/images/nging-gear.png?raw=true) Nging是一个网站服务程序,可以代替Nginx或Apache来搭建Web开发测试环境,并附带了实用的周边工具,例如:计划任务、MySQL管理、Redis管理、FTP管理、SSH管理、服务器管理等。 本软件项目不仅仅实现了一些网站服务工具,本身还是一个具有很好扩展性的通用网站后台管理系统,通过本项目,您可以很轻松的构建一个全新的网站项目,省去从头构建项目的麻烦,减少重复性劳动。 当您基于本项目来构建新软件的时候,您可以根据需要来决定是否使用本系统的网站服务工具,这取决于您是否在`main.go`中导入包: ```go import ( _ "github.com/admpub/nging/application/initialize/manager" ) ``` ## 下载: [下载2.0.0可执行文件](http://dl.eget.io/nging/) ## 安装 1. 下载相应平台的安装包,解压缩到当前目录,进入目录执行名为“nging”的可执行程序(在Linux系统,执行之前请赋予nging可执行权限)。 例如在Linux64位系统,分别执行以下命令: ```sh chmod +x ./nging ./nging ``` 2. 打开浏览器,访问网址 <http://localhost:9999/setup> , 在页面中配置数据库和管理员账号信息进行安装。 ![安装:设置数据库信息](/api/file/getImage?fileId=5cd18fa004aa045d8a00016d) ![安装:设置管理员信息](/api/file/getImage?fileId=5cd18fa004aa045d8a00016c) ![安装](/api/file/getImage?fileId=5cd1975204aa045d8a000170) 安装成功后会自动跳转到登录页面,使用安装时设置的管理员账号进行登录 ![登录](/api/file/getImage?fileId=5cd1975204aa045d8a00016f) ## Ⅰ、基础功能 ### 一. 系统设置 目前,在“系统设置”中提供了以下设置组: ![系统设置](/api/file/getImage?fileId=5cd1975204aa045d8a00016e) 1. `系统`: 目前提供了API密钥和调试模式的开关 2. `SMTP`: 配置用于发送邮件的SMTP服务器的相关设置 3. `日志`: 在这里可以设置如何保存和输出本系统所生成的日志 ![基本设置](/api/file/getImage?fileId=5cd1994104aa045d8a000171) ![SMTP设置](/api/file/getImage?fileId=5cd1994104aa045d8a000173) ![日志设置](/api/file/getImage?fileId=5cd1994104aa045d8a000172) ### 二. 用户管理 提供对后台用户的修改、添加和删除等操作。可以为后台用户分配相应的角色,从而对其进行权限控制 ![用户管理](/api/file/getImage?fileId=5cd19a3504aa045d8a000174) ![修改用户](/api/file/getImage?fileId=5cd19a3504aa045d8a000175) ![修改用户](/api/file/getImage?fileId=5cd19a3504aa045d8a000176) ### 三. 角色管理 一个角色就是一个权限集合。在本系统中我们将权限分为了操作权限和指令权限。 1. `操作权限`:基于网址操作来进行权限判断 2. `指令权限`:用于指定该角色可以执行的指令(这里的指令是指系统命令) ![操作权限](/api/file/getImage?fileId=5cd19b0104aa045d8a000178) ![指令权限](/api/file/getImage?fileId=5cd19b3604aa045d8a00017a) ### 四. 邀请码 邀请码用来邀请其他人来注册成为本系统的后台用户。您可以指定受邀人注册后所拥有的角色,从而限制其操作权限。 ![添加邀请码](/api/file/getImage?fileId=5cd19b8b04aa045d8a00017b) ### 五. 验证码 在这里可以查看短信验证码和邮箱验证码的发送记录以及使用时间 ![验证码记录](/api/file/getImage?fileId=5cd19bc804aa045d8a00017c) ### 六. 指令集 为了对系统命令的执行进行权限控制,可以定义某个系统命令为指令 ![添加指令](/api/file/getImage?fileId=5cd19b0104aa045d8a000179) ![指令列表](/api/file/getImage?fileId=5cd19b0104aa045d8a000177) ### 七. 修改个人资料 可以在此修改自己的头像、邮箱、手机号、密码等信息 ![修改资料](/api/file/getImage?fileId=5cd19c2604aa045d8a00017d) ![修改个人资料](/api/file/getImage?fileId=5cd19c2604aa045d8a00017e) ### 八. 使用两步验证 如果想要提高账号的安全性,请启用两步验证。本系统已经实现了对两步验证的完整支持。 ![两步验证](/api/file/getImage?fileId=5cd19c5604aa045d8a00017f) ## Ⅱ、特色功能 ### 一. Web服务 Web服务采用caddy作为内核。 caddy 是类似于nginx或apache的网站服务软件。caddy的配置文件比nginx更加简洁易用。 Nging采用了图形化界面来配置caddy,这使得对caddy的配置变得更加的容易。 设置网站服务的一般流程为:添加分组 - 添加网站 - 启动服务 #### 1. 创建分组 首先,我们来添加一个分组。点击左边竖向导航栏上的`网站管理`展开子菜单,点击`添加分组`打开创建界面,在表单录入框`组名称`中输入名称后提交 ![创建分组](/api/file/getImage?fileId=5cd19d0004aa045d8a000181) #### 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`:压缩数据,用于减少页面或静态文件的网络传输尺寸,可以通过指定扩展名的方式来对特定文件进行压缩 - `FastCGI`:FastCGI代理用于将请求转发到FastCGI服务。尽管此指令最常见的用途是为PHP站点提供服务,但默认情况下它是通用的。支持设置多个不同的请求路径。 - `Proxy`:反向代理功能用于将接收到的请求转发到指定的后台。通过设置多个后台地址我们能实现服务器的负载均衡。 - `文件服务`:用于提供文件的直接访问 - `IP过滤`:通过设置过滤规则来禁止某些IP或国家来访问我们的网站 - `网址重写`:将请求的网址重写为其它值。常用于资源重定向、伪静态等场景 - `备注`:记录当前网站的一些附加说明 - `网站状态`:如果是`启用`状态则表示该网站能够上线 - `是否重启`:修改配置后,必须重启Web服务后才会生效 ![添加网站](/api/file/getImage?fileId=5cd19d0004aa045d8a000180) #### 3. 启动服务 Web服务是默认启动的。 可以在`网站列表`页面点击`重新应用配置`来重新生成Caddy配置文件和重启服务。 ![网站列表](/api/file/getImage?fileId=5cd19d9504aa045d8a000182) 当然,你也可以在左边的导航菜单中点击`服务器`链接然后再点击展开的子菜单`服务管理`,在打开的页面中点击Web服务的控制按钮来进行单纯的重启和关闭 ### 二. 服务器 #### 1. 服务器信息 展示服务器的操作系统、CPU、磁盘、内存、网络等信息。 在这个页面中,使用了进度条和百分比来直观的展示数据和资源的占用量。 ![服务器信息](/api/file/getImage?fileId=5cd19e0904aa045d8a000184) #### 2. 网络端口 列出占用网络端口的进程,并且支持关闭进程 ![网络端口](/api/file/getImage?fileId=5cd19e0904aa045d8a000183) #### 3. 执行命令 执行简单的控制台命令。 用聊天对话框的方式来与机器进行简单的交互。 ![执行命令](/api/file/getImage?fileId=5cd19ea004aa045d8a000186) #### 4. 服务管理 控制Web和FTP服务的启动和关闭 ![服务管理](/api/file/getImage?fileId=5cd19ea004aa045d8a000185) #### 5. 进程值守 进程保活,即当执行的程序被异常关闭后自动重新启动此程序 1. 添加配置 在左边的导航菜单中点击`服务器`链接然后再点击展开的子菜单`进程值守`打开列表页,点击列表右上角的`添加配置`按钮,我们来添加一个配置,在配置表单中我们可以录入以下信息: - `状态`:指定是否启用当前配置。如果启用则会自动开始值守 - `名称`:描述一下要值守的这个进程的名字 - `命令`:进程的启动命令 - `环境变量`:如果启动的程序需要一些特定的环境变量,您可以在这里进行设置。输入的格式为“`环境变量的名称`=`环境变量的值`”,比如“`NAME=Nging`”。如有多个,一行一个 - `命令参数`:其实在`命令`输入框中已经可以带参数了,但是如果参数比较多,则可以在这里添加,格式为`-c=value`,如有多个则一行一个 - `工作目录`:有的时候我们需要切换到某个目录下之后再执行程序,对于这种情况在这里输入这个目录的路径即可 - `信息日志文件`:值守的信息日志保存位置。如果不填,则输出到控制台 - `错误日志文件`:错误日志保存位置。如果不填,则输出到控制台 - `重试次数`:连续重试的次数。如果连续启动程序都失败了并且达到重试次数的限制,则退出值守 - `启动延时`:程序异常退出后,等待多长时间后再启动。格式为数字和字母的组合,例如:1y、2m、3d、4h、5i、6s 分别表示 1年、2个月、3天、4小时、5分钟、6秒 - `心跳检测间隔`:也就是多久检测一次程序运行状态。默认1m,即1分钟。格式同`启动延时` - `说明`:该配置的附加说明 - `调试模式`:如果开启,则会在控制台输出调试信息 ![添加值守配置](/api/file/getImage?fileId=5cd19f8104aa045d8a000188) 2. 启动和关闭值守 在列表页点击“启用状态”列中的复选框可以控制对某个程序值守的开和关 ![管理值守](/api/file/getImage?fileId=5cd19f8104aa045d8a000187) ### 三. FTP账号 #### 1. 添加账号分组 对于有大量FTP账号的情况,可以通过建立分组来进行归类 ![添加FTP账号组](/api/file/getImage?fileId=5cd1a03904aa045d8a00018a) #### 2. 添加FTP账号 要使用Nging提供的FTP功能,必须首先要创建一个FTP账号。 ![添加FTP账号](/api/file/getImage?fileId=5cd1a03904aa045d8a000189) FTP客户端使用这里创建的账号来登录。 #### 3. 开关FTP服务 在左边的导航菜单中点击`服务器`链接然后再点击展开的子菜单`服务管理`,在打开的页面中点击FTP服务的控制按钮来进行重启和关闭 为了避免与原有FTP服务发生冲突,本系统的FTP服务默认端口为`233`,可以通过修改配置文件config/config.yaml中ftp节点内的port字段值来指定其它端口。 ### 四. 数据采集 数据采集模块提供了强大的采集功能,它包含了以下特色: - 灵活便捷的配置表单 - 支持无限级页面 - 支持多种页面格式(html,json,text) - 支持多类型采集规则(regexp,regexp2,goquery) - 丰富的过滤器和验证器 - 支持多种浏览器引擎(chromedp,webdriver等) - 三种去重验证机制 - 支持代理 - 支持自动导出采集数据到不同的数据源(WebAPI,DSN) - 支持定时采集 #### 1. 添加采集规则 在左边的导航菜单中点击`数据采集`链接然后再点击展开的子菜单`新建规则`,我们来添加一个新规则,在配置表单中我们可以录入以下信息: - `规则名称`:首先您得为规则取一个名字 - `分组`:为当前规则选择一个分组 - `说明`:规则附加说明 - `判断重复`:选择一个判断重复的方式,这样可以避免重复采集相同的数据 - `入口页面网址`:在这里,您可以指定多个入口页面网址,每一个网址单独放在一行,支持使用Go语言的模板语法循环输出网址,此外,每一个网址中都支持使用`数字范围`标签,在数字范围标签中,连续的范围我们使用`-`来指定,不连续的范围使用`,`来罗列,同时支持指定步进值,且步进值与范围值之间用`:`分隔,默认步进值为1,例如:`{(`1-9,11,13-19:2`)}`。 ```plain 例如: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浏览器,速度相对较慢 - `页面类型`:可以选择“列表页”和“内容页”选项,请根据所采集页面的实际类型来选择 - `页面字符集`:比如`gbk`或`utf-8`。此项为选填,不填写的情况下会根据网页内容自动判断 - `区域规则`:指定所要采集页面上的某个区域的匹配规则。这里支持两种类型的规则: 1. 选择器规则:即类似于jQuery匹配页面元素的规则,比如:`div.container > h1` 2. 正则匹配规则:需要在规则前添加前缀`regexp:`或`regexp2:`。其中`regexp:`为Go语言原生正则表达式规则;`regexp2:`为兼容 Perl5 和 .NET 的正则表达式规则(相关文档:<https://github.com/admpub/regexp2>) - `规则`:此处指定以下规则 1. 数据采集规则:所要采集的数据匹配规则,如果指定了`区域规则`则在该区域内进行查找 2. 数据保存变量名:指定数据保存到哪个变量里 3. 数据过滤器和验证器:多个过滤器或验证器之间用管道符“|”分隔,以下划线“_”开头的为验证器(不符合验证器规则的数据会被跳过) 然后可以点击“添加下一级页面”链接来对添加第二级页面的规则。页面的层级数量没有限制。 ![添加采集规则](/api/file/getImage?fileId=5cd1a22504aa045d8a00018c) ![添加采集规则2](/api/file/getImage?fileId=5cd1a22504aa045d8a00018b) #### 2. 测试采集规则 点击“测试”按钮可以进行采集测试,为了快速获取测试结果,每一级页面只采集一条 ![测试采集](/api/file/getImage?fileId=5cd1a4d304aa045d8a00018d) ![测试采集](/api/file/getImage?fileId=5cd1a4d304aa045d8a00018e) #### 3. 执行采集 点击“采集”按钮进行手动采集 ![采集](/api/file/getImage?fileId=5cd1a52d04aa045d8a00018f) ![测试采集](/api/file/getImage?fileId=5cd1a52d04aa045d8a000190) #### 4. 将采集加入计划任务 也可以将采集任务加入到计划任务中,进行自动定时采集 #### 5. 添加导出规则 定义采集数据的导出方式。如果希望在采集的时候自动将采集到的数据导入其它系统,请在这里添加导出规则。 目前支持两种导出方式: 1、导入到数据库; 2、提交到API接口(将JSON数据POST提交到API接口) ### 五. 计划任务 crontab的完美替代,并采用了图形化配置界面,支持记录日志、发送错误报告邮件等 ![添加计划任务](/api/file/getImage?fileId=5cd1a5bd04aa045d8a000191) ![添加计划任务2](/api/file/getImage?fileId=5cd1a5bd04aa045d8a000192) ### 六. 离线下载 这里的离线下载支持并行下载。 对于需要很长时间才能下载完成的大文件,我们只需要建立一个离线下载任务并且启动,然后就可以关闭浏览器去做其它的事情了,Nging会自动在后台帮您下载。 ![离线下载](/api/file/getImage?fileId=5cd1a64d04aa045d8a000194) 管理离线下载的文件: ![管理离线下载的文件](/api/file/getImage?fileId=5cd1a64d04aa045d8a000193) ### 七. 数据库管理 #### 1. 管理MySQL 添加MySQL数据库账号: ![添加MySQL数据库账号](/api/file/getImage?fileId=5cd1a7d804aa045d8a000195) 连接MySQL服务器: ![管理MySQL](/api/file/getImage?fileId=5cd1a7d804aa045d8a000197) MySQL数据库: ![数据库列表](/api/file/getImage?fileId=5cd1a7d804aa045d8a000198) MySQL数据表: ![数据表](/api/file/getImage?fileId=5cd1a7d804aa045d8a000196) #### 2. 管理Redis 添加Redis服务器信息(如果没有为redis设置认证信息,用户名和密码留空): ![添加Redis服务器信息](/api/file/getImage?fileId=5cd1aa8904aa045d8a00019c) 连接Redis服务器: ![连接Redis服务器](/api/file/getImage?fileId=5cd1aa8904aa045d8a00019b) Redis信息: ![redis服务器信息](/api/file/getImage?fileId=5cd1aa8904aa045d8a00019a) 管理Redis数据: ![管理Redis数据](/api/file/getImage?fileId=5cd1aa8904aa045d8a000199) #### 3. MySQL表结构比较/同步 添加账号: ![添加账号](/api/file/getImage?fileId=5cd1ac2104aa045d8a00019d) 查看差异: ![预览](/api/file/getImage?fileId=5cd1ac2104aa045d8a0001a0) ![查看差异](/api/file/getImage?fileId=5cd1ac2104aa045d8a00019f) ![查看差异2](/api/file/getImage?fileId=5cd1ac2104aa045d8a00019e) ### 八. FRP内网穿透 当你想要将局域网内的电脑暴露到外网,以便于外网的用户也能访问到您的网站服务时,这时候就需要用到内网穿透。 内网穿透支持服务端模式和客户端模式,全图形化的配置界面让配置变得非常容易。 #### 1. 服务端模式: 添加服务端配置: ![添加服务端配置](/api/file/getImage?fileId=5cd1acec04aa045d8a0001a3) 服务端控制: ![服务端控制](/api/file/getImage?fileId=5cd1ad4a04aa045d8a0001a4) #### 2. 客户端模式: 添加客户端配置: ![添加客户端配置](/api/file/getImage?fileId=5cd1acec04aa045d8a0001a1) ![添加客户端配置2](/api/file/getImage?fileId=5cd1acec04aa045d8a0001a2) 要成功使用内网穿透功能,必须在局域网电脑上启动客户端模式,在提供外网的服务器或VPS上启动服务端模式。 ### 九. SSH管理 SSH管理功能实现了SSH的Web客户端管理功能,您可以在Nging网页上进行SSH命令行交互操作,也可以通过Nging以SFTP方式来进行文件的上传、下载、删除和编辑 #### 1. 添加SSH服务器账号 添加SSH服务器账号: ![添加SSH服务器账号](/api/file/getImage?fileId=5cd1b0cd04aa045d8a0001a9) #### 2. SSH管理 连接SSH服务器: ![连接SSH服务器](/api/file/getImage?fileId=5cd1b0cd04aa045d8a0001a8) 进入控制台 ![进入控制台](/api/file/getImage?fileId=5cd1b0cd04aa045d8a0001a7) #### 3. SFTP管理 连接SFTP: ![连接SFTP](/api/file/getImage?fileId=5cd1b0cd04aa045d8a0001a5) ![SFTP管理](/api/file/getImage?fileId=5cd1b0cd04aa045d8a0001a6) ## 结束语 Nging2相较于Nging1.x进行了相当大的改进,包括增加了几个重量级的新功能、提高了稳定性、降低了CPU占用、修复了界面细节上的bug、作为通用后台基础框架这个定位来进行的项目结构优化等等,欢迎使用最新版本。 注意:目前只支持安装到MySQL的Nging1.x无缝升级,暂不支持SQLite安装方式的升级(所以推荐安装到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`,在页面中配置数据库账号和管理员账号信息进行安装 - 第五步: 安装成功后会自动跳转到登录页面,使用安装时设置的管理员账号进行登录 ## Ⅳ、临时文件 规定:`./public/upload`中所有名称为”0“的子文件夹内保存的都是临时文件,可以定时清理 临时文件的产生场景举例: 我们要发布一篇新文章,在保存文章之前,会上传一些图片,此时这些图片是无主图片,会被保存到名称为”0“的临时文件夹中,同时我们根据上传接口返回的文件路径把它们记录到文章发布表单的字段中,当我们提交文章将其保存到数据库的时候,我们就要根据这些字段中保存的文件路径,将它们从0号文件夹中转移到正式文件夹中(我们使用当前文章的ID作为正式文件夹名) ```sh # 删除临时文件。 rm -rf ./comment/0/* rm -rf ./customer-avatar/0/* rm -rf ./user-avatar/0/* rm -rf ./pay-product/0/* rm -rf ./product-version/0/* rm -rf ./siteAnnouncement/0/* rm -rf ./news/0/* ``` 请注意,本系统的源代码基于AGPL协议发布,不管您使用本系统的完整代码还是部分代码,都请遵循AGPL协议。 > 如果需要更宽松的商业授权协议,请联系我购买授权。
Prev:
Seaweedfs 详细说明
Next:
Golang模板语法简明教程[新]
0
likes
428
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Table of content