# LightServer **Repository Path**: git.ZhouKeYong.net/light-server ## Basic Information - **Project Name**: LightServer - **Description**: light协议服务端,支持数种设备云端驱动,提供第三方接口和用户UI控制,轻量级部署。支持简单设备控制 ,和在线摄像头视频流。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2025-01-17 - **Last Updated**: 2025-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # light server ## 简介 可部署于公网或者局域网控制esp32 esp8266 设备的服务端软件,支持控制设备和esp32的视频转发,可供第三方调用。 * 目前支持 | 项目名 | 描述与链接 | 移动端web支持 | PC端web支持 | LightHandle协作支持 | Lighthandle单节点支持 | | ------------ | ------------------------------------------------------------ | ------------- | ----------- | ------------------------------------------------------------ | --------------------- | | quadruped | [esp8266四足机器人 ](https://gitcode.net/qq_26700087/quadruped) | ✔️ | ❌ | ❌ | ✔️ | | CamQuadruped | [esp32s3视频四足机器人 ](https://gitcode.net/qq_26700087/camquadruped) | ✔️ | ❌ | ❌ | ✔️ | | Esp32Camcar | [esp32视频小车](https://gitcode.net/qq_26700087/esp32camcar) | ✔️ | ❌ | ✔️[0.0.5.0]新增了认证机制,LightHandle暂未适配,请使用[0.0.4.5] | ✔️ | | lightcam | [esp32摄像头](https://gitcode.net/qq_26700087/lightcam) | ✔️ | ✔️ | ❌ | ❌ | 以上支持的设备只是说明界面进行了支持,但任何其他以LightClinet接入LightServer的设备 ,均可以利用LightServer提供的接口来控制设备,而无需通过界面操作。比如可以利用siri快捷指令,调用http来控制设备,或者在Minecraft游戏里面通过本人提供的paper插件来控制设备,而无需LightServer的界面支持。 * 相关项目 [light-mc我的世界1.19 paper服务端插件](https://gitcode.net/qq_26700087/light-mc) 用此调用设备,将红石信号与设备绑定,用于在游戏内控制现实世界的设备。 [Light Handle](https://gitcode.net/qq_26700087/light-handler) 为安卓app 。对于设备,Light Handle同样是light协议的server节点,支持局域网组播和热点方式被设备发现,支持同于Light Server的接入设备的接入,对于设备接口相同,也支持设备视频能力,可在户外以热点组建局域网来控制设备,与light Server场景有所区分。同时也可以请求接入LightServer的设备,通过LightServer转发控制和设备的视频。 ## 食用方式 下载[服务端 0.0.5.2发行版](https://gitcode.net/qq_26700087/light_server/uploads/d79686de7d7579d057040c9943680b5d/lightServer-0.0.5-SNAPSHOT.zip) 或者[0.1.0-beta]([udp接入 · 云逸之/LightServer - Gitee.com](https://gitee.com/yunyizhi/light-server/releases/tag/0.0.1-beta))后解压 需要安装对应操作系统的的jdk17 可以下载微软构建的[jdk17点此跳转](https://docs.microsoft.com/zh-cn/java/openjdk/download)包含linux windows 和其它操作系统 ### 在windows运行 windows用户需要修改bin目录下的run.bat ```bash set java="D:\Program Files\Microsoft\jdk-17.0.4.101-hotspot\bin\java" ``` 将java这个变量 指向自己pc安装的java17的bin路径下的java.exe文件,然后保存后双击run.bat运行。有时候可能会出现jar包名称不对的情况,就是可能是旧版本,注意脚本里面的.jar文件名是否和lib文件夹一致。 #### 在linuxs运行 如果装好了java 17默认带环境变量。解压好了之后执行bin目录下的run.sh即可。 如果是新开服务器,第一次安装,需要安装jre17或者jdk17 以及unzip或者其他可以解压zip的软件。 以ubuntu服务端举例 安装unzip jdk17 并启动服务。 ```shell sudo apt update sudo apt install unzip sudo apt install openjdk-17-jdk mkdir light mv lightServer-0.1.0-SNAPSHOT.zip light/ cd light unzip lightServer-0.1.0-SNAPSHOT.zip ./bin/run.sh ``` 安装完成JDK17或JRE17后默认在PATH中java为17版本就行。 当使用离线方式安装java,就是上传一个java17的压缩包手动解压后,可以手动设置PATH变量中默认的java为17版本的java,或者设置 JAVA_HOME变量未java17。 若不希望影响当前用户或者整个操作系统的环境变量,你可以在run.sh之前使用export命令设置,或者 将` light_profile.txt` 复制重命名为 `light_profile` 并在其中指定jdk17的路径,同时该文件可以指定数据库文件存放路径。 建议使用非root用户运行当前进程,使得万一被攻击的情况相对可控。当然你的服务器没有什么数据则随便。 建议新建目录 将压缩包复制进去,因为当前解压没有文件夹,使用unzip解压压缩包 进入 bin目录执行以下命令启动。 ```shell ./run.sh ``` **可以使用screen或者nohup 使其在后台运行。** #### 其它操作系统用户 其它操作系统用户 需要注意 执行路径在 app的根目录 java 命令 参数 : ` -Ddb.path=db -Djdk.crypto.KeyAgreement.legacyKDF=true -jar .\lib\light-web-0.1.0-SNAPSHOT.jar` 当然斜杠根据具体操作系统修改 。 #### 进入web web端口 8002。 本机运行则 http://127.0.0.1:8002 默认一个admin账号 默认密码为 admin@123。可以修改密码。 服务器上则 http://服务器公网ip:8002 或者将ip换成局域网中自己pc的ip。 目前许多设备仅仅支持移动端web,PC端暂无功能。如果需要pC端进入可以在开发者模式下切换。 移动端不支持设备账号和系统的用户管理功能,仅仅可以修改登录者密码。 ## 注意事项 正常的web服务建议配置ssl证书,本人不可能将证书内置于代码,或软件包发布,因为这样发布私钥随着软件包发布也就是泄露了,有了私钥一些场景就能轻松解密ssl包,当然有些场景解密会麻烦一些。可以学习如何使用springboot 配置ssl,最好是双向认证的那种。使用网关也是可以的。 建议使用非root用户运行当前进程,使得被攻击的情况相对可控。 有一定的加固,一些http和websocket层面的操作相关,使用了认证机制,有简单的防session劫持机制,使得未登录用户无法发起操作。一些敏感数据,使用了DH协商密钥后加密,但还是有很多未加密数据,通过网络抓包可以获取一定的数据。 视频服务目前是裸露的,直接访问或者抓包都是很容易拿到视频数据。后续考虑限制访问,但是防止抓包的操作需要加密,会让视频延时加大。 NBI也未加固,如果没有特别需求,可以防火墙内调用NBI,不要暴露在公网。 tcp设备接入的服务有一定鉴权机制,但未加密,不过密码不会泄露。 0.1.0-beta版本引入udp接入服务,增加了设备弱网下与服务端链路稳定性。 udp设备接入服务,鉴权也采用摘要认证,不会泄露密码。但通过设备通过nat时的需要通过心跳刷新nat,该报文未被鉴权,可能会存在重放攻击,暂未做防护。建议搭配安全组限制udp 8081端口的ip网段。 #### 打开安全组/防火墙 相关端口 目前需要安全组打开 TCP 8002 8003 8081, UDP 8004 详情见后文的端口说明。轻量应用服务器则是打开对应防火墙,如果同时安装其他防火墙,如宝塔面板的防火墙,也需要打开才能打通链路。 #### 限制ip以减少受攻击的可能 可以轻松掌握的安全加固方式就是,限制ip 可以限制成一个网段,或者一个ip就是你家宽带当前临时的公网ip,你可以使用家里的ip来进行控制。使用手机流量控制服务器,ip会随着基站的不同,以及基站自己ip的切换而变化,会相对麻烦一些,可以加成一个网段试试。 #### 构建方法 配置好node npm jdk17 maven 后,在light-server 文件夹 根pom目录 使用 mvn -Pec install进行全量构建。 -Pec 是启动ec这个profile 来调用npm构建web 。web构建一次之后不用重新构建的话,可以使用mvn install 即可。 #### 在idea上运行 如果需要在idea上运行。已内置两个运行配置,LightServerDev和LightServerRelease。 * LightServerDev LightServerDev表示以开发模式运行,会允许跨域访问,并直接放行http options操作,用于前端跨域前请求。 会添加一个启动参数 `-Dlight.server.CrossOrigin=true` * LightServerRelease LightServerRelease一般用于开发完成后验证非跨域场景是否正常使用,因为静态资源与npm运行的静态资源有所区别则需要验证是否被拦截。 ## 端口说明 | 协议 | 端口号 | 公网时是否需要防火墙放行 | 应用层协议 | 说明 | | ---- | ------ | ------------------------------------------------------------ | --------------- | ------------------------------------------------------------ | | tcp | 8002 | 是 | http/websocket | web服务端口 | | tcp | 8003 | 是 | http | 视频服务端口,用于web请求视频 | | tcp | 8081 | 是 | 本项目所谓light | tcp设备接入,和服务端回调设备与udp8081选其一即可 | | udp | 8081 | 是 | 本项目所谓light | udp设备接入,和服务端回调设备 | | udp | 8001 | 否 | - | 当在局域网使用的时候,此端口用于接收本机为热点情况下,来自设备的消息,用于设备发现的应答,在公网无需开启,可以将该服务禁用 | | udp | 8003 | 需要使用light handle从LightServer获取视频时需要打开,仅仅使用web操作则无需 | - | light handle以udp方式获取视频图片帧的端口 | | udp | 8004 | 是 | - | 设备推送摄像头图片帧端口 | | udp | 9000| 默认禁用,未监听 | - | p2p默认禁用,用于协助p2p通信,但由于现在大多数nat场景是对称型nat,特别是使用4G/5G上网的设备,该服务无法发挥作用,默认禁用。 | | udp | 8008| 需要light handle通过LightServer控制设备时,或者将其他第三方需要调用NBI的服务部署在防火墙之外时需要打开 | - | nbi接口,供三方服务调用的,低延时控制设备的通道。 |