写在前面

最近整理东西翻出了吃灰已久的斐讯N1盒子,想着总该让它做点正事。刚好我Steam库存里积压了很多游戏的集换式卡牌,每次用主力电脑挂卡既费电又不方便,于是决定把N1改造成一台24小时在线的Steam挂卡服务器。

这篇文章记录了整个折腾过程,包括系统选择、Docker部署、代理配置等踩坑经验,希望能给想用N1做类似事情的朋友一些参考。

一、设备与方案

硬件:斐讯N1盒子(2GB RAM + 8GB ROM)

方案思路

  • N1刷入iStoreOS系统(基于OpenWrt)
  • 在iStoreOS上通过Docker运行ArchiSteamFarm(ASF)
  • N1同时作为旁路由运行PassWall 2,为ASF提供网络代理

选择这个方案的原因是,N1的硬件配置虽然不高,但跑ASF这类轻量级服务绰绰有余。实测同时管理多个账号时,ASF内存占用仅在80-150MB左右,对N1的2GB内存来说毫无压力。

二、基础系统配置

2.1 刷入iStoreOS

我的N1之前已经刷过系统,所以这一步略过。如果你是首次刷机,可以参考相关教程将iStoreOS刷入N1的eMMC。

2.2 挂载Docker存储空间

iStoreOS默认的Docker存储路径在系统分区,空间有限。我单独划分了4.5GB给Docker,挂载在/emmc/docker

mkdir -p /emmc/docker

2.3 开启ZRAM

N1只有2GB物理内存,开启ZRAM能有效缓解内存压力。在iStoreOS的系统 -> 系统中找到ZRAM设置,填入1024(即1GB)。

注意:ZRAM超过物理内存一半会加重CPU负担,1GB是兼顾性能和安全的值。

三、部署ArchiSteamFarm

3.1 创建项目目录

# 创建项目主目录并进入
mkdir -p /emmc/docker/asf
cd /emmc/docker/asf

# 创建 ASF 所需的三个数据文件夹
mkdir -p config logs plugins

3.2 创建docker-compose.yml

version: "3.8"

services:
  asf:
    image: justarchi/archisteamfarm:latest
    container_name: asf
    restart: unless-stopped
    ports:
      - "1242:1242"
    volumes:
      - ./config:/app/config
      - ./logs:/app/logs
      - ./plugins:/app/plugins
    environment:
      - TZ=Asia/Shanghai

restart: unless-stoppedalways 更智能——手动停止后,系统重启不会再自动启动,更符合直觉。

3.3 配置IPC(Web界面)

/emmc/docker/asf/config目录下创建IPC.config

{
    "Kestrel": {
        "Endpoints": {
            "HTTP": {
                "Url": "http://*:1242"
            }
        }
    },
    "KnownNetworks": [
        "192.168.X.0/24"
    ]
}

192.168.X.0/24需要替换为你实际的内网网段。

3.4 配置ASF.json(访问密码)

config目录下创建ASF.json

{
    "IPCPassword": "你的强密码"
}

密码建议用大小写字母+数字+特殊字符组合,避免用123456这类弱密码。

3.5 启动容器

docker-compose up -d

启动后通过http://你的N1_IP:1242访问Web界面,输入密码即可管理。

四、从Windows迁移配置

如果你之前在Windows上用过ASF,可以直接把配置文件复制过来:

  1. 找到Windows ASF安装目录下的config文件夹
  2. 将所有文件复制到N1的/emmc/docker/asf/config/
  3. 重启容器即可

注意:Linux文件名区分大小写,确保文件名与Windows一致。

五、代理配置(关键点)

国内访问Steam服务器经常不稳定,必须让ASF走代理才能稳定工作。

特殊原因,这部分自行解决。

验证ASF是否成功走代理很简单:只要ASF能成功登录Steam,就说明代理配置生效了。

Successfully logged on as 你的steamid

六、踩坑记录与解决方案

6.1 时区问题

ASF日志显示的时间和实际时间对不上?这是Docker容器默认使用UTC时间导致的。在docker-compose.yml中添加TZ=Asia/Shanghai环境变量即可解决。

environment:
  - TZ=Asia/Shanghai

6.2 配置无效报错

错误信息:

The assembly architecture is not compatible with the current process architecture

这是ASF官方镜像同时包含了x64和ARM架构插件文件导致的。N1是ARM架构,加载x64插件时会有警告,但不影响核心挂卡功能,可以无视。

6.3 端口安全

ASF的Web界面(1242端口)默认只监听容器内部,通过"Url": "http://*:1242"开放后,需要确认:

  • iStoreOS默认禁止外部访问任意内网端口
  • 不要添加1242端口的端口转发规则
  • 确保KnownNetworks只包含你的内网网段

这样1242端口就只能在内网访问,外网无法触及。

6.4 内存占用

刚部署完时我一度担心内存占用:free -m显示已用75%。后来仔细一看:

Mem total: 1981856 KB (~1.89 GB)
Mem available: 520800 KB (~509 MB)
Swap used: 10 MB

available才是真正可用的空闲内存,509MB完全够用。ZRAM只用了10MB,说明物理内存充足。75%的占用包含了Linux主动占用的文件缓存,这是正常的资源利用策略。

七、最终效果

  • ✅ ASF Web界面可通过内网访问
  • ✅ 多个Steam账号成功登录
  • ✅ 自动检查并处理可掉落的卡牌
  • ✅ 24小时在线,无需手动干预
  • ✅ 内存状态健康,系统稳定运行

八、参考资料

结语

闲置的N1加上一套开源方案,就能变成一台低功耗、24小时在线的Steam挂卡服务器。整个过程虽然遇到了时区显示、日志时间对不上、代理验证等小波折,但最终都顺利解决了。

如果你手头也有闲置的N1或者其他ARM小盒子,不妨试试这套方案,让电子设备发挥余热。过程中遇到什么问题,欢迎在评论区交流讨论。