HoshinoRei / l4d2server-docker

A dockerized Left 4 Dead 2 server
https://hub.docker.com/r/hoshinorei/l4d2server
MIT License
5 stars 1 forks source link

建议添加GitHub action定时自动构建镜像并上传docker hub #35

Closed yiksun closed 2 weeks ago

yiksun commented 1 month ago

利用GitHub的action定时构建功能,自动构建并推送镜像至DockerHub。 e.g. 每天2点UTC自动构建master Dockerfile

HoshinoRei commented 1 month ago

因为每次构建都要下载几 GB 的游戏文件并上传,所以我感觉有点浪费人家的资源,基于这个考量我才没有这么做。我更希望能有个方法,能检测游戏有新版本,并且能获取到新的版本号。如果你有思路,不妨告诉我,我可以添加这个功能。

yiksun commented 1 month ago

我有一个大概的方案, 需要:

  1. l4d2server 7x24开着 (防火墙可以不开);
  2. 同服务器上, 开启一个可以查看l4d2server最后几行日志的RestfulAPI接口, 并根据日志内容判断是否需要更新;
  3. GitHub Actions调用RestfulAPI接口, 根据返回值判断是否需要构建镜像.
  4. 流程图如下 无标题-2024-05-22-2241
  5. 需要完善的地方: 构建后怎么部署新的l4d2server, 以免重复构建
HoshinoRei commented 1 month ago

我有一个大概的方案, 需要:

  1. l4d2server 7x24开着 (防火墙可以不开);
  2. 同服务器上, 开启一个可以查看l4d2server最后几行日志的RestfulAPI接口, 并根据日志内容判断是否需要更新;
  3. GitHub Actions调用RestfulAPI接口, 根据返回值判断是否需要构建镜像.
  4. 流程图如下 无标题-2024-05-22-2241
  5. 需要完善的地方: 构建后怎么部署新的l4d2server, 以免重复构建

这个方案需要有一个服务器,我想不用服务器更好一点。而且只靠日志的最后几行就能判断是否有更新吗?如果一个服务器长期开着但没人玩,它应该只会一直保持那最后几行不动吧?

yiksun commented 1 month ago

我有一个大概的方案, 需要:

  1. l4d2server 7x24开着 (防火墙可以不开);
  2. 同服务器上, 开启一个可以查看l4d2server最后几行日志的RestfulAPI接口, 并根据日志内容判断是否需要更新;
  3. GitHub Actions调用RestfulAPI接口, 根据返回值判断是否需要构建镜像.
  4. 流程图如下 无标题-2024-05-22-2241
  5. 需要完善的地方: 构建后怎么部署新的l4d2server, 以免重复构建

这个方案需要有一个服务器,我想不用服务器更好一点。而且只靠日志的最后几行就能判断是否有更新吗?如果一个服务器长期开着但没人玩,它应该只会一直保持那最后几行不动吧?

服务器启动后, 实际上是通过SteamAPI连接到steam中心服务器, 当steam检测到有更新, 它就会推送给你的服务器, 此时服务器的log就会变成类似 "Your server needs to restart inorder to receive update" (具体消息忘记了, 大概是这么个意思), 此时客户端通过"connect xxx.xxx.xxx.xxx:xxxxx" 连接服务器会强制断开, 并告知服务器版本和客户端有差异.

HoshinoRei commented 1 month ago

我有一个大概的方案, 需要:

  1. l4d2server 7x24开着 (防火墙可以不开);
  2. 同服务器上, 开启一个可以查看l4d2server最后几行日志的RestfulAPI接口, 并根据日志内容判断是否需要更新;
  3. GitHub Actions调用RestfulAPI接口, 根据返回值判断是否需要构建镜像.
  4. 流程图如下 无标题-2024-05-22-2241
  5. 需要完善的地方: 构建后怎么部署新的l4d2server, 以免重复构建

这个方案需要有一个服务器,我想不用服务器更好一点。而且只靠日志的最后几行就能判断是否有更新吗?如果一个服务器长期开着但没人玩,它应该只会一直保持那最后几行不动吧?

服务器启动后, 实际上是通过SteamAPI连接到steam中心服务器, 当steam检测到有更新, 它就会推送给你的服务器, 此时服务器的log就会变成类似 "Your server needs to restart inorder to receive update" (具体消息忘记了, 大概是这么个意思), 此时客户端通过"connect xxx.xxx.xxx.xxx:xxxxx" 连接服务器会强制断开, 并告知服务器版本和客户端有差异.

今天刚刚看了一下好久没更新的服务器,它的日志是这些内容。不过需要自己搭建一个服务器才能更新有点不优雅,而且会产生花费。所以我找到一个 API,可以展示求生之路的更新,但是怎么通过 Github Action 检测是否有更新,我还没想到一个好办法,因为这要求存储最后一次更新的时间,也就是 API 返回的内容的 appnews.newsitems[0].date 的值。我不知道只靠 Github Action 能把它存在什么地方。

Connection to Steam servers successful.
   VAC secure mode is activated.
MasterRequestRestart
Your server needs to be restarted in order to receive the latest update.
MasterRequestRestart
Your server needs to be restarted in order to receive the latest update.
MasterRequestRestart
Your server needs to be restarted in order to receive the latest update.