Docker 版部署教程
MSRPilot Docker 版(镜像 demonr/msrpilot-cn)面向 Linux 服务器、VPS 和 NAS,无需安装 Node.js 和桌面环境,通过内置的 Web 管理台在浏览器中完成账号管理、脚本配置、运行控制和日志查看,界面与 Windows 版一致。
Windows 桌面版的使用说明见 MSRPilot 使用指南。
两个版本的区别
| Windows 桌面版 | Docker 版 | |
|---|---|---|
| 运行环境 | Windows 10/11 + Node.js 24+ | 任意支持 Docker 的 Linux / NAS |
| 操作方式 | 桌面程序 | 浏览器访问 Web 管理台 |
| 定时运行 | 软件内设置(任务计划程序) | 内置 cron 调度器(CRON_SCHEDULES) |
| 授权 | 24 小时试用 + 授权码 | 24 小时试用 + 授权码 |
| 数据位置 | 程序目录(config.json、accounts.json、sessions/) | Docker 卷或宿主机目录(config/、sessions/、diagnostics/) |
安全提示
账号密码、TOTP 密钥、授权码和
.env文件都属于敏感数据。.env已默认权限600,请勿提交到公开平台;反馈问题时不要粘贴完整日志凭据。
开始前准备
- 一台可 24 小时运行的 Linux 服务器 / VPS / NAS;
- 已安装 Docker 和 Docker Compose v2(未安装时,一键安装脚本可自动安装 Docker);
- 可正常登录 Microsoft Rewards 的账号;
- 国内网络直连即可,脚本默认使用国内搜索源,无需配置代理。
方式一:一键安装(推荐)
SSH 登录服务器,执行:
bash <(curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/DemonRR/msrpilot-cn/master/install.sh)
脚本运行后还需从 GitHub 下载
compose.yaml和.env模板,直连失败会自动通过加速通道重试;加速节点不可用时可用MSRPILOT_GH_PROXY=<加速前缀>换一个前缀,或用MSRPILOT_COMPOSE_URL/MSRPILOT_ENV_URL直接指定完整下载链接。
脚本会自动完成:环境检查(可自动安装 Docker)→ 下载配置模板 → 交互式向导 → 拉取镜像 → 启动容器。
安装向导
- 选择安装方式:快速安装(推荐,其余全部默认)或自定义安装(定时 / 端口 / 通知 / 授权码逐步配置);
- 填写微软账号:两种方式都可留空,装完在管理台“账号管理”里添加;自定义安装支持账号 + TOTP 密钥,密码可留空走 token 登录;
- Web 管理台:设置端口(默认
3010)、是否仅本机访问;API_TOKEN建议自动生成; - 授权码:可留空先用 24 小时免费试用,稍后在
.env中补填; - PushPlus 通知:可选,任务完成后推送运行摘要到微信;
- 确认配置摘要后开始安装,完成后终端会显示管理台地址和
API_TOKEN。
安装向导输出示例(快速安装,填入一个账号):
欢迎使用 MSRPilot CN(Docker 版)安装向导
请选择安装方式:
1) 快速安装(推荐 · 默认配置 · 只需填一次账号)
2) 自定义安装(定时 / 端口 / 通知 / 授权码逐步配置)
3) 退出
请选择 [1]: 1
安装目录(存放配置与数据) [/root/msrpilot-cn]: /root/msrpilot-cn
微软账号邮箱(可留空,装完在管理台「账号管理」添加) []: you@example.com
该账号密码(可留空): ********
──────────────────────── 配置确认 ────────────────────────
安装方式 : 快速安装(其余全部使用默认配置)
安装目录 : /root/msrpilot-cn
时区 : Asia/Shanghai
运行时间表 : 30 7 * * *;30 15 * * *
启动即跑一次 : false
微软账号数量 : 1
账号 1 : you@example.com (密码已设置)
Web 管理台 : true
访问地址 : http://192.168.1.10:3010/
API_TOKEN : 8f14e45fceea167a5a36dedd4bea2543344d0a5b4f7d15e12fa4b1c2d3e5f607
授权码 : (空,使用 24 小时试用)
PushPlus 通知 : 未启用
──────────────────────────────────────────────────────────
确认无误,开始安装? [y]: y
安装完成时的输出示例:
[ OK ] 已下载 compose.yaml
[ OK ] 已下载 .env 模板(.env.example)
[ OK ] 配置就绪: compose.yaml + .env(权限 600)
[INFO] 拉取镜像 demonr/msrpilot-cn:latest(可能需要几分钟;国内网络慢可配置镜像加速)...
[INFO] 启动容器 ...
NAME STATUS PORTS
msrpilot-cn Up 3 seconds 0.0.0.0:3010->3010/tcp
[ OK ] 安装信息已保存: /root/msrpilot-cn/install-info.txt
[ OK ] MSRPilot CN 安装完成!
下一步:
1. 浏览器打开管理台 → 输入 API_TOKEN
2. 回到「数据概览」点「启动」,或等待定时自动运行
管理台: http://192.168.1.10:3010/
信息已存档: /root/msrpilot-cn/install-info.txt
安装信息(管理台地址、API_TOKEN、常用命令)会自动保存到安装目录下的 install-info.txt,默认安装目录为 ~/msrpilot-cn。
方式二:手动安装
不想使用一键脚本时,可手动准备两个文件:
- 下载 compose.yaml 和 env.example 放入同一目录;
env.example复制重命名为.env,至少填写:
# Web 管理台访问令牌(必填,务必使用强随机值)
API_TOKEN=强随机64位hex
# 授权码(留空 = 24 小时免费试用)
LICENSE_KEY=
# ── 账号(只透传前 2 个,更多账号在管理台「账号管理」添加)──
ACCOUNT_1_EMAIL=xxx@outlook.com
ACCOUNT_1_PASSWORD=xxxx
# ACCOUNT_1_TOTP_SECRET=开启2FA时填写
生成强随机 API_TOKEN:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# 没有 node 时可用: openssl rand -hex 32
- 按需修改
compose.yaml中的关键项:
| 变量 | 默认值 | 说明 |
|---|---|---|
CRON_SCHEDULES | '0 7 * * *;0 19 * * *' | 运行时间表,多个用英文分号分隔 |
RUN_ON_START | 'true' | 启动容器后是否立即跑一次任务 |
TZ | 'Asia/Shanghai' | 时区,影响 cron 触发时间 |
API_MODE | 注释状态 | 设为 'true' 开启 Web 管理台,并同时放开 ports: 3010 映射 |
LICENSE_KEY | 空 | 授权码,也可只在 .env 中填写 |
- 启动:
docker compose up -d
docker compose logs -f
日志中应看到授权检查信息(首次为“24 小时免费体验已开始”)和 cron 调度器启动信息。
Web 管理台
API_MODE=true 且开放 3010 端口后,浏览器打开:
http://服务器IP:3010/
首次打开会要求输入 API_TOKEN,令牌只保存在浏览器本地。

