i茅台自动预约:campus-imaotai 定时预约与 Docker 一键部署完整指南
【免费下载链接】campus-imaotaii茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法)项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai
campus-imaotai 是一个基于 Spring Boot 与 Vue 的 i茅台自动预约系统:它把"每天 9 点准时抢购"这件重复劳动交给定时任务执行,并提供 Web 后台管理用户、门店与日志。阅读本文,你可以在一台普通服务器上完成部署,并跑通一次完整的预约流程。
🧭 项目定位与适用人群:它是什么,适合谁
campus-imaotai 的核心是一个后台定时任务系统,外加一套管理后台。后端基于 Java 的 Spring 调度框架,按固定时间表自动执行数据刷新、批量预约、领取奖励和结果查询;前端基于 Vue 的管理界面负责录入账号、维护商品与门店、查看执行日志。整个应用镜像化后,配合 Docker Compose 一次拉起 MySQL、Redis、Nginx 和后端服务。
它比较适合两类人:一是有一定 Linux 和 Docker 基础、想自己搭建一套定时抢购工具的个人用户;二是想研究"定时任务 + 批量账号 + 消息推送"这类通用架构的开发者,项目分层清晰,业务模块(campus-modular)与基础框架(campus-framework、campus-common)解耦,便于阅读和改造。
它不适合两类人。第一类是希望"部署后保证抢中"的用户:作者明确声明本项目使用已淘汰的算法,不提供成品,预约结果受官方接口变动和竞争环境影响,请将其视为学习与研究项目。第二类是完全没有命令行操作经验的用户,因为首次使用需要导入 SQL、抓取并填写 i茅台的登录凭证(token、cookie),这些步骤无法通过图形界面绕过。
🐳 环境准备与部署:最简部署命令
硬件方面:内存 2GB 起步(建议 4GB),20GB 可用磁盘,稳定的外网连接即可,对 CPU 没有特殊要求。
软件方面只有三件事:
- 安装 Docker 与 Docker Compose;
- 服务器能访问外网(拉取 mysql、redis、nginx 镜像);
- 一台运行 i茅台 APP 的手机,用于获取账号凭证。
克隆仓库并启动全部服务:
git clone https://gitcode.com/GitHub_Trending/ca/campus-imaotai cd campus-imaotai/doc/docker docker-compose up -d启动后建议做两项验证。第一,查看容器状态,四个服务应均为 Up:
docker-compose ps第二,确认后端接口已就绪(Nginx 将 80 端口反代到应用 8160 端口,见 Nginx 配置):
curl -I http://localhost:8160数据库初始化脚本在 doc/sql/campus_imaotai-1.0.5.sql,需要导入 docker-compose 中创建的 campus_imaotai 库,方法见下一节。注意 docker-compose.yml 使用 host 网络模式并挂载了 /docker 下的固定目录,若你的挂载路径不同,需先调整后再启动。
🚀 首次使用:从登录到跑通一次预约
第一步:初始化数据库。用 root(默认密码 123456789)进入 MySQL,创建并导入表结构:
docker exec -i mysql mysql -uroot -p123456789 < doc/sql/campus_imaotai-1.0.5.sql第二步:登录管理后台。浏览器访问http://服务器IP(即 Nginx 的 80 端口),使用 SQL 内置的管理员账号(admin)登录,登录页会要求输入图形验证码。
第三步:录入预约账号。进入"茅台管理 → 用户管理",添加一个 i茅台账号,需要填写的字段与含义如下:手机号(作为账号唯一标识)、用户ID、token、cookie、设备ID(后三项从 i茅台 APP 的登录接口响应中抓取,项目文档有说明);预约执行分钟(9 点第几分钟执行,取值 1-59);随机时间开关(打开后该账号在 9 点窗口内被分配一个随机分钟,避免所有账号同刻请求);门店类型(1 为本市出货量最大的门店,2 为位置附近门店);商品预约 code(多个商品用 @ 间隔)。
第四步:触发核心功能。预约无需手动点击——9 点的批量预约由系统自动执行。你唯一要做的是确认当天配置无误,然后在 9 点之后到"日志"页面查看该账号的执行记录(成功、异常状态均有标记);若配置了 PushPlus 推送 token,结果也会推送到微信。
第五步:查看结果。每天 18:05 系统自动拉取申购结果,日志页会更新当天各账号的最终状态;门店维度可在"门店管理"中按省份、城市、商品筛选核对。
⚙️ 关键机制说明:调度表与批量并发是怎么跑的
它做什么:保证每天在正确的时间点,对每个账号自动执行正确的动作。如何工作:全部时间表集中在 CampusIMTTask 中,由 Spring 的 @Scheduled 驱动:凌晨 1:10 批量重算各账号的随机预约分钟;7:10、7:55、8:10、8:55 四个时间点刷新商品版本号和门店列表,保证 9 点时9 点用的是最新数据;9 点期间每分钟轮询执行一次批量预约;11 点期间每分钟领取一次旅行奖励;18:05 拉取申购结果。每个任务都标记 @Async,即在独立线程池执行,不互相阻塞。对你意味着什么:你不需要也不应该手动"启动"预约,要调整预约时间只能通过修改账号的分钟字段;同时意味着服务器时钟必须准确——所有 cron 依赖宿主机系统时间,时间偏差会直接导致错过窗口。
它做什么(第二机制):多账号互不干扰地并发预约。如何工作:账号以数据库记录为单位,批量任务逐个账号读取配置、独立发起请求,单个账号 token 失效或请求失败不影响其余账号执行。对你意味着什么:添加账号即扩容,无需重启;出问题时可先在日志页按账号定位,再单独修复该账号的凭证。
⚙️ 影响结果的配置项
| 参数 | 作用 | 建议值 |
|---|---|---|
| minute(预约执行分钟) | 决定 9 点后第几分钟发起预约,取值 1-59 | 5,与官方放量节奏常见说法保持一致 |
| randomMinute(随机时间) | 0 为不随机、1 为在 9 点窗口内随机分配分钟,用于打散多账号请求 | 多账号时建议开启 |
| shopType(门店类型) | 1 选本市出货量最大的门店,2 选位置附近门店 | 按取酒便利性二选一 |
| itemCode(商品 code) | 指定要预约的商品,多个商品用 @ 间隔 | 填实际商品编码 |
| pushPlusToken(推送 token) | 预约结果通过 PushPlus 推送到微信 | 需要消息提醒时必填 |
账号凭证的有效期由 expireTime 标记,过期后预约必然失败,需要重新抓取(见下方常见问题)。
🛠️ 常见问题排查
现象:docker-compose up -d报端口占用或 Nginx 启动失败。原因:compose 文件采用 host 网络模式,容器直接占用宿主机的 3306、6379、80 端口,本机已有服务时会产生冲突。解决:停掉宿主机的对应服务,或修改 compose 中相应服务的 network_mode 与端口后重启容器。
现象:后端能启动,但页面接口全部 500 或数据库连接报错。原因:未导入初始化 SQL,campus_imaotai 库缺少表结构。解决:执行上一节的导入命令,确认i_user、i_shop、i_item、i_log等表存在后刷新页面。
现象:日志页显示预约异常,或所有请求返回未登录。原因:账号的 token/cookie 已过期(凭证有效期约 30 天,见 expireTime 字段)。解决:重新登录 i茅台 APP,从接口响应中抓取新的 token、cookie 和设备 ID,更新到对应用户记录。
现象:9 点任务照常执行,但完全没有预约记录产生。原因:服务器时间与标准时间偏差较大,任务窗口与官方放量时间错开。解决:同步宿主机系统时间(如ntpdate或 chrony),并确认容器内 TZ 为 Asia/Shanghai。
现象:预约结束没有收到微信推送。原因:账号未填写 pushPlusToken,或该 token 已失效。解决:在用户管理中补填有效的 PushPlus token 后重新观察次日结果。
现象:门店列表为空或筛选不到目标城市。原因:7 点的数据刷新任务未成功执行(依赖接口可用性与网络)。解决:查看日志中"刷新数据"相关记录,网络恢复后任务会在下一个刷新点(7:10/7:55/8:10/8:55)自动补齐,无需手动干预。
结语
campus-imaotai 的价值在于把 i茅台每日预约拆成了"调度表、账号池、日志审计、结果推送"四个可维护的部件,部署与阅读门槛都不高。更多字段说明和演示视频可参考项目 README 中列出的官方文档,遇到 BUG 或有改进想法,欢迎通过 Pull Request 提交到 master 分支参与贡献。
【免费下载链接】campus-imaotaii茅台app自动预约,每日自动预约,支持docker一键部署(本项目不提供成品,使用的是已淘汰的算法)项目地址: https://gitcode.com/GitHub_Trending/ca/campus-imaotai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考