小明无敌 发表于 2024-9-30 00:10

超简单通用云端更新软件,golang实现

本帖最后由 小明无敌 于 2024-9-30 00:19 编辑

**** Hidden Message *****超简单更新下载
首先需要一个服务器.linux window都可

我是/usr/local/update放在了这个目录当中.Update-linux 为蓝奏云下载的linux服务端.window同理
按照这个目录结构自己创建.

其中update放自己的软件.其中每个文件夹代表一个软件
比如你的软件叫星月

那么层级就是update/星月/你的执行文件
然后在星月文件夹下 创建一个ReleaseNote.txt.内容就是我这个附件
按照内容修改成自己的即可.有软件名称和软件公告和版本号

我这里使用的是1panel 进程守护.按照这样设置

然后网站.设置一个反向代{过}{滤}理.宝塔同理 如图设置.绑定好自己的域名

我这里是up

然后访问服务端的网站就是
up.你的域名.com/updateList/星月
就会返回云端的update目录下的星月文件夹下的内容转换为json.5分钟更新一次.


如图所示.
{"appList":{"fileName":"星月","ReleaseNote":{"appName":"星月","description":"俺只是个测试的软件公告.并无实际功能.不要下载我噢","version":"1.0.0"},"fileList":[{"path":"星月/DllInject.exe","name":"DllInject.exe","size":2686976,"sha256":"e220d39248024bbe54ffc1737b8924711b595cfe4301a72c1483be0522b1b843","downloadURL":"/download/aic5KurfTe_6klge68mwS"},{"path":"星月/b.txt","name":"b.txt","size":9,"sha256":"d2033138c3b3be1321ad29d0aff15a4b1b47934a2b91afcea6f59b96a9fed115","downloadURL":"/download/OYVf-9YUTiuQYRvlqYLGf"},{"path":"星月/data/client.dll","name":"client.dll","size":7253584,"sha256":"84986b784d7a263da991d3be04bbafa25e1669453b7b7ad6efdd0abc8547e9af","downloadURL":"/download/lPIQUmMqK5bivx-jY_Dcs"},{"path":"星月/data/sql.txt","name":"sql.txt","size":0,"sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","downloadURL":"/download/ncxcdaOYAYuhWiELEggsW"},{"path":"星月/dlc.rpf","name":"dlc.rpf","size":330106906,"sha256":"31062247e1a937813781f2a5eda1f8e7d0dc85bb218c01ee9d7a822af1508770","downloadURL":"/download/BpA7oKytOFfrWnzuefcgJ"},{"path":"星月/qqwry - 副本.exe","name":"qqwry - 副本.exe","size":25272339,"sha256":"830722bcb86593272040534f993d81bb426096c6adf2e46312e44c31a11745e3","downloadURL":"/download/dee655s51QpVvi7ywMxr4"},{"path":"星月/qqwry.dat","name":"qqwry.dat","size":25272339,"sha256":"830722bcb86593272040534f993d81bb426096c6adf2e46312e44c31a11745e3","downloadURL":"/download/mYobKWwQscilT-us0yrwi"}]},"ret":"ok"}
然后客户端的话.
云盘下载update.exe
命令行运行
update.exe -url=https://域名.com -name=星月
比如你的域名是baidu.服务端文件夹是AABBCC 那么运行命令就是
update.exe -url=https://baidu.com -name=AABBCC
注意 这个name也就是你服务端update下的文件夹的名称.你可以乱打
但是在服务端的你的软件 文件夹里面的ReleaseNote.txt 要设置成你的软件名称 这样客户端下载的时候就能正确解析你的软件列表

具体文件夹格式.可以参考蓝奏云里面我上传的源码.当中update里面有3个文件夹 也就是我的3个软件
并无实际功能.只做参考
.ignore是忽略列表.语法参考.gitignore
比如有些文件 不想被客户端下载到 比如数据库日志之类的
服务端 windows的话同理.绑定的端口是8090
可以直接ip:8090,或者使用别的cdn之类的 源机端口设为8090,然后开放端口是80,来绑定到域名上即可
客户端没写太多功能.现在只有检测sha256是否和服务端一致.和是否存在.
后续考虑增加自己设置直链.
服务端增加一个 选项.比如此文件客户端已经存在的话.就不进行下载,比如空数据库.第一次客户端不存在此文件的话 下载服务端的文件.客户端再运行的时候.如果sqlite 数据库已经存在的话.就不进行下载 和sha256判断.
如果 写界面 愿意一起开发的 可以写个更新下载的客户端.自己写的太丑了.




不负韶华 发表于 2024-9-30 09:24

小明无敌 发表于 2024-9-30 08:54
那如果进行强制更新的话.那就带来一个要求..客户端去哪里读取本机的版本号.每个人的软件名称.每个人判断 ...

本机的版本号可以读到呀,比如说app getPackageInfo, 其他的不管是写在配置文件也好,还是写在代码也好,总可以读到,服务端通常这类比较规范的返回是下面这样
```json
{
    "code": 200,
    "message": "成功",
    "data": {
      "version": "1.1.0",
      "url": "/app-latest.apk",
      "forceUpdate": false,
      "releaseNotes": "修复了一些已知问题,提升了性能。",
      "size": "15MB",
      "releaseDate": "2024-09-30",
      "isBeta": false
    }
}
``` ,强制更新是服务端进行返回的,程序员知道当前版本是否需要强制更新,比如说接口更改,接口版本升级之类的

不负韶华 发表于 2024-9-30 09:50

小明无敌 发表于 2024-9-30 09:29
那你写在配置文件.还有什么意义呢.客户可以随便改.那你写到代码.那每次更新 update也要更新?...

软件更新,版本号都要更新呀,看你写到哪,写到代码里肯定要更新那块的代码,这都是规范了,只要在企业做过开发,这都是约定俗成了,我说的配置文件是指代码里的配置文件,它可能是config.java,可能是config.go, 可能是一个interface 常量类,或者app的话再build.gradle, 是一个宽泛的概念,编译后用户是看不到的。我上面写的json也是我从多个项目里摘下来的,总结的。

freecat 发表于 2024-9-30 00:30

学习一下 谢谢了

xiangzz 发表于 2024-9-30 01:41

Linux   ubuntu如何批量下发和回收指定文件夹或文档??

小明无敌 发表于 2024-9-30 01:55

xiangzz 发表于 2024-9-30 01:41
Linux   ubuntu如何批量下发和回收指定文件夹或文档??

按图创建你的文件夹即可..update目录下 每个文件夹代表一个软件.再这个文件夹再直接把你的软件目录整体复制进去即可

yaoplee 发表于 2024-9-30 04:41

这个就方便了{:1_927:}

abs117 发表于 2024-9-30 04:49

感谢楼主分享,收藏备用

zlzx01 发表于 2024-9-30 08:31

必须回复可见,好的

soft43 发表于 2024-9-30 08:37

学习一下 谢谢

Kristine_He 发表于 2024-9-30 08:39

感谢分享,下载试试!

不负韶华 发表于 2024-9-30 08:42

还有是否强制更新,不过这东西也就是一个接口的事,10分钟就能写完
页: [1] 2 3 4
查看完整版本: 超简单通用云端更新软件,golang实现