From 9e4bae952fcc71f3f9cabf42c1621d04254f1ade Mon Sep 17 00:00:00 2001 From: wanghe-fit2cloud Date: Fri, 4 Aug 2023 14:52:07 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=E5=BA=94?= =?UTF-8?q?=E7=94=A8=20umami=20&&=20nps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/nps/0.26.16/conf/clients.json | 0 apps/nps/0.26.16/conf/hosts.json | 0 apps/nps/0.26.16/conf/multi_account.conf | 2 - apps/nps/0.26.16/conf/nps.conf | 85 -------------------- apps/nps/0.26.16/conf/server.key | 27 ------- apps/nps/0.26.16/conf/server.pem | 22 ------ apps/nps/0.26.16/conf/tasks.json | 0 apps/nps/0.26.16/data.yml | 96 ----------------------- apps/nps/0.26.16/docker-compose.yml | 33 -------- apps/nps/README.md | 82 ------------------- apps/nps/data.yml | 20 ----- apps/nps/logo.png | Bin 14080 -> 0 bytes apps/umami/2.4.1/data.yml | 47 ----------- apps/umami/2.4.1/docker-compose.yml | 19 ----- apps/umami/README.md | 16 ---- apps/umami/data.yml | 19 ----- apps/umami/logo.png | Bin 2523 -> 0 bytes 17 files changed, 468 deletions(-) delete mode 100644 apps/nps/0.26.16/conf/clients.json delete mode 100644 apps/nps/0.26.16/conf/hosts.json delete mode 100644 apps/nps/0.26.16/conf/multi_account.conf delete mode 100644 apps/nps/0.26.16/conf/nps.conf delete mode 100644 apps/nps/0.26.16/conf/server.key delete mode 100644 apps/nps/0.26.16/conf/server.pem delete mode 100644 apps/nps/0.26.16/conf/tasks.json delete mode 100755 apps/nps/0.26.16/data.yml delete mode 100644 apps/nps/0.26.16/docker-compose.yml delete mode 100644 apps/nps/README.md delete mode 100755 apps/nps/data.yml delete mode 100644 apps/nps/logo.png delete mode 100644 apps/umami/2.4.1/data.yml delete mode 100644 apps/umami/2.4.1/docker-compose.yml delete mode 100644 apps/umami/README.md delete mode 100644 apps/umami/data.yml delete mode 100644 apps/umami/logo.png diff --git a/apps/nps/0.26.16/conf/clients.json b/apps/nps/0.26.16/conf/clients.json deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/nps/0.26.16/conf/hosts.json b/apps/nps/0.26.16/conf/hosts.json deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/nps/0.26.16/conf/multi_account.conf b/apps/nps/0.26.16/conf/multi_account.conf deleted file mode 100644 index e3cd7926..00000000 --- a/apps/nps/0.26.16/conf/multi_account.conf +++ /dev/null @@ -1,2 +0,0 @@ -# key -> user | value -> pwd -npc=npc.pwd \ No newline at end of file diff --git a/apps/nps/0.26.16/conf/nps.conf b/apps/nps/0.26.16/conf/nps.conf deleted file mode 100644 index a6c2615e..00000000 --- a/apps/nps/0.26.16/conf/nps.conf +++ /dev/null @@ -1,85 +0,0 @@ -appname = nps -#Boot mode(dev|pro) -runmode = pro - -#HTTP(S) proxy port, no startup if empty -http_proxy_ip=${NPS_HTTP_PROXY_IP} -http_proxy_port=${NPS_HTTP_PROXY_PORT} -https_proxy_port=${NPS_HTTPS_PROXY_PORT} -https_just_proxy=true -#default https certificate setting -https_default_cert_file=server.pem -https_default_key_file=server.key - -##bridge -bridge_type=tcp -bridge_port=${NPS_BRIDGE_PORT} -bridge_ip=0.0.0.0 - -# Public password, which clients can use to connect to the server -# After the connection, the server will be able to open relevant ports and parse related domain names according to its own configuration file. -public_vkey=${NPS_PUBLIC_VKEY} - -#Traffic data persistence interval(minute) -#Ignorance means no persistence -#flow_store_interval=1 - -# log level LevelEmergency->0 LevelAlert->1 LevelCritical->2 LevelError->3 LevelWarning->4 LevelNotice->5 LevelInformational->6 LevelDebug->7 -log_level=7 -#log_path=nps.log - -#Whether to restrict IP access, true or false or ignore -#ip_limit=true - -#p2p -#p2p_ip=127.0.0.1 -#p2p_port=6000 - -#web -web_host=${NPS_WEB_HOST} -web_username=${NPS_WEB_USERNAME} -web_password=${NPS_WEB_PASSWORD} -web_port = ${NPS_WEB_PORT} -web_ip=0.0.0.0 -web_base_url= -web_open_ssl=${NPS_WEB_OPEN_SSL} -web_cert_file=${NPS_DEFAULT_CERT_FILE} -web_key_file=${NPS_DEFAULT_KEY_FILE} -# if web under proxy use sub path. like http://host/nps need this. -#web_base_url=/nps - -#Web API unauthenticated IP address(the len of auth_crypt_key must be 16) -#Remove comments if needed -#auth_key=test -auth_crypt_key =${NPS_AUTH_CRYPT_KEY} - -#allow_ports=9001-9009,10001,11000-12000 - -#Web management multi-user login -allow_user_login=false -allow_user_register=false -allow_user_change_username=false - - -#extension -allow_flow_limit=false -allow_rate_limit=false -allow_tunnel_num_limit=false -allow_local_proxy=false -allow_connection_num_limit=false -allow_multi_ip=false -system_info_display=false - -#cache -http_cache=false -http_cache_length=100 - -#get origin ip -http_add_origin_header=false - -#pprof debug options -#pprof_ip=0.0.0.0 -#pprof_port=9999 - -#client disconnect timeout -disconnect_timeout=60 diff --git a/apps/nps/0.26.16/conf/server.key b/apps/nps/0.26.16/conf/server.key deleted file mode 100644 index 570054af..00000000 --- a/apps/nps/0.26.16/conf/server.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA2MVLOHvgU8FCp6LgQrPfaWcGygrsRk7TL9hbT8MxbCRUSLV7 -Lbt3q5Knz8eTN4NWmwE6L5glOcH2x3Hnn+hPjbvgq35XBBIccAm0cYYKqoKkikeK -FZM0Gp/WhSrhJ4laTyQqyleIFKpwD9kHDiC/sxjGDhSFmHKhhAnsQIRm2tppFXX0 -aAMqJEm88jzk1BN2QtKjEAn1u8v1+QW1KP3WuzdXH4L7hhMll66/KIm6Hfs2FRHQ -pRUWqZeJY4q79NW5p5f+siGwOsGpxb/p11pM+0xnCH3UIFbm3zCTzP4sLvkfFGAe -yAHsAwmaP8dJxh40ej3NN8uNiNvt8nw2Vb/1LwIDAQABAoIBAD40x/RKoEKIyE8B -D6g0pB1EQo+CePFoN3SYewO1uR4WgtVmtxWVoa7r5BpdZGLe3uCWhpMX7z7W6bGs -f1LFQOckjkHIfMIfTGfecRjO5Yqu+Pbxtq+gUah+S/plJr3IzdC+SUVNvzBnBMeX -eU3Vmg2UQ2nQ+9GWu8D/c/vDwxx0X8oQ2G8QaxX0tUurlSMNA3M7xySwEvhx54fO -UrDF3Q4yF48eA4butxVLFWf3cnlY+nR8uYd2vKfmp689/8C6kkfoM9igB78e93sm -uDM2eRLm4kU5WLl301T42n6AF7w8J0MhLLVOIeLs4l5gZPa3uKvYFmuHQao7e/5R -U/jHKrECgYEA8alPXuxFSVOvdhIsSN//Frj9CdExVdYmaLkt/2LO4FMnOaWh1xh7 -5iCY1bJT8D9dhfbqRg3qW2oguZD8gu04R8fTRegQ89qmAIwsEYqVf9salR41lZU4 -Rc+5yc7O11WIe9Lzu+ONFBFkAh3UFMR4zVZ/JhKIG/P5Srm7SUdKW2cCgYEA5aHo -x2LR+yKhjkrBzHG3Qrfy1PtlYHjOpYYAKHQcBFuiG08W3CK/vkYl+mhv0uyhT7mn -q6NDqrpZPRnDlOoEqgRS1X/QWKN6Pgd4HNLIawvp0vK9jYXDPcAXFzVthXCIwFcn -3a3m4cHiuLdRNOHkydiHQyTOF6eEneN07TDvwvkCgYEApzOd1u9igPmFzQuF2GYi -+HXFnaU/nUQuDwcQ7EJRIKRn31raPxiRoQesty5LJU6yRp4wOYgnPliPi9Tk4TGA -XynC4/tMv2vorzhMxVY9Wdke602bhYNZC/RNd3O/aP2lEQdD3Bv04I2nxE8fDb9i -VbAjCRSJV83WDf2zt1+78sECgYEAzezjRiKdcZu9y0/I+WEk2cUCE/MaF2he0FsZ -uy1cjp/qAJltQ5452xUnK6cKWNlxU4CHF0mC/hC8xCldliZCZoEYE3PaUBLSJdwm -35o6tpxpZI3gZJCG5NJlIp/8BkVDrVC7ZHV17hAkFEf4n/bPaB8wNYtE8jt8luaK -TcarzGkCgYBn2alN0RLN2PHDurraFZB6GuCvh/arEjSCY3SDFQPF10CVjTDV7sx3 -eqJkwJ81syTmfJwZIceWbOFGgsuSx37UrQAVlHZSvzeqEg9dA5HqSoOACyidJI7j -RG2+HB+KpsIZjGgLrEM4i7VOpYUDRdaouIXngFq/t9HNT+MDck5/Lw== ------END RSA PRIVATE KEY----- diff --git a/apps/nps/0.26.16/conf/server.pem b/apps/nps/0.26.16/conf/server.pem deleted file mode 100644 index 7908eca5..00000000 --- a/apps/nps/0.26.16/conf/server.pem +++ /dev/null @@ -1,22 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIJAPXRSiP0Fs7sMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX -aWRnaXRzIFB0eSBMdGQwHhcNMTcxMTA3MDg1MzQ2WhcNMjcxMTA1MDg1MzQ2WjBF -MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50 -ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2MVLOHvgU8FCp6LgQrPfaWcGygrsRk7TL9hbT8MxbCRUSLV7Lbt3q5Kn -z8eTN4NWmwE6L5glOcH2x3Hnn+hPjbvgq35XBBIccAm0cYYKqoKkikeKFZM0Gp/W -hSrhJ4laTyQqyleIFKpwD9kHDiC/sxjGDhSFmHKhhAnsQIRm2tppFXX0aAMqJEm8 -8jzk1BN2QtKjEAn1u8v1+QW1KP3WuzdXH4L7hhMll66/KIm6Hfs2FRHQpRUWqZeJ -Y4q79NW5p5f+siGwOsGpxb/p11pM+0xnCH3UIFbm3zCTzP4sLvkfFGAeyAHsAwma -P8dJxh40ej3NN8uNiNvt8nw2Vb/1LwIDAQABo4GnMIGkMB0GA1UdDgQWBBQdPc0R -a8alY6Ab7voidkTGaH4PxzB1BgNVHSMEbjBsgBQdPc0Ra8alY6Ab7voidkTGaH4P -x6FJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNV -BAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAPXRSiP0Fs7sMAwGA1UdEwQF -MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAH1IZNkjuvt2nZPzXsuiVNyCE1vm346z -naE0Uzt3aseAN9m/iiB8mLz+ryvWc2aFMX5lTdsHdm2rqmqBCBXeRwTLf4OeHIju -ZQW6makWt6PxANEo6gbdPbQXbS420ssUhnR2irIH1SdI31iikVFPdiS0baRRE/gS -+440M1jOOOnKm0Qin92ejsshmji/0qaD2+6D5TNw4HmIZaFTBw+kfjxCL6trfeBn -4fT0RJ121V3G3+AtG5sWQ93B3pCg+jtD+fGKkNSLhphq84bD1Zv7l73QGOoylkEn -Sc0ajTLOXFBb83yRdlgV3Da95jH9rDZ4jSod48m+KemoZTDQw0vSwAU= ------END CERTIFICATE----- diff --git a/apps/nps/0.26.16/conf/tasks.json b/apps/nps/0.26.16/conf/tasks.json deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/nps/0.26.16/data.yml b/apps/nps/0.26.16/data.yml deleted file mode 100755 index 6753881c..00000000 --- a/apps/nps/0.26.16/data.yml +++ /dev/null @@ -1,96 +0,0 @@ -additionalProperties: - formFields: - - default: 8080 - envKey: PANEL_APP_PORT_HTTP - labelEn: Web Management Port - labelZh: web管理端口 - required: true - rule: paramPort - type: number - - default: 8024 - envKey: NPS_BRIDGE_PORT - labelEn: Server-Client Communication Port - labelZh: 服务端客户端通信端口 - required: true - rule: paramPort - type: number - - default: http://localhost:8080 - edit: true - envKey: NPS_WEB_HOST - labelEn: External URL(If the default address, please replace localhost with the current service IP) - labelZh: 外部访问地址(若默认地址请替换localhost为当前服务IP) - required: true - rule: paramExtUrl - type: text - - default: admin - envKey: NPS_WEB_USERNAME - labelEn: Web Interface Management Account - labelZh: web界面管理账号 - random: true - required: true - rule: paramCommon - type: text - - default: "123" - envKey: NPS_WEB_PASSWORD - labelEn: Web Interface Management Password - labelZh: web界面管理密码 - random: true - required: true - rule: paramComplexity - type: password - - default: "false" - envKey: NPS_WEB_OPEN_SSL - labelEn: Enable Https Access - labelZh: 开启Https访问 - required: true - rule: paramCommon - type: text - - default: 20100 - envKey: NPS_RANDOM_PORT_START - labelEn: Dynamic Port Range Start - labelZh: 动态端口范围开始 - required: true - rule: paramPort - type: number - - default: 20200 - envKey: NPS_RANDOM_PORT_END - labelEn: Dynamic Port Range End - labelZh: 动态端口范围结束 - required: true - rule: paramPort - type: number - - default: "123" - envKey: NPS_PUBLIC_VKEY - labelEn: Key When the Client Starts in Configuration File Mode - labelZh: 客户端以配置文件模式启动时的密钥 - required: true - rule: paramCommon - type: text - - default: "1234567812345678" - envKey: NPS_AUTH_CRYPT_KEY - labelEn: 16-bit AES Encryption Key - labelZh: 16位aes加密密钥 - required: true - rule: paramCommon - type: text - - default: 0.0.0.0 - envKey: NPS_HTTP_PROXY_IP - labelEn: Http Proxy IP - labelZh: 域名代理http代理监听地址 - required: false - rule: paramCommon - type: text - - default: 20080 - envKey: NPS_HTTP_PROXY_PORT - labelEn: Http Proxy Port - labelZh: 域名代理http代理监听端口 - required: false - rule: paramPort - type: number - - default: 20443 - envKey: NPS_HTTPS_PROXY_PORT - labelEn: Https Proxy Port - labelZh: 域名代理https代理监听端口 - required: false - rule: paramPort - type: number diff --git a/apps/nps/0.26.16/docker-compose.yml b/apps/nps/0.26.16/docker-compose.yml deleted file mode 100644 index 2fb29ab8..00000000 --- a/apps/nps/0.26.16/docker-compose.yml +++ /dev/null @@ -1,33 +0,0 @@ -version: '3' -services: - nps: - image: yisier1/nps:v0.26.16 - container_name: ${CONTAINER_NAME} - ports: - - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} - - ${NPS_BRIDGE_PORT}:${NPS_BRIDGE_PORT} - - ${NPS_HTTP_PROXY_PORT}:${NPS_HTTP_PROXY_PORT} - - ${NPS_HTTPS_PROXY_PORT}:${NPS_HTTPS_PROXY_PORT} - - ${NPS_RANDOM_PORT_START}-${NPS_RANDOM_PORT_END}:${NPS_RANDOM_PORT_START}-${NPS_RANDOM_PORT_END} - restart: always - volumes: - - ./conf:/conf - environment: - NPS_WEB_HOST: ${NPS_WEB_HOST} - NPS_WEB_PORT: ${PANEL_APP_PORT_HTTP} - NPS_WEB_USERNAME: ${NPS_WEB_USERNAME} - NPS_WEB_PASSWORD: ${NPS_WEB_PASSWORD} - NPS_WEB_OPEN_SSL: ${NPS_WEB_OPEN_SSL} - NPS_PUBLIC_VKEY: ${NPS_PUBLIC_VKEY} - NPS_BRIDGE_PORT: ${NPS_BRIDGE_PORT} - NPS_AUTH_CRYPT_KEY: ${NPS_AUTH_CRYPT_KEY} - NPS_HTTP_PROXY_IP: ${NPS_HTTP_PROXY_IP} - NPS_HTTP_PROXY_PORT: ${NPS_HTTP_PROXY_PORT} - NPS_HTTPS_PROXY_PORT: ${NPS_HTTPS_PROXY_PORT} - networks: - - 1panel-network - labels: - createdBy: "Apps" -networks: - 1panel-network: - external: true \ No newline at end of file diff --git a/apps/nps/README.md b/apps/nps/README.md deleted file mode 100644 index 1cbe46f1..00000000 --- a/apps/nps/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# nps - -nps是一款轻量级、高性能、功能强大的**内网穿透**代理服务器。目前支持**tcp、udp流量转发**,可支持任何**tcp、udp**上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还**支持内网http代理、内网socks5代理**、**p2p等**,并带有功能强大的web管理端。 - -## 背景 -![image](https://github.com/ehang-io/nps/blob/master/image/web.png?raw=true) - -1. 做微信公众号开发、小程序开发等----> 域名代理模式 - -2. 想在外网通过ssh连接内网的机器,做云服务器到内网服务器端口的映射,----> tcp代理模式 - -3. 在非内网环境下使用内网dns,或者需要通过udp访问内网机器等----> udp代理模式 - -4. 在外网使用HTTP代理访问内网站点----> http代理模式 - -5. 搭建一个内网穿透ss,在外网如同使用内网vpn一样访问内网资源或者设备----> socks5代理模式 -## 特点 -- 协议支持全面,兼容几乎所有常用协议,例如tcp、udp、http(s)、socks5、p2p、http代理... -- 全平台兼容(linux、windows、macos、群辉等),支持一键安装为系统服务 -- 控制全面,同时支持服务端和客户端控制 -- https集成,支持将后端代理和web服务转成https,同时支持多证书 -- 操作简单,只需简单的配置即可在web ui上完成其余操作 -- 展示信息全面,流量、系统信息、即时带宽、客户端版本等 -- 扩展功能强大,该有的都有了(缓存、压缩、加密、流量限制、带宽限制、端口复用等等) -- 域名解析具备自定义header、404页面配置、host修改、站点保护、URL路由、泛解析等功能 -- 服务端支持多用户和用户注册功能 - -**没找到你想要的功能?不要紧,点击[进入文档](https://ehang-io.github.io/nps)查找吧** -## 快速开始 - -### 安装 -> [releases](https://github.com/ehang-io/nps/releases) - -下载对应的系统版本即可,服务端和客户端是单独的 - -### 服务端启动 -下载完服务器压缩包后,解压,然后进入解压后的文件夹 - -- 执行安装命令 - -对于linux|darwin ```sudo ./nps install``` - -对于windows,管理员身份运行cmd,进入安装目录 ```nps.exe install``` - -- 默认端口 - -nps默认配置文件使用了80,443,8080,8024端口 - -80与443端口为域名解析模式默认端口 - -8080为web管理访问端口 - -8024为网桥端口,用于客户端与服务器通信 - -- 启动 - -对于linux|darwin ```sudo nps start``` - -对于windows,管理员身份运行cmd,进入程序目录 ```nps.exe start``` - -```安装后windows配置文件位于 C:\Program Files\nps,linux和darwin位于/etc/nps``` - -**如果发现没有启动成功,可以查看日志(Windows日志文件位于当前运行目录下,linux和darwin位于/var/log/nps.log)** -- 访问服务端ip:web服务端口(默认为8080) -- 使用用户名和密码登陆(默认admin/123,正式使用一定要更改) -- 创建客户端 - -### 客户端连接 -- 点击web管理中客户端前的+号,复制启动命令 -- 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用cmd执行 - -如果需要注册到系统服务可查看[注册到系统服务](https://ehang-io.github.io/nps/#/use?id=注册到系统服务) - -### 配置 -- 客户端连接后,在web中配置对应穿透服务即可 -- 更多高级用法见[完整文档](https://ehang-io.github.io/nps/) - -## 贡献 -- 如果遇到bug可以直接提交至dev分支 -- 使用遇到问题可以通过issues反馈 -- 项目处于开发阶段,还有很多待完善的地方,如果可以贡献代码,请提交 PR 至 dev 分支 -- 如果有新的功能特性反馈,可以通过issues或者qq群反馈 diff --git a/apps/nps/data.yml b/apps/nps/data.yml deleted file mode 100755 index a761257a..00000000 --- a/apps/nps/data.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: nps -tags: - - 工具 -title: 轻量级、高性能、功能强大的内网穿透代理服务器 -type: 工具 -description: 轻量级、高性能、功能强大的内网穿透代理服务器 -additionalProperties: - key: nps - name: nps - tags: - - Tool - shortDescZh: 轻量级、高性能、功能强大的内网穿透代理服务器 - shortDescEn: Lightweight, high-performance, powerful intranet penetration proxy server - type: tool - crossVersionUpdate: true - limit: 1 - recommend: 0 - website: https://ehang-io.github.io/nps - github: https://github.com/ehang-io/nps - document: https://ehang-io.github.io/nps diff --git a/apps/nps/logo.png b/apps/nps/logo.png deleted file mode 100644 index d993f11357ab53f76fa70da355af93925e60245a..0000000000000000000000000000000000000000 GIT binary patch literal 0 KcmV+b0RR6000031 literal 14080 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