前一段时间看到有人问有没有反向 Server 酱,我发现我也挺需要的,最近两个月就动手写了一个。
它能通过微信公众号控制你的服务器,但不是直接控制的,为了安全,是在云端存储了消息,等着服务器上的 Agent 去拉取。这样同时也有了内网穿透的能力。
这样,就可以在服务号里通过简单的消息让服务器执行重启服务之类的动作。
我甚至把它集成到了我的某些服务里当成了一个业务控制台,体验也不错。
当然它也有正向 Server 酱的通知功能。
项目文档在: https://letserver.run
Github: https://github.com/hack-fan/skadi
当作控制台的公众号:
只写好了主要的功能和文档,其他的会根据大家的建议慢慢更新吧。
看 V 站看了很多年,每次有什么都先发这里,附带一个暗号吧,对着公众号说 v2ex 就可以增加两个 Agent 数量配额~
惨 APPEND 不能删除啊 忘记选md语法了
1
styang 2021-04-06 10:34:13 +08:00
看起来还可以
|
2
Sunyanzi 2021-04-06 10:49:37 +08:00
玩了半天 ... 很有趣 ... 比 ServerChan 更简单实用 ... 希望能坚持下去 ...
另外一些问题 ... 一是我同一个 job id 可以 fail 或 succeed 无数次 ... 这是有意设计为之的还是个 bug ..? 我感觉可以加个 proceed 作为中间态 ... 一旦到 fail 或 succeed 感觉 job 就能删了 ... 不然留着有啥用 ..? 另外 ... 两个消息通知接口 /agent/info 和 /agent/warning ... 显示的消息好像没区别 ... 那为啥分开咧 ..? |
3
tcfenix 2021-04-06 10:51:54 +08:00
老哥...你的.idea 冒出来了.,...处理一下
|
4
oldcai 2021-04-06 11:16:35 +08:00
挺有意思,给我了一些启发。
|
6
enotx 2021-04-06 11:36:29 +08:00
看上去很棒,马克一下回家试试
|
7
Muninn OP @Sunyanzi 可以 fail 多次是个 bug,谢谢。
历史 job 本来想提供 log 功能供回顾一下最近的。不过可以考虑默认删了,用户需要打开 log 再保留。 info 和 warning 的模版不一样,默认颜色也不一样~ 一个是蓝色的一个是红色的 |
8
Sunyanzi 2021-04-06 12:15:54 +08:00
@Muninn 其实微信的聊天窗口就是个简陋的 log ... 如果要做详细 ... 可以考虑比如只保留最近三个月 ...
但保留归保留 ... 「已完成」的状态还是不能更改的 ... 如果对已完成的任务执行 fail / succeed 可返 405 ... 同时强烈建议引入 proceed 态用于耗时操作的反馈 ... 否则现在只能调 /message/info 感觉不太对 ... 至于 info 和 warning 是我的问题了 ... 我是老版本微信 ... 包括 message 在内三种模板显示都没区别 ... 另发现的公号 bug ... plan 里面已有 agent 和最大 agent 数量显示颠倒了 ... 以及「每分钟最多发起一次查询」这句话感觉也有哪里不太对 ... 一来实测并没有这个限制 ... 二来这不是「最多」而是「必须」 ... 如果我不每分钟发起一次查询的话会离线的 ... 说到这个 ... 离线则不吃任务这事儿也怪怪的 ... 如果是我我会设计成离线状态吃且仅吃一个任务 ... 离线状态无未拉取任务正常提示等待拉取 ... 如果有未拉取任务则提示队列非空之类的 ... 不过这都是后话了 ... |
10
eason1874 2021-04-06 12:29:36 +08:00
不错。我也用企业微信+云函数+API 网关做了些简单的应用,可以在微信上查询和修改一些服务器配置。
挺好用的,缓解流量焦虑症尤其有效。 |
11
Muninn OP @Sunyanzi 谢谢反馈这么多。已完成的肯定不能更改的,这个会很快修复的。
proceed 的状态在服务端看来就是取走的状态。耗时我来统计一下吧,会显示在成功失败的反馈中。 plan 的文本确实错了~ 查询的 rate limit 因为是有 api 的怕有人自己写 Agent 的时候疯狂调用。 准备给普通版一分钟高级版做到三秒之类的。 但是我发现我会的 rate limit 是用 redis 实现的,而取 job 也只是一个 redis 操作,这时候 rate limit 消耗的资源不不 limit 还大…… 但是放在 web server 那一层又会误伤,所以还没想好。 离线是否接受任务我再想想,这个只是设定问题。 有的任务也许发起的人就想现在执行,过一阵等在线了取走执行也许会出事。感觉还是不接受比较好。 |
12
AkaGhost 2021-04-06 12:43:54 +08:00 via Android
有可能和其他人共享某些 agent 的控制权限吗,看了下文档貌似没有提及相关功能
|
13
ashuai 2021-04-06 12:50:00 +08:00
/plan
你可以创建 0 个 Agent,已经创建 3 个 /status 您的所有 Agent: 无 -。- |
14
Muninn OP @wyf001912hp 这个暂时不准备,后面会出一个用 企业微信 /dingding/飞书 /slack/team 任选的,那时候才支持共享之类的。 这个只准备给个人用~
|
15
ashuai 2021-04-06 12:51:59 +08:00
@wyf001912hp 这个想法不错。但貌似会有商业化的 bug
我邀来 10 个同事,每人 3 个,共 30 个,我们共享着玩 lol |
16
Sunyanzi 2021-04-06 13:09:03 +08:00
@Muninn 因为实际上同样的东西我好几年前就琢磨着要做来着 ... 但因为舍不得三百块一直就没做 ...
所以这些设计其实一直在我脑子里 ... 我甚至考虑了有用户量之后疯狂推广告养自己的可能性一类的 ... 跑题了 ... 关于 proceed 我想要实现的功能是针对一个任务可以推送多条文字消息 ... 和被取走还不太一样 ... 现在如果我取了不做或压根不取会产生自动超时 ... 而 proceed 状态实际上就是 cancel 掉这个超时 ... 说到底我想要实现的效果是可以不受模板消息六十分钟五条的限制给自己推送多条文本消息 ... 和现在 bug 中的 fail / succeed 行为类似 ... 即如果我有一个已被拉取处理状态标记为 proceed 的任务 ... 那么我在后续比较长一段时间里 ... 可以一直用同一个 job id 给自己发消息 ... 直到该任务标记完成为止 ... rate limit 这事情 ... 实际上是个「要不要为了可能存在的恶意用户增大所有人消耗」的问题 ... 我觉得可以先不做 ... 如果真的有人不以测试为目的高并发压机器的话再说 ... 感觉上应该不会 ... 至于离线任务 ... 现在的在线状态其实只能保证一分钟内 Agent 活过 ... 之后会不会取其实是不可控的 ... 而且如果对任务的时效性没有要求 ... 我大可以把一分钟拉一次改成三分钟拉一次 ... 避免超时还降低机器压力 ... 细想了想这种场景是存在的 ... 但如果要改的话涉及还挺多的 ... 对我而言不是刚需 ... 还是看你的计划啦 ... |
17
xushanli 2021-04-06 13:14:45 +08:00
Server 酱转型了吗
|
19
Muninn OP @Sunyanzi 持续发消息这个我理解你的意思了。
微信限制收到一句话最多回复 5 条。现在及时反馈 /取走 /结果 用了三条。 其实只剩两条额度了。 我可以考虑怎么节约一下,然后再允许发两条中间状态。 |
20
Sunyanzi 2021-04-06 14:04:12 +08:00
@Muninn 事实上不用节约的 ... 在我的测试里 ... 最多回复五条指的是「五条内容不一样的消息」 ...
连续且内容相同的消息可以疯狂回复 ... 不受这个限制 ... 再者说所有消息都有五条额度 ... 我可以随便发个不在命令列表里的消息 ... 接下来坐等收消息就好 ... 其实不需要为了这个功能改动太多 ... 只需要一个可以产生消息且不将任务标记完成的动作就好 ... 或者一个更简单的办法 ... 保留现在 bug 中的 fail / succeed 但改个消息内容改个名字 ... 就齐了 ... |
21
Muninn OP @Sunyanzi 应该是你测试的原因,我这报了不少错哈哈。我还真没硬尝试过微信文档中声明的限制,可如果一直发一样的消息又有什么意义呢?
其实我本来准备做个计数,优先使用客服消息发,没有额度了再用模版消息的。但是因为格式不统一不好表达没做。 下午我再加个利用客服消息回复的接口吧。 |
22
Sunyanzi 2021-04-06 15:15:54 +08:00
@Muninn 啊哈报错可能是因为我完成了好多次一个已经超时的任务名字叫「第四条」 ...
不过 API 表现上一切正常 ... 虽然确实已超时的任务不该可操作 ... 但我这边完全感知不到报错了 ... 一直发同样的消息意义在于时间 ... 比如消息文字 1 代表某个定时任务启动 ... 然后我预期每五分钟收到个 1 ... 消息的内容在这种时候其实不重要 ... 关键是在某个时间点上我只要收到消息就好 ... 这功能就拜托啦 ... |
23
emmettwoo 2021-04-06 16:09:00 +08:00
挺有意思的,已经在体验了。
另外,觉得 [快速开始] 的教程可以写得更直观易懂。 |
25
ysicing 2021-04-06 16:36:38 +08:00
期待文档嘿嘿
|
27
xia0chun 2021-04-06 17:04:56 +08:00
是穿越了吗?
文档页面的最后修订时间是 2021 年 5 月 4 日 |
29
Muninn OP @xia0chun 哇,你好细心。 真是很诡异呢。 我怀疑 github 的 ci 服务器表不对? 或者就是 hugo 的问题了。coding.net 的问题可能性更大。 我去看看有没有构建日志。
|
31
NewYear 2021-04-06 17:47:18 +08:00
目测不支持 Windows……
|
32
Muninn OP @NewYear 理论支持的
但是说实话还没想好在 windows 能干什么,我也没试过用 golang 能不能唤起 GUI 应用,所以在 release 里就没发布 windows 的。 其实只是几个 HTTP API 文档这两天很快就出来了…… 完了看着 api 自己随便用什么语言都能调用的。 |
33
MrWhite 2021-04-06 17:59:21 +08:00
|
34
Muninn OP |
35
wpyfawkes 2021-04-06 18:10:41 +08:00
名字来源是那个六星战神斯卡蒂么😆
|
37
NewYear 2021-04-06 18:26:30 +08:00
|
38
Muninn OP @NewYear 好的后面会考虑 windows 和 Mac 的。
我本来一开始做了 Mac 的,结果发现 MacOS 最新的版本里,连命令行程序都要用花钱的开发者账号签名。 我没有苹果开发者账号诶。Windows 做一个自启动服务应该挺简单的,确实可以用来看是否开机,然后关机,哈哈。 |
39
Sunyanzi 2021-04-06 18:44:02 +08:00
|
40
sicflre 2021-04-06 22:20:50 +08:00 via iPhone
虽然已经改行两年 但是看到这样和谐友好的交流氛围 属实让人动容 加油
|
41
pC0oc4EbCSsJUy4W 2021-04-07 01:18:57 +08:00
其实 telegram 更方便,二次开发,bot 控制,轮子也多,扩展性足够
|
42
Muninn OP @fatelight 几乎所有的 IM 都比微信开发起来方便呢 奈何微信有着人手一个不需要额外安装的优势。 后面会有一个版本支持其他的 IM 。
|
43
telami 2021-04-07 11:00:17 +08:00
有趣
|
44
Muninn OP 刚有同学触发了一个 bug,在添加 Agent 的时候,名字和别名都不能重复。发命令的时候用名字和别名都可以的。
但是我忘了翻译这个错误返回提示了,重复了会收到系统错误。 等稍后把 API 文档写完发布出来再修吧。 |
45
cheung 2021-04-07 12:32:28 +08:00
我竟然有个 server.run 域名!
|
46
Muninn OP @cheung 哇 这么厉害啊…… 我有个 server.fan 准备英文版用这个。
|
47
zhshch 2021-04-07 14:10:40 +08:00 via Android
这个……之前找反向 server 酱的人可能是我
|
49
easychen 2021-04-07 18:12:17 +08:00
|
50
Muninn OP @easychen 考虑过语音,现在语音识别很成熟。但是要用户写规则并不易用,就放弃了。
其实我觉得类似的项目 下发消息 最重要的是送达可靠性。国内厂商都给微信开绿灯,微信是最稳的。 上传消息最重要的是入口的便捷。 微信置顶服务号我觉得是最便捷的,只有在 Mac 客户端会被折叠…… 我手机上的 slack,企业微信,飞书,tg 放进白名单还是经常收不到消息。 |
51
Muninn OP @Sunyanzi Hello,你要的接口已经更新完成啦,在文档里找 text 关键字的几个接口。用户和 Agent 都可以发哦。不过你想要的功能也可以用 running 那个接口。
我自己做了测试,在公众号互动后,可以 48 小时内发送 20 条普通消息。 https://letserver.run/ref/ |
52
Sunyanzi 2021-04-08 17:20:25 +08:00
|
53
Muninn OP @Sunyanzi 放心吧 我自己一直要用的。而且我用 golang 特别不费服务器资源。 我的一大堆吃灰服务器永远也不会被这些小众项目用完的。
|
54
themiscloud 2021-04-08 20:35:18 +08:00
一站式无编程 IM 通知工具叮兔 https://ding.to 过来声援
|
55
Muninn OP |
56
themiscloud 2021-04-09 09:18:24 +08:00
@Muninn 确实,只能通过放弃差异化达到统一化。
|
57
bequt 2021-10-17 20:51:59 +08:00
我可以充钱吗, 喜欢 text 这种简洁模式, 但是每天配额太少了. 我想一次性发 100 条左右信息配额.有充钱资格么
|