管理台与 Windows 版界面一致,常用页面:
| 页面 | 用途 |
|---|---|
| 数据概览 | 查看账号总积分、本次收益、运行状态,点击“启动/停止”控制任务 |
| 账号管理 | 添加、导入、启停账号(保存到 config/accounts.json,优先级高于 .env) |
| 脚本配置 | 任务开关、搜索行为、日志过滤、PushPlus 等通知配置,保存后下次运行生效 |
| 运行日志 | 实时查看运行日志 |
| 授权状态 | 查看当前授权/试用状态与机器码 |



务必设置强随机
API_TOKEN管理台可以控制任务运行并读取账号状态。使用弱令牌或空令牌时容器会拒绝启动;任何能访问该端口的人拿到令牌即可控制你的容器。不需要外网访问时,可在
compose.yaml中把端口绑定改为127.0.0.1:3010:3010仅本机访问。
授权
Docker 版与 Windows 版使用同一套授权体系。授权码遵循一机一码:激活时绑定当前设备的机器码,一个授权码供一台设备使用。
| 场景 | 操作 |
|---|---|
| 首次体验 | 无需配置,首次启动自动开始 24 小时免费试用 |
| 正式激活 | 在 .env 中填写 LICENSE_KEY=你的授权码,重启容器自动激活 |
| 查看状态 | 执行下方命令,或打开管理台“授权状态”页 |
docker exec msrpilot-cn node /usr/src/microsoft-rewards-script/scripts/docker/license_check.js status
机器码说明(一机一码)
- 物理机 / 常规 VPS(KVM):机器码取自宿主机硬件指纹(主板 UUID / 整机序列号),写在主板 SMBIOS 里——重装系统、删除数据卷、重建容器、修改 compose.yaml 都不会改变机器码,也没有手动指定的入口(防止轮换机器码刷试用)。
- 无硬件标识的环境(部分容器平台 / 虚拟机):按“config 卷持久化缓存 → 主机名指纹”的顺序取值;保持数据卷不删除,机器码就保持稳定。也可以用
LICENSE_MACHINE_CODE手动固定。 - 试用(24 小时)以服务器记录为准:删缓存、改本地文件、重建容器都无法重置;同一 IP 7 天内新建试用超过上限会被拒绝。
- 换机器 / 机器码变化导致授权失效时,在管理后台或客户端使用换绑功能把授权迁移到新机器码(每个授权码自带换绑次数)。

