群晖Docker安装12306自动购票助手
群晖Docker安装12306自动购票助手
项目介绍
py12306是Github的一个开源项目,主要功能就是12306自动购票助手,支持集群部署,支持多账号、多任务购票,而且还有Web管理界面,非常人性化。
官方的Docker镜像似乎跑不起来了了,所以使用第三方打包镜像,名称为fooololo/py12306。
py12306功能简介
支持多日期查询余票
自动打码下单
用户状态恢复
电话语音通知
多账号、多任务、多线程支持、支持扫描登录
单个任务多站点查询
支持集群部署、分布式运行
支持Docker安装
支持动态修改配置文件
支持邮件、Bark、钉钉、电报、微信消息等通知方式
友好的Web管理页面
代理池支持 (画饼状态😂)
安装教程
创建所需文件夹
打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。
进入群晖的docker文件夹(你想把配置文件和数据存在哪里就进入哪个文件夹)。
cd /volume1/docker
创建py12306所需文件夹
root@NAS:/volume1/docker# mkdir py12306 #创建py12306文件夹 root@NAS:/volume1/docker# cd py12306 #进入py12306文件夹 root@NAS:/volume1/docker/py12306# mkdir config data #创建config配置文件夹、data数据文件夹 root@NAS:/volume1/docker/py12306# ls #列出当前目录的文件 config data root@NAS:/volume1/docker/py12306#
进入config文件夹
cd config
创建配置文件
编辑配置文件
vi env.py
按字母 i 键进入编辑模式,修改为你自己的信息后复制下面的命令,粘贴到终端,按Esc键退出编辑模式,输入:wq保存并退出。
# -*- coding: utf-8 -*- # 12306 账号 USER_ACCOUNTS = [ # 目前已支持仅查询,不下单,屏蔽掉下面的账号即可 { 'key': 0, # 如使用多个账号 key 不能重复 'user_name': '12306账号', 'password': '忽略', 'type': 'qr' # qr 为扫码登录,填写其他为密码登录 }, # { # 'key': 'wangwu', # 'user_name': 'wangwu@qq.com', #这是演示例子 # 'password': 'wangwu', # 'type': '' # } ] # 查询间隔(指每一个任务中每一个日期的间隔 / 单位秒) # 默认取间隔/2 到 间隔之间的随机数 如设置为 1 间隔则为 0.5 ~ 1 之间的随机数 # 接受字典形式 格式: {'min': 0.5, 'max': 1} QUERY_INTERVAL = 1 # 网络请求重试次数 REQUEST_MAX_RETRY = 5 # 用户心跳检测间隔 格式同上 USER_HEARTBEAT_INTERVAL = 120 # 多线程查询 QUERY_JOB_THREAD_ENABLED = 0 # 是否开启多线程查询,开启后第个任务会单独分配线程处理 # 打码平台账号 # 目前只支持免费打码接口 和 若快打码,注册地址:http://www.ruokuai.com/login AUTO_CODE_PLATFORM = 'free' # 免费填写 free 若快 ruokuai # 免费打码无法保证持续可用,如失效请手动切换; 个人打码填写 user 并修改API_USER_CODE_QCR_API 为自己地址 API_USER_CODE_QCR_API = '' AUTO_CODE_ACCOUNT = { # 使用 free 可用省略 'user': 'your user name', 'pwd': 'your password' } # 语音验证码 # 没找到比较好用的,现在用的这个是阿里云 API 市场上的,基本满足要求,价格也便宜 # 购买成功后到控制台找到 APPCODE 放在下面就可以了 # 地址:易源 https://market.aliyun.com/products/57126001/cmapi019902.html # 2019-01-18 更新 # 增加新的服务商 鼎信 https://market.aliyun.com/products/56928004/cmapi026600.html?spm=5176.2020520132.101.2.e27e7218KQttQS NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音通知 NOTIFICATION_VOICE_CODE_TYPE = 'dingxin' # 语音验证码服务商 可用项 dingxin yiyuan NOTIFICATION_API_APP_CODE = 'your app code' NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号 # 钉钉通知 # 使用说明 https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1 DINGTALK_ENABLED = 0 DINGTALK_WEBHOOK = 'https://oapi.dingtalk.com/robot/send?access_token=your token' # Telegram消息推送 # 目前共有两个Bot: # 1:https://t.me/notificationme_bot # 2:https://t.me/RE_Link_Push_bot # 任选一个Bot,关注获取URL链接,如果没有回复则发送给Bot这条信息: /start # 将获取的URL填入下面对应位置 # 注意:因为以上Bot都由他人公益提供,无法保证随时可用,如以上Bot都无法使用,请使用其他消息推送方式 # Bot1来源:https://github.com/Fndroid/tg_push_bot # Bot2来源:https://szc.me/post/2.html TELEGRAM_ENABLED = 0 TELEGRAM_BOT_API_URL = 'https://tgbot.lbyczf.com/sendMessage/:your_token' # ServerChan 和 PushBear 微信消息推送 # 使用说明 # ServerChan http://sc.ftqq.com # PushBear http://pushbear.ftqq.com SERVERCHAN_ENABLED = 0 SERVERCHAN_KEY = '' PUSHBEAR_ENABLED = 0 PUSHBEAR_KEY = '' # Bark 推送到ios设备 # 参考 https://www.v2ex.com/t/467407 BARK_ENABLED = 0 BARK_PUSH_URL = 'https://api.day.app/:your_token' # 输出日志到文件 OUT_PUT_LOG_TO_FILE_ENABLED = 0 #0改成1是开启日志 OUT_PUT_LOG_TO_FILE_PATH = 'runtime/12306.log' # 日志目录 # 分布式集群配置 CLUSTER_ENABLED = 0 # 集群状态 NODE_IS_MASTER = 1 # 是否是主节点 同时只能启用 1 个主节点 NODE_SLAVE_CAN_BE_MASTER = 1 # 主节点宕机后,子节点是否可以自动提升为主节点(建议打开) NODE_NAME = 'master' # 节点名称,不能重复 REDIS_HOST = 'localhost' # Redis host REDIS_PORT = '6379' # Redis port REDIS_PASSWORD = '' # Redis 密码 没有可以留空 # 邮箱配置 EMAIL_ENABLED = 0 # 是否开启邮件通知 EMAIL_SENDER = 'sender@example.com' # 邮件发送者 EMAIL_RECEIVER = 'receiver@example.com' # 邮件接受者 # 可以多个 [email1@gmail.com, email2@gmail.com] EMAIL_SERVER_HOST = 'localhost' # 邮件服务 host EMAIL_SERVER_USER = '' # 邮件服务登录用户名 EMAIL_SERVER_PASSWORD = '' # 邮件服务登录密码 # Web 管理 WEB_ENABLE = 1 # 是否打开 Web 管理 WEB_USER = { # 登录信息 'username': 'admin', 'password': 'password' } WEB_PORT = 8008 # 监听端口 # 是否开启 CDN 查询 CDN_ENABLED = 0 CDN_CHECK_TIME_OUT = 1 # 检测单个 cdn 是否可用超时时间 # 是否使用浏览器缓存中的RAIL_EXPIRATION 和 RAIL_DEVICEID CACHE_RAIL_ID_ENABLED = 0 RAIL_EXPIRATION = '' #浏览12306 网站中的Cache的RAIL_EXPIRATION 值 RAIL_DEVICEID = '' #浏览12306 网站中的Cache的RAIL_DEVICEID 值 # 查询任务 QUERY_JOBS = [ { # 'job_name': 'bj -> sz', # 任务名称,不填默认会以车站名命名,不可重复 'account_key': 0, # 将会使用指定账号下单 'left_dates': [ # 出发日期 :Array "2020-01-25", "2020-01-26", ], 'stations': { # 车站 支持多个车站同时查询 :Dict or :List 'left': '北京', 'arrive': '深圳', }, # # 多个车站示例 (建议添加多个,有时多买几站成功率会高一点) # 'stations': [{ # 'left': '北京', # 'arrive': '深圳', # },{ # 多个车站示例 # 'left': '北京', # 'arrive': '广州', # }], 'members': [ # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如 ['张三', '张三'] "张三", #"*王五", #在姓名前加*表示学生购买成人票 # 7, # 支持通过序号确定唯一乘客,序号查看可通过 python main.py -t 登录成功之后在 runtime/user/ 下找到对应的 用户名_passengers.json 文件,找到对应的 code 填入 ], 'allow_less_member': 0, # 是否允许余票不足时提交部分乘客 'seats': [ # 筛选座位 有先后顺序 :Array # 可用值: 特等座, 商务座, 一等座, 二等座, 软卧, 硬卧, 动卧, 软座, 硬座, 无座 '硬卧', '硬座' ], 'train_numbers': [ # 筛选车次 可以为空,为空则所有车次都可以提交 如 [] 注意大小写需要保持一致 "K356", "K1172", "K4184" ], 'except_train_numbers': [ # 筛选车次,排除车次 train_numbers 和 except_train_numbers 不可同时存在 ], 'period': { # 筛选时间 'from': '00:00', 'to': '24:00' } }, # { # 'job_name': 'cd -> gz', # 任务名称,不填默认会以车站名命名,不可重复 # 'account_key': 0, # 将会使用指定账号下单 # 'left_dates': [ # "2019-01-27", # "2019-01-28" # ], # 'stations': { # 'left': '成都', # 'arrive': '广州', # }, # 'members': [ # "小王", # ], # 'allow_less_member': 0, # 'seats': [ # '硬卧', # ], # 'train_numbers': [] # } ]
返回上一目录
cd ..
创建docker-compose文件
创建docker-compose.yml文件
vi docker-compose.yml
按字母 i 键进入编辑模式,修改为你自己的信息后复制下面的命令,粘贴到终端,按Esc键退出编辑模式,输入:wq保存并退出。
version: '3.9' services: py12306: image: fooololo/py12306:latest # image: pjialin/py12306:latest container_name: py12306 restart: unless-stopped network_mode: bridge environment: TZ: Asia/Shanghai ports: - 8008:8008 #第一个端口是外部访问端口,可自行修改。 volumes: - /volume1/docker/py12306/config:/config #更换为你自己的文件夹路径 - /volume1/docker/py12306/data:/data #更换为你自己的文件夹路径
安装容器
执行命令启动docker-compose文件,拉取镜像并创建容器。
docker-compose up -d
访问服务
打开浏览器,以群晖的IP地址+设置的端口号进行访问。
以本机为例:http://172.16.19.6:8008
默认账号:admin
默认密码:password登录成功
👇👇👇
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果