linux/amd64 · linux/arm64 · 稳定版通道

上游一发新版,它自己就重建

asfcn-autobuild 是 ArchiSteamFarm + Caddy(Steam 社区反代)的多架构 Docker 镜像。它不靠容器内自我更新,而是由 GitHub Actions 定时轮询上游稳定版,有新版就自动重建并推送。

立刻用起来 查看源码
terminal
# 拉取(多架构镜像,amd64 / arm64 同一地址)
docker pull ghcr.io/dc1024/asfcn-autobuild:latest
2
架构 amd64 + arm64
2h
上游轮询间隔
stable
只跟稳定版
0
设备侧需维护脚本
design notes

更新交给构建,而不是运行时

常见做法是让容器里的 ASF 自己更新,运行期再去取新版本。这个镜像换了个位置:把版本更新放到镜像构建阶段 —— 基础镜像每次构建都取官方最新稳定版,容器只管跑,不操心升级。对应的取舍是下面四条。

构建期版本从哪来

CI 取官方最新稳定版作为基础镜像重建,更新发生在构建阶段,容器启动时就已经是新版。

运行时容器不做升级

容器内不跑版本自更新,也就不需要在运行期维护一条对外的更新链路。升级只需拉新镜像。

收益 1设备侧零维护

不必在每台机器上放升级脚本或定时任务,版本跟进全部在 CI 完成,各设备配置完全一致。

收益 2依赖面更小

Caddy 只反代 Steam 社区 / 商店 / API,不代理其它站点 —— 需要维护的外部地址更少,也更不容易被外部变动牵连。

how it works

每 2 小时一轮,有新版才动手

版本守卫让流水线只在「上游确实更新了」时才构建,既不空转消耗额度,也不会漏掉版本。

01

定时轮询上游

GitHub Actions 按 schedule 每 2 小时唤醒一次,向 GitHub API 查询 JustArchiNET/ArchiSteamFarm 的最新稳定版 tag。

02

版本守卫比对

拿上游 tag 和本仓库已有的 git tag asf-<版本> 比对。已经构建过就直接跳过,一次构建都不浪费。

03

多架构构建

确实有新版本时,用 QEMU + buildx 构建 linux/amd64 与 linux/arm64 两套镜像,基础镜像取官方最新稳定版。

04

推送 ghcr 并打标签

推送到 ghcr.io/dc1024/asfcn-autobuild,同时打上 :latest 与 :<ASF版本> 两个标签 —— 需要回滚时钉版本号即可。

05

记录版本 tag(兼作保活)

构建成功后打 asf-<版本> git tag。它既是下次的守卫依据,也让仓库保持活动状态 —— 规避 GitHub「60 天无活动自动停用 schedule」。

06

设备侧一条命令跟进

所有设备无需任何脚本或定时任务,需要时跑 docker compose pull && up -d 即可。

quick start

丢进 compose 就能跑

把镜像地址换成下面这行即可。多架构,同一份配置在 x86 与 ARM 设备上通用。

docker-compose.yml
services:
  asf:
    image: ghcr.io/dc1024/asfcn-autobuild:latest
    container_name: asf
    shm_size: 256mb
    ports:
      - 1242:1242   # ASF IPC / Web
      - 443:443     # Caddy(Steam 反代)
    volumes:
      - ./config:/app/config
      - ./logs:/app/logs
      - ./plugins:/app/plugins   # 只放第三方插件
      # ⚠️ 不要挂载 /asf
    restart: unless-stopped
升级(所有设备同一条命令)
docker compose pull && docker compose up -d
migrate

换设备,只搬一个 config 目录

logs/ 与 plugins/ 里没有账号状态,用不着搬。但 config 里有个容易忽略的细节,它决定新机要不要重新登录。

要这样bot.json + bot.db 一起搬

bot.db 里存着登录令牌。两个文件一起搬过去,ASF 在新机上直接登录,不必重新验证。

别这样只搬 bot.json

少了 .db,ASF 会重新走一遍登录,可能触发 Steam Guard / 邮件令牌,甚至要重新过 2FA。

迁移:旧机打包 → 新机解包
# 旧机:停容器,只打包 config
docker compose stop
tar -czf asf-config-$(date +%F).tar.gz -C /path/to/asf config

# 新机:解包后直接起
tar -xzf asf-config-*.tar.gz -C /path/to/asf
docker compose up -d

搬完在新机跑一次 verify.sh(下一节),确认 bot 已登录、反代通、没有重复插件报错。

self check

一分钟自检

仓库自带 verify.sh。在装了 docker 的宿主机、于 compose 文件所在目录执行,一条命令跑完 9 项,给出 PASS / FAIL 与退出码。

terminal
bash verify.sh
# 需要 sudo 的机器:
DOCKER="sudo docker" bash verify.sh
01
容器健康(running / healthy)
02
镜像地址是新的,并报出本次启动的 ASF 版本
03
有没有误挂 /asf
04
生效的 Caddyfile 是否健全:缺 header_up Host,或还留着 github 反代,都会报
05
插件有没有被重复放置
06
本次启动的 ERROR 数(按 boot 分口径)
07
bot 是否登录并开始挂卡
08
Steam 三个域名能否经反代连通
09
IPC 接口能否鉴权

退出码 0 = 全过,1 = 有未通过项 —— 方便接进你自己的巡检脚本。顺带一个容易踩的点:ASF 的 IPC 用 Authentication 请求头鉴权(值就是 IPCPassword),不是 HTTP Basic,用 curl -u 会稳定拿到 401。

features

为多设备、弱网络环境做的取舍

自动构建

核心特色。CI 定时轮询上游稳定版,有新版自动重建,滞后上界就是轮询间隔。

多架构

linux/amd64 与 linux/arm64 同一镜像地址,NAS、小主机、ARM 盒子共用一份配置。

版本守卫

没有新版本就不构建,省下 CI 额度;同时用 git tag 保活,schedule 不会被自动停用。

Steam 反代

保留原项目的 Steam 社区反代,并补上 header_up Host 以适配 Akamai 的 Host 校验,避免 bot 反复断连。

只跟稳定版

不追预发布,避免测试版带来的意外。对月更的稳定版而言,等于发布即跟进。

零设备侧维护

不需要在每台机器上放脚本、定时任务或更新逻辑,配置完全一致。

notes

四个容易踩的坑

⚠️ 别沿用老教程的 Caddyfile

老教程挂载的那份除了 Steam 反代,还带着三段 github.com / github.io / raw.githubusercontent.com 反代,本镜像不依赖它(版本走镜像层)。而且挂载的宿主文件会完全盖住镜像内置版本 —— 想改反代就改内置那份,或干脆不挂。

⚠️ 别挂载 /asf

宿主目录挂到 /asf 会盖住镜像里的新程序 —— 结果是「拉了新镜像也不更新」。旧配置里的这条挂载要删掉。

⚠️ plugins 卷只放第三方插件

官方插件镜像内自带。放重复副本会让 ASF 两个目录都扫,启动刷几百行重复报错(功能无损,但很吵)。

⚠️ ghcr 在海外

ghcr.io 国内多数线路可直连,但非绝对。若设备拉不动,配置 HTTP 代理,或改用国内镜像仓库地址。

links

相关链接