PushPlus 任务完成通知
Docker 版的 PushPlus 只在全部账号运行结束后推送一条运行摘要(新增积分、余额、失败情况),不推送过程日志。到 pushplus.plus 用微信登录即可获取 token。
配置位置任选其一:
- 一键安装向导中直接填写;
.env/compose.yaml中设置CONFIG_PUSHPLUS_ENABLED: 'true'和CONFIG_PUSHPLUS_TOKEN;- Web 管理台“脚本配置”中的 PushPlus 设置。
升级与数据
数据默认存放在命名卷 msrpilot_config / msrpilot_sessions / msrpilot_diagnostics(一键安装默认方式),升级镜像、重启容器都不会丢失。Linux 用户如需在宿主机直接管理文件,可按 compose.yaml 注释切换为 bind mount(./config、./sessions、./diagnostics)。
方式一:重新运行安装脚本
bash <(curl -fsSL https://gh-proxy.com/https://raw.githubusercontent.com/DemonRR/msrpilot-cn/master/install.sh)
检测到已有安装时会进入升级模式:拉取新镜像并重建容器,.env、config.json、accounts.json 全部保留。
方式二:手动升级
cd ~/msrpilot-cn # 进入 compose.yaml 所在目录
docker compose pull
docker compose up -d
升级完成的输出示例:
[INFO] 拉取新镜像 ...
[INFO] 重建容器 ...
NAME STATUS PORTS
msrpilot-cn Up 10 seconds 0.0.0.0:3010->3010/tcp
[ OK ] 升级完成。管理台: http://192.168.1.10:3010/
常见问题
镜像拉取失败 / 速度极慢
配置 Docker Hub 镜像加速后重试(已完成的下载会续传):
sudo tee /etc/docker/daemon.json <<'CFG'
{ "registry-mirrors": ["https://docker.1panel.live", "https://docker.m.daocloud.io"] }
CFG
sudo systemctl restart docker
提示“授权服务器响应签名校验失败”
授权服务器未部署签名密钥,或客户端连到了非官方服务器。确认 LICENSE_SERVER_URL(默认 https://msrm.xwx.ooo)指向官方地址;自建授权服务器的用户需按服务端说明部署 keys/license_signing.pem。
提示“该网络环境试用次数已达上限”
同一 IP 7 天内新建试用超过服务端上限。正式使用请设置 LICENSE_KEY 激活。
提示“无法连接授权服务器”
已激活的机器断网时不允许运行(有效期以服务端为准),恢复网络后重试即可。
管理台打开显示 401 / JSON
容器设置了 API_TOKEN,数据接口需要令牌。确认访问的是根路径 /,页面会自动弹出令牌输入框;输入 .env 中的 API_TOKEN 即可。
安装时没有添加账号,任务会运行吗
安装向导允许账号留空。没有账号时,定时触发不会产生有效运行;在管理台“账号管理”里添加账号并保存后,等下一次定时触发或在“数据概览”点击“启动”即可。
容器启动后没有立即跑任务
检查 RUN_ON_START 是否为 'false'(默认只按 cron 时间运行)。需要启动即跑一次时设为 'true',或在管理台“数据概览”点击“启动”。
修改配置后不生效
.env/compose.yaml修改后执行docker compose up -d重建容器;- 管理台“脚本配置”中修改的行为配置保存后下次运行即生效,无需重启容器。
激活时提示“授权码已绑定其他设备”
该授权码已绑定其他机器(一机一码)。在授权管理后台解绑 / 换绑后重新激活;或使用管理台内的自助换绑(有次数限制)。
获取支持
- 软件内:打开 Web 管理台或 Windows 版中的“在线留言”发起会话。
- 购买或续期:访问授权商城。
- Windows 版使用问题:参见 MSRPilot 使用指南。