BiliBiliToolPro 腾讯云云函数(SCF)部署完整指南:Actions 自动部署与 ZIP 手动部署
【免费下载链接】BiliBiliToolProB 站(bilibili)自动任务工具,支持docker、青龙、k8s等多种部署方式。全面拥抱AI。敏感肌也能用。项目地址: https://gitcode.com/GitHub_Trending/bi/BiliBiliToolPro
本指南以 tencentScf/README.md 为主体,系统讲解 BiliBiliToolPro 部署到腾讯云云函数(Serverless Cloud Function,SCF)的两种完整方案:GitHub Actions 自动部署(推荐,可自动定期更新代码)与上传 ZIP 包手动部署(直观,但版本固定)。读者按本文操作后,可独立完成云函数创建、环境变量与触发器配置、函数测试,并掌握通过附加消息传递任务编码(如Daily、LiveLottery)实现定时自动化运行的完整能力。
1. 部署前的准备:注册账号与免费额度
腾讯云云函数(SCF)是腾讯云提供的 Serverless 计算服务,使用前需先注册腾讯云账号。注册成功后,需要激活云函数 SCF 功能。由于腾讯云会赠送免费额度,正常使用是免费的(SCF 官方文档对产品本身的介绍可参考腾讯云官网的产品文档,本仓库只关注其在 BiliBiliToolPro 上的实际落地)。
2. 两种部署方式总览
| 方式 | 适用场景 | 代码更新方式 | 复杂度 |
|---|---|---|---|
| 方式一:Actions 自动部署(推荐) | 希望代码始终跟随仓库最新版本 | 定时自动部署,配合仓库自动同步 | 配置一次 Secrets,后续基本免维护 |
| 方式二:上传 ZIP 包部署 | 追求简单直观、上手快 | 手动上传固定版本,更新需重新上传 | 全程控制台点击操作 |
以下两种方式任选一个适合自己需求的即可。
3. 方式一:Actions 自动部署(推荐)
该方式通过 GitHub Actions 工作流调用腾讯云 Serverless Framework(scf组件)完成部署,可以实现自动定期部署,保证云函数中的代码始终是最新版本。仓库中已内置完整的工作流文件 .github/workflows/auto-deploy-tencent-scf.yml 与发布脚本 tencentScf/publish.sh。
3.1 Fork 仓库到自己的 GitHub
点击本仓库右上角的Fork按钮,复刻本项目到自己的 GitHub 仓库。后续所有 Actions、Secrets 配置都在你自己的 fork 仓库中进行。
3.2 到腾讯云获取密钥
手动部署时,可以通过扫描二维码来进行授权,但为了避免人工重复授权,这里采用密钥授权的方式,步骤如下:
- 登录腾讯云后,进入腾讯云密钥管理页面(云 API 密钥管理,
cam/capi)。 - 如果提示创建子账号,可以先拒绝,简单起见直接使用主账号创建即可。
- 点击新建密钥按钮,创建一个密钥,复制并保存
SecretId和SecretKey两项内容,后续配置 Secrets 时会用到。
在 Actions 工作流中,这两个密钥通过环境变量
TENCENT_SECRET_ID、TENCENT_SECRET_KEY注入到 Serverless Framework,从而决定部署到哪个腾讯云账户的 SCF 下(见 .github/workflows/auto-deploy-tencent-scf.yml)。
3.3 通过 Secrets 添加配置
进入自己 fork 的仓库,点击Settings → Secrets → New repository secret,依次添加以下 Secrets 作为配置。
3.3.1 密钥相关配置
这两个配置决定了会部署到哪个腾讯云账户的 SCF 下面:
| 配置名称 | Name | Value |
|---|---|---|
| Id | TENCENT_SECRET_ID | 刚才在官网获取到的 SecretId |
| Key | TENCENT_SECRET_KEY | 刚才在官网获取到的 SecretKey |
3.3.2 云函数配置(serverless.yml)
Actions 使用Serverless Framework来部署,通过serverless.yml来配置函数信息(如函数应用名称、区域、环境变量和触发器等),仓库中提供了完整的默认配置示例 tencentScf/serverless.yml。
配置步骤如下:
- 拷贝或下载 tencentScf/serverless.yml 文件内容到本地文件,开始编辑内容。其中主要需要改的是最下方的环境变量——这些环境变量在部署后会添加到云函数中(即云函数控制台看到的环境变量集合),它们将作为应用配置传入 bilibili_tool 程序。
例如,需要增加一个环境变量时,在最下方添加内容应该是(注意缩进问题):
environment: variables: # 根据自己的需要修改 Ray_BiliBiliCookies__1: 123 # cookie,必填 Ray_Security__RandomSleepMaxMin: 20 Ray_Security__IntervalSecondsBetweenRequestApi: 20cookie 是必填项。其他应用配置也可以通过添加相应的环境变量实现,建议自己添加 UA、推送等配置。更多配置项请参考 docs/configuration.md(仅用于参考环境变量,请只关注表格中的"环境变量"一项,并参照上面的方式添加)。
关于环境变量命名,docs/configuration.md 中有明确说明:Console 项目(青龙)的环境变量需要添加Ray_前缀,比如原始配置 Key 为BiliBiliCookies__1,在 Console 中则为Ray_BiliBiliCookies__1;配置项之间用双下划线__分隔层级,数字编号表示数组下标,从而支持Ray_BiliBiliCookies__1、Ray_BiliBiliCookies__2多账号配置。配置文件、环境变量、命令行三种配置源的优先级由低到高依次是:json 文件 < 环境变量 < 命令行。
如果你不熟悉 yml 或者部署时遇到格式问题,建议花几分钟阅读 YAML 入门教程。
常犯错误: Q:我在 Github Secrets 中添加了
NUMBEROFCOINS,值为 2,为啥投币数量还是 5? A:所有自定义配置项(环境变量)不能通过 Github Secrets 添加,只能写在serverless.yml中。你应该参考上面的例子添加环境变量Ray_DailyTaskConfig__NumberOfCoins。
- 拷贝修改后的内容,将其整个添加到 Secrets 中:
| 配置名称 | Name | Value |
|---|---|---|
| serverless.yml内容 | TENCENT_SERVERLESS_YML | 刚才拷贝的整个文件内容 |
工作流在部署时会读取该 Secret:如果未配置
TENCENT_SERVERLESS_YML,则使用仓库内默认的 serverless.yml;配置了则用 Secret 中的内容覆盖(见 .github/workflows/auto-deploy-tencent-scf.yml)。
仓库默认的 tencentScf/serverless.yml 是一个可直接参考的完整示例,它声明了如下关键信息:
- 函数基础信息:函数名
${name}_scf(即bilibili_tool_scf)、运行环境CustomRuntime、执行方法index.main_handler、默认区域广州(region: ap-guangzhou)、内存 128MB; - 超时与执行:
initTimeout: 30(初始化超时 30 秒)、timeout: 86400(执行超时 86400 秒)、asyncRunEnable: true(异步执行)、traceEnable: true(状态追踪); - 触发器(
events段):默认内置了 4 个定时触发器,分别是每日任务(DailyTask,每天 12:30)、天选抽奖(LiveLotteryTask,每 4 小时)、自动取关(UnfollowBatchedTask,每周一零点)、大会员积分(VipBigPointTask,每天 01:07); - 环境变量(
environment.variables段):Ray_BiliBiliCookies__1: 123,即 cookie 占位配置,需要替换成你自己的值。
注意:仓库默认 serverless.yml 中的 Cron 表达式是七段式(秒 分 时 日 月 星期 年),如
"0 30 12 * * * *";而在云函数控制台手动创建触发器时,常见写法是五段式(分 时 日 月 星期),如10 15 * * *表示每天 15 点 10 分运行。两种写法分别对应文件内配置与控制台配置,不要混淆。
3.3.3 自动定时更新部署配置
添加如下配置即可开启自动定时部署:
| 配置名称 | Name | Value |
|---|---|---|
| 定时自动部署 | IS_AUTO_DEPLOY_TENCENT_SCF | true |
工作流默认按cron: "0 2 * * 1,3,5"(每周一、三、五)定时触发,并通过pre-check任务判断开关状态,只有开启时才真正执行部署(见 .github/workflows/auto-deploy-tencent-scf.yml)。
注意:自动部署只是定时将你自己仓库的代码部署到云函数,想要自动更新到上游作者的最新代码,还需要开启仓库的自动同步——详见常见问题文档中《我 Fork 之后如何同步原作者的更新内容?》章节(见 docs/questions.md)。
3.4 手动执行 Actions
在自己仓库页面,依次点击Actions → auto-deploy-tencent-scf → Run workflow,即可手动触发部署工作流。
3.5 测试云函数
如果部署成功,登录自己的腾讯云函数控制台,就可以看到对应的函数应用了。请参考下文《测试》章节进行手动测试函数运行。
4. 方式二:上传 ZIP 包部署
该方式比较简单直观,但代码上传的是固定版本,想更新的话需要再次手动上传。
4.1 下载压缩包到本地
从项目 Release 页面选择最新版本的tencent-scf.zip,下载到本地。仓库中的 tencentScf/publish.sh 展示了该压缩包的生产方式:
dotnet publish --configuration Release --runtime linux-x64 --self-contained true -p:PublishTrimmed=true -o ../../tencentScf/bin/publish cp -r ./bootstrap ./index.sh ./bin/publish/ chmod 755 index.sh bootstrap zip -r -q ../tencent-scf.zip ./*即先以linux-x64自包含模式发布 .NET 程序(启用裁剪PublishTrimmed),再把云函数运行所需的bootstrap启动脚本与index.sh函数入口一并打包进 zip。Windows 用户可参考同目录下的 tencentScf/publish.bat。
4.2 云函数控制台新增函数服务
- 进入腾讯云云函数控制台,单击左侧导航栏【函数服务】,进入"函数服务"页面。顶部地域选择一个靠近自己位置的区域,点击新建按钮。
- 填写基本信息:
- 创建方式:选择自定义创建
- 函数名称:
bilibili_tool - 地域:刚才已经选过了
- 运行环境:
CustomRuntime - 函数代码提交方式:本地上传zip包
- 执行方法:
index.main_handler - 函数代码:点击后选择之前本地下载好的 zip 包
- 点击展开高级配置,添加配置:
- 初始化超时时间:
30 - 执行超时时间:
86400(会警告超范围,先不用管,下面开启异步之后就好了) - 环境变量(这里先加 2 个配置就行了,后续可以再添加其他的):
- cookie 配置:key 为
Ray_BiliBiliCookies__1,value 为之前浏览器抓取到的 cookie 字符串 - 随机睡眠配置:key 为
Ray_Security__RandomSleepMaxMin,value 为0(为了方便测试先关掉,后面测好之后再删掉该配置,或者自己改一个 value 值) - 指定任务:key 为
Ray_RunTasks,value 为Test(供首次部署时测试使用,后续将通过触发器传递功能任务)
- cookie 配置:key 为
- 初始化超时时间:
- 继续下滚,找到执行配置模块:
- 异步执行:勾选启用
- 状态追踪:勾选启用
- 点击完成按钮,创建函数。触发器配置先不用管,可以等测试完成后再添加。
4.3 手动运行测试
参考下文《测试》章节进行手动测试。
4.4 配置触发器,设定运行时间和频率
- 点击左侧【触发管理】导航,点击"创建触发器"按钮。
- 填写触发器信息:
- 触发方式:定时触发
- 定时任务名称:
DailyTask - 触发周期:自定义触发周期
- Cron 表达式:自己根据需求指定,
10 15 * * *表示每天 15 点 10 分运行(五段式:分 时 日 月 星期) - 附加信息:是
- 信息内容:
Daily - 立即启用:勾选启用
填完后点击提交按钮提交,即可完成。
这里的附加信息将作为 runTasks(欲运行的任务编码)配置,通过命令行传入程序。想多个任务共用一个触发器的话,可以使用&号拼接任务编码填入附加信息,如Daily&LiveLottery。
等到触发器设定的时间,对应的触发器就会去运行应用,自动完成任务。
4.5 触发消息是如何传给程序的:index.sh 原理
从源码结构看,ZIP 包中携带的 tencentScf/index.sh 是函数真正的入口,其核心逻辑为:
EVENT_DATA=$1 runTasks="" if [[ $EVENT_DATA == *Message* ]] then eventMsg=$(echo $EVENT_DATA | grep -Po 'Message[" :]+\K[^"]+') echo "触发事件中的附加消息(任务编码)为:$eventMsg" runTasks="--runTasks=$eventMsg" fi ./Ray.BiliBiliTool.Console $runTasks也就是说,触发器传递的"附加信息"(如Daily、LiveLottery)会出现在触发事件的Message字段中,index.sh将其解析后拼装为--runTasks=xxx命令行参数传给 Ray.BiliBiliTool.Console 运行;如果触发事件中没有附加消息,则不带参数运行(此时会执行默认任务集)。而 tencentScf/bootstrap 则是 CustomRuntime 环境要求的启动引导脚本,它根据_HANDLER环境变量加载对应的函数文件(index.sh),完成初始化就绪信号上报后,进入长轮询循环持续监听并处理事件调用。
5. 测试云函数
- 成功部署好函数后,会看到函数管理页面,点击顶部函数代码Tab 页,准备测试。
- 下拉找到测试按钮,点击运行测试,页面下方会同步显示日志。如果运行正常,则表示部署已成功。
- 返回函数配置页面,将之前配置的环境变量
Ray_RunTasks删除,后续函数将自动执行触发器中配置的功能任务。
注意:ZIP 部署方式在控制台手动添加的环境变量(如
Ray_RunTasks: Test)只用于首次部署验证;正式使用后应删除该变量,改用触发器"附加信息"来指定任务,二者都是通过--runTasks参数生效的(前者是环境变量注入,后者由index.sh从触发事件解析)。
6. 关于腾讯云日志与费用
腾讯云云函数默认将运行日志写入 CLS 日志服务,需要关注其计费情况:
- 腾讯云关于 CLS 日志的免费额度说明如下(官方文档截图,每月提供一定免费额度)。
- 实测每日运行函数日志的花费大约如下图所示(量级极小,通常在免费额度覆盖范围内)。
- 如果需要完全白嫖(即不需要任何费用),可以切至腾讯云日志服务页。
- 点击侧边栏的日志主题,并找到云函数所在地域。
- 点击删除,删除该日志主题后,云函数因为无法定位到日志集,就不会产生额外费用。
7. 小结:两种部署方式的决策建议
- 追求"一次配置、长期免维护、代码跟随上游更新",首选方式一 Actions 自动部署:只需 Fork 仓库、配置 4 个 Secrets(
TENCENT_SECRET_ID、TENCENT_SECRET_KEY、TENCENT_SERVERLESS_YML、IS_AUTO_DEPLOY_TENCENT_SCF),工作流会自动完成发布与scf deploy(见 .github/workflows/auto-deploy-tencent-scf.yml); - 追求"上手快、逻辑直观",选择方式二 ZIP 包部署:从 Release 下载
tencent-scf.zip,按控制台向导逐步创建函数并配置触发器即可,缺点是需要手动更新版本。
无论哪种方式,部署完成后,BiliBiliToolPro 都会按触发器设定的时间自动运行,通过index.sh解析附加消息中的任务编码,完成每日任务、天选抽奖、自动取关、大会员积分等自动化操作。
【免费下载链接】BiliBiliToolProB 站(bilibili)自动任务工具,支持docker、青龙、k8s等多种部署方式。全面拥抱AI。敏感肌也能用。项目地址: https://gitcode.com/GitHub_Trending/bi/BiliBiliToolPro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考