写在前面
最近整理东西翻出了吃灰已久的斐讯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-stopped 比 always 更智能——手动停止后,系统重启不会再自动启动,更符合直觉。
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,可以直接把配置文件复制过来:
- 找到Windows ASF安装目录下的
config文件夹 - 将所有
文件复制到N1的/emmc/docker/asf/config/ - 重启容器即可
注意: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小盒子,不妨试试这套方案,让电子设备发挥余热。过程中遇到什么问题,欢迎在评论区交流讨论。