diff --git a/.gitignore b/.gitignore index 60a727db..993208fd 100644 --- a/.gitignore +++ b/.gitignore @@ -52,4 +52,6 @@ hs_err_pid* **/app-**.yml -**/memo/** \ No newline at end of file +**/memo/** + +neutrino-proxy-vuepress/deploy.sh \ No newline at end of file diff --git a/README.md b/README.md index 4f8ad428..664aff8f 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,9 @@ neutrino.proxy.client.license-key=b0a907332b474b25897c4dcb31fc7eb6 + + +

# ❤️ 感谢 diff --git a/assets/developer/tany.png b/assets/developer/tany.png new file mode 100644 index 00000000..5b04f55f Binary files /dev/null and b/assets/developer/tany.png differ diff --git a/docs/如何贡献.MD b/docs/如何贡献.MD new file mode 100644 index 00000000..46c8028c --- /dev/null +++ b/docs/如何贡献.MD @@ -0,0 +1,37 @@ +# 🎋代码分支说明 +- dev:常规开发分支,日常的开发、Bug修复、提交PR都在此分支 +- feature/xxx:特征分支,一些试验性开发、提交PR都在此分支,xxx可自行取一个有意义的名称 +- release/xxx:发行版分支,作为阶段性成果、重大更新的版本固化分支。受保护,不允许任何提交。 +- master:主分支,定期同步最新代码,目前仅支持本人(傲世孤尘/雨韵诗泽)提交。 + +# ✊贡献的方式 +包括,但不限于以下形式: +- 提交[issues](https://gitee.com/dromara/neutrino-proxy/issues) +- 参与[issues](https://gitee.com/dromara/neutrino-proxy/issues)解决的必要性、解决方案的讨论、给出建设性的意见 +- 领取[issues](https://gitee.com/dromara/neutrino-proxy/issues) 并完成开发、提交PR +- 为[本项目](https://gitee.com/dromara/neutrino-proxy)完善代码注释 +- 为[本项目](https://gitee.com/dromara/neutrino-proxy)增加测试代码 +- 为[本项目](https://gitee.com/dromara/neutrino-proxy)优化现有代码 +- 为[本项目](https://gitee.com/dromara/neutrino-proxy)优化操作体验 +- 通过公众号、博客、贴吧、论坛等形式分享/宣传中微子代理 +- 丰富项目文档,包括使用过程中踩过的坑、需要优化的点、具体问题的解决方法等 + +# 🧬贡献代码的步骤 +- 在Gitee上fork项目到自己的仓库 +- 将fork后的自己仓库的项目clone到本地 +- 拉取dev分支最新代码,并修改 +- commit并push到自己的仓库 +- 登录Gitee在的仓库上可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。 +- 等待合并 + +# 📐PR的规范 +> 你可能发现有的代码并不符合这个规范,但我们后续都会朝着这个方向迈进。后续我们会逐步全面规范化,请先保证新提交的代码满足以下要求: + +- 注释完备,尤其每个新增的方法应按照Java文档规范标明方法说明、参数说明、返回值说明等信息,必要时请添加单元测试,如果愿意,也可以加上你的大名。 +- 原则上,不允许自行添加第三方依赖库。若确有必要,请先和项目负责人沟通达成一致。 +- 对现有代码的优化,请在注释中说明原因。 +- 如果涉及到数据库的变更,则至少需要做到以下绩点: + - sqlite、mysql下均测试通过 + - 在`./neutrino-proxy-server/src/main/resource/sql`下维护更新对应的表结构sql文件 + - 对于新增的表,维护必要的初始化数据 + - 在对应的mysql、sqlite的update目录下,维护SQL变更记录,确保SQL执行测试通过 \ No newline at end of file diff --git a/docs/快速使用.MD b/docs/快速使用.MD new file mode 100644 index 00000000..386ff53e --- /dev/null +++ b/docs/快速使用.MD @@ -0,0 +1,79 @@ +# 1、部署服务端 +## 1.1、Docker一键部署 +### 使用默认sqlite数据库 +```shell +docker run -it -p 9000-9200:9000-9200/tcp -p 8888:8888 \ +-d --restart=always --name neutrino-proxy \ +registry.cn-hangzhou.aliyuncs.com/asgc/neutrino-proxy:1.7.1 +``` + +### 指定自己的mysql数据库 +- 在服务器上创建目录:/root/neutrino-proxy/config +- 在该目录下创建`app.yml`文本文件,并配置如下内容: +```yml +neutrino: + data: + db: + type: mysql + # 自己的数据库实例,创建一个空的名为'neutrino-proxy'的数据库即可,首次启动服务端会自动初始化 + url: jdbc:mysql://xxxx:3306/neutrino-proxy?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useAffectedRows=true&useSSL=false + driver-class: com.mysql.jdbc.Driver + # 数据库帐号 + username: xxx + # 数据库密码 + password: wHCvf3@hmw^D* +``` +- 然后执行如下命令: +```shell +docker run -it -p 9000-9200:9000-9200/tcp -p 8888:8888 \ +-v /root/neutrino-proxy/config:/root/neutrino-proxy/config \ +-d --restart=always --name neutrino \ +registry.cn-hangzhou.aliyuncs.com/asgc/neutrino-proxy:1.7.1 +``` + +## 1.2、使用jar包自行部署 +- 首先确保服务器上已安装java8运行环境 +- 打开[发行版页面](https://gitee.com/dromara/neutrino-proxy/releases),下载最新的release包:`neutrino-proxy-server.jar`、`neutrino-proxy-admin.zip` +- 在服务器上新建部署目录:`/work/projects/neutrino-proxy-server` +- 将` neutrino-proxy-server.jar`、`neutrino-proxy-admin.zip`上传至服务器部署目录。 +- 解压`neutrino-proxy-admin.zip`文件 +- 执行命令`java -jar neutrino-proxy-server.jar`启动服务端完成部署,默认使用sqlite数据库。 +- 若需要指定自己的mysql数据库,同样的需要在当前目录下新建`app.yml`文件,文件内容同上。执行命令`java -jar neutrino-proxy-server.jar config=app.yml`启动服务端完成部署 +- 可参照 https://gitee.com/dromara/neutrino-proxy/blob/master/bin/server_start.sh 使用shell脚本启动服务端。 + +# 2、管理后台配置 +- 服务端部署成功后,访问`http://{服务端IP}:8888`打开后台管理页面。 +- 使用默认的管理员帐号登录:admin/123456 +- 打开`代理配置>License管理`页面,可以看到系统已经自动为管理员初始化了一条License记录,复制该`LicenseKey`备用,后续客户端配置需要。 +- 打开`代理配置>端口映射`页面,可以看到系统已经自动为初始化了几条端口映射。可根据需要自行添加、修改。这里我们以`9101 -> 127.0.0.1:8080`映射为例 + +# 3、启动客户端 +- 首先确保本地已安装java8运行环境 +- 打开[发行版页面](https://gitee.com/dromara/neutrino-proxy/releases),下载最新的release包:`neutrino-proxy-client.jar` +- 在本地`neutrino-proxy-client.jar`同级别目录下新建`app.yml`文件,并配置如下内容: +```yml +neutrino: + proxy: + client: + # ssl证书密钥(使用jjar包内自带的证书,则此处无需修改) + key-store-password: 123456 + # ssl证书管理密钥(使用jjar包内自带的证书,则此处无需修改。自定义证书,则此处配置对应的路径) + jks-path: classpath:/test.jks + # 代理服务端IP + server-ip: localhost + # 代理服务端IP, 若是非ssl端口,则ssl-enable需要配置为false + server-port: 9002 + # 是否启用ssl + ssl-enable: true + # licenseKey,客户端凭证。此处需要配置刚刚从管理后台复制的LicenseKey + license-key: xxxx +``` +- 执行命令`java -jar neutrino-proxy-client.jar`启动客户端 +- 查看服务端License管理,刷新页面,对应的License在线状态为`在线`,则表明客户端已正常连接。 + +# 4、代理验证 +- 本地启动被代理服务,如:redis、本地web项目、本地mysql等等 +- 先确保本地能正常访问被代理服务,如果本地都不能访问,不用想代理更不可能!!! +- 通过服务端IP+9101(上面License配置的端口映射重的服务端端口)访问本地被代理服务 + +访问成功,至此首次完整的内网穿透体验完成。开源不易,请速至[Gitee仓库](https://gitee.com/dromara/neutrino-proxy)一键三连🤝 \ No newline at end of file diff --git a/docs/管理后台使用指南.MD b/docs/管理后台使用指南.MD new file mode 100644 index 00000000..b4762dbc --- /dev/null +++ b/docs/管理后台使用指南.MD @@ -0,0 +1,30 @@ +# 首页 +- License统计:统计License相关数量指标 +- 端口映射统计:统计端口映射相关数量指标 +- 今日流量:统计当天的服务端上行/下行流量数据 +- 流量汇总:统计所有(包含当天)的服务端上行/下行流量数据 +- 流量监控:按天统计最近15天(可能会动态调整)每天的上行流量、下行流量、汇总流量 + +# 代理配置 +- License管理:License是客户端连接服务端的唯一合法凭证。一个License同时只能被一个客户端使用,一个License可以维护多条端口映射 +- 端口映射:服务端IP+端口 -> 客户端IP+端口的四元组映射(因目前服务端单节点只有一个公网IP,所以不体现出来),是内网穿透的基本单元。 + +# 系统管理 +- 用户管理:支持多用户,一个用户可持有多个License。由于项目目前主推个人版,所以暂是没有权限这一套,管理员之外的所有用户都属于游客。对于绝大多数操作,游客仅有只读权限。 +- 端口池管理:用于统一管理服务器内网穿透端口,方便统一设置安全组。 +- 端口池分组:对端口池的一个分组。 + - 全局分组:该分组下的端口全局通用。 + - 用户分组:该分组下的端口由分组绑定的用户独占。 + - License分组:该分组下的端口由分组绑定的License独占。 +- 调度管理:维护服务端定时任务。方便开发、调试。正常使用时无需关心。 + +# 报表管理 +- 用户流量报表:基于用户维度的流量统计 +- License流量报表:基于License的流量统计 +- 用户流量月度明细:基于用户的流量月度统计 +- License流量月度明细:基于License的流量月度统计 + +# 日志管理 +- 调度日志:服务端定时任务执行日志 +- 登录日志:管理后端登录、退出登录的日志 +- 客户端连接日志:客户端连接、断开的日志 \ No newline at end of file diff --git a/neutrino-proxy-admin/build/webpack.base.conf.js b/neutrino-proxy-admin/build/webpack.base.conf.js index 97bc6e2b..bd1f81e0 100644 --- a/neutrino-proxy-admin/build/webpack.base.conf.js +++ b/neutrino-proxy-admin/build/webpack.base.conf.js @@ -40,7 +40,8 @@ module.exports = { }, module: { rules: [ - ...(config.dev.useEslint ? [createLintingRule()] : []), + // 关闭EsLint校验 + // ...(config.dev.useEslint ? [createLintingRule()] : []), { test: /\.vue$/, loader: 'vue-loader', diff --git a/neutrino-proxy-admin/config/dev.env.js b/neutrino-proxy-admin/config/dev.env.js index f812fea4..825a20c6 100644 --- a/neutrino-proxy-admin/config/dev.env.js +++ b/neutrino-proxy-admin/config/dev.env.js @@ -1,5 +1,7 @@ module.exports = { NODE_ENV: '"development"', ENV_CONFIG: '"dev"', - BASE_API: '"http://103.163.47.16:8888"' + BASE_API: '"http://103.163.47.16:8888"', + USER_NAME: '"visitor"', + USER_PWD: '"123456"' } diff --git a/neutrino-proxy-admin/src/lang/en.js b/neutrino-proxy-admin/src/lang/en.js index b243b0a5..46bfdb58 100644 --- a/neutrino-proxy-admin/src/lang/en.js +++ b/neutrino-proxy-admin/src/lang/en.js @@ -102,7 +102,8 @@ export default { draft: 'Draft', delete: 'Delete', cancel: 'Cancel', - confirm: 'Confirm' + confirm: 'Confirm', + portOrRange: 'example: 3306 or 1000-2000' }, errorLog: { tips: 'Please click the bug icon in the upper right corner', diff --git a/neutrino-proxy-admin/src/lang/zh.js b/neutrino-proxy-admin/src/lang/zh.js index b342fe7e..76286040 100644 --- a/neutrino-proxy-admin/src/lang/zh.js +++ b/neutrino-proxy-admin/src/lang/zh.js @@ -136,6 +136,7 @@ export default { enable: '启用', loginName: '登录名', port: '端口', + portOrRange: '端口或范围,如: 3306或1000-2000', licenseName: 'License名称', licenseKey: 'License Key', isOnline: '在线状态', diff --git a/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue b/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue index 37686327..d2d483fb 100644 --- a/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue +++ b/neutrino-proxy-admin/src/views/home/admin/components/DailyTrafficChart.vue @@ -5,7 +5,6 @@