pull file
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
Close Stale Issues / close_stale_issues (push) Has been cancelled
repo-sync / repo-sync (push) Has been cancelled
auto-deploy-tencent-scf / pre-check (push) Has been cancelled
auto-deploy-tencent-scf / deploy serverless (push) Has been cancelled
Some checks failed
CodeQL / Analyze (csharp) (push) Has been cancelled
Close Stale Issues / close_stale_issues (push) Has been cancelled
repo-sync / repo-sync (push) Has been cancelled
auto-deploy-tencent-scf / pre-check (push) Has been cancelled
auto-deploy-tencent-scf / deploy serverless (push) Has been cancelled
This commit is contained in:
229
tencentScf/README.md
Normal file
229
tencentScf/README.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# 腾讯云云函数(SCF)部署说明
|
||||
<!-- TOC depthFrom:2 -->
|
||||
|
||||
- [腾讯云云函数(SCF)部署说明](#腾讯云云函数scf部署说明)
|
||||
- [1. 介绍](#1-介绍)
|
||||
- [2. 注册账号](#2-注册账号)
|
||||
- [3. 部署](#3-部署)
|
||||
- [3.1. 方式一:Actions自动部署(推荐)](#31-方式一actions自动部署推荐)
|
||||
- [3.1.1. 复刻本仓库到自己的GitHub仓库](#311-复刻本仓库到自己的github仓库)
|
||||
- [3.1.2. 到腾讯云获取密钥](#312-到腾讯云获取密钥)
|
||||
- [3.1.3. 通过 Secrets 添加配置](#313-通过-secrets-添加配置)
|
||||
- [3.1.3.1. 密钥相关配置](#3131-密钥相关配置)
|
||||
- [3.1.3.2. 云函数配置](#3132-云函数配置)
|
||||
- [3.1.3.3. 自动定时更新部署配置](#3133-自动定时更新部署配置)
|
||||
- [3.1.4. 手动执行Actions](#314-手动执行actions)
|
||||
- [3.1.5. 测试云函数](#315-测试云函数)
|
||||
- [3.2. 方式二:上传zip包部署](#32-方式二上传zip包部署)
|
||||
- [3.2.1. 下载压缩包到本地](#321-下载压缩包到本地)
|
||||
- [3.2.2. 云函数控制台新增函数服务](#322-云函数控制台新增函数服务)
|
||||
- [3.2.3. 手动运行测试](#323-手动运行测试)
|
||||
- [3.2.4. 配置触发器,设定运行时间和频率](#324-配置触发器设定运行时间和频率)
|
||||
- [4. 测试](#4-测试)
|
||||
- [5. 关于腾讯云日志](#5-关于腾讯云日志)
|
||||
|
||||
<!-- /TOC -->
|
||||
|
||||
## 1. 介绍
|
||||
见[腾讯云官网](https://cloud.tencent.com/document/product/583)
|
||||
|
||||
## 2. 注册账号
|
||||
注册成功后,需要激活云函数 SCF 功能。因为会赠送免费额度,所以正常使用是免费的。
|
||||
|
||||
## 3. 部署
|
||||
以下两种方式任选一个适合自己需求的即可。
|
||||
### 3.1. 方式一:Actions自动部署(推荐)
|
||||
该方式可以实现自动定期部署,保证代码始终的最新版本的。
|
||||
#### 3.1.1. 复刻本仓库到自己的GitHub仓库
|
||||
点击本 GitHub 仓库右上角的 `Fork` 按钮,复刻本项目到自己的仓库。
|
||||
|
||||
#### 3.1.2. 到腾讯云获取密钥
|
||||
[官方对授权的说明](https://cloud.tencent.com/document/product/1154/43006)
|
||||
|
||||
手动部署时,可以通过扫描二维码来进行授权。但为了避免人工的重复授权,我们将采用密钥授权的方式,步骤如下:
|
||||
|
||||
**Ⅰ.登录腾讯云后,点击进入[腾讯云密钥管理](https://console.cloud.tencent.com/cam/capi)页面**
|
||||
|
||||
如果提示创建子账号,可以先拒绝。简单起见,直接使用主账号创建即可。
|
||||
|
||||
**Ⅱ.点击新建密钥按钮,创建一个密钥。复制并保存 `SecretId` 和 `SecretKey` 两项内容,待会儿会用到它们**
|
||||
|
||||
如下图所示:
|
||||

|
||||
|
||||
#### 3.1.3. 通过 Secrets 添加配置
|
||||
进入自己 fork 的仓库,点击 Settings-> Secrets-> New repository secret,添加如下 Secrets 作为配置:
|
||||
|
||||
##### 3.1.3.1. 密钥相关配置
|
||||
这两个配置决定了会部署到哪个腾讯云账户的 SCF 下面。
|
||||
|
||||
| 配置名称 | Name | Value |
|
||||
| :----: | :----: | :----: |
|
||||
| Id | `TENCENT_SECRET_ID` | 刚才在官网获取到的 SecretId |
|
||||
| Key | `TENCENT_SECRET_KEY` | 刚才在官网获取到的 SecretKey |
|
||||
|
||||
##### 3.1.3.2. 云函数配置
|
||||
Actions 使用 `Serverless Framework` 来部署,通过 `serverless.yml` 来配置函数信息(如函数应用名称、区域、环境变量和触发器等)。
|
||||
|
||||
配置步骤如下:
|
||||
|
||||
**Ⅰ.拷贝或下载 [serverless.yml](./serverless.yml) 文件内容到本地文件中,开始编辑内容**
|
||||
|
||||
其中主要需要改的是最下方的环境变量,这些环境变量在部署后会添加到云函数中(即云函数控制台看到的环境变量集合),它们将作为应用配置传入 bilibili_tool
|
||||
|
||||
例如,你需要增加一个**环境变量**,在最下方添加内容应该是(注意缩进问题):
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
variables: # 根据自己的需要修改
|
||||
Ray_BiliBiliCookies__1: 123 # cookie,必填
|
||||
Ray_Security__RandomSleepMaxMin: 20
|
||||
Ray_Security__IntervalSecondsBetweenRequestApi: 20
|
||||
```
|
||||
|
||||
注意:其中 cookie 是必填项,其他应用配置的也可以通过添加相应的环境变量实现,建议自己添加UA、推送等配置。(更多配置项请参考[配置说明文档](../docs/configuration.md),仅用于参考环境变量,请只关注表格中的`环境变量`一项,并参照上面的方式添加)
|
||||
|
||||
> 如果你不熟悉 yml 或者部署时遇到格式问题,建议花几分钟阅读 [YAML 入门教程](https://www.runoob.com/w3cnote/yaml-intro.html)
|
||||
> 常犯错误:
|
||||
> Q:我在 Github Secrets 中添加了 `NUMBEROFCOINS`,值为 2,为啥投币数量还是 5。
|
||||
> A:所有自定义配置项(环境变量) _不能通过 Github Secrets 添加_,只能写在 `serverless.yml` 中。你应该参考上面的例子添加环境变量 `Ray_DailyTaskConfig__NumberOfCoins`。
|
||||
|
||||
其他 `serverless.yml` 可选配置内容请参考[官方说明](https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md)
|
||||
|
||||
**Ⅱ.拷贝修改后的内容,将其整个添加到 secrets 中**
|
||||
|
||||
| 配置名称 | Name | Value |
|
||||
| :----: | :----: | :----: |
|
||||
| serverless.yml内容 | `TENCENT_SERVERLESS_YML` | 刚才拷贝的整个文件内容 |
|
||||
|
||||
如下图所示:
|
||||

|
||||
|
||||
##### 3.1.3.3. 自动定时更新部署配置
|
||||
|
||||
添加如下配置开启自动定时部署:
|
||||
|
||||
| 配置名称 | Name | Value |
|
||||
| :----: | :----: | :----: |
|
||||
| 定时自动部署 | `IS_AUTO_DEPLOY_TENCENT_SCF` | true |
|
||||
|
||||
自动部署只是定时会将自己仓库的代码部署到云函数,想要自动更新,还需要开启仓库的自动同步,详见常见问题文档中的 《我 Fork 之后如何同步原作者的更新内容?》章节
|
||||
|
||||
#### 3.1.4. 手动执行Actions
|
||||
在自己仓库页面,依次点击 Actions ——> auto-deploy-tencent-scf ——> Run workfolw ,手动触发部署工作流。
|
||||
|
||||
如下图所示:
|
||||

|
||||
|
||||
#### 3.1.5. 测试云函数
|
||||
如果部署成功,那么登录自己的腾讯云函数控制台,就可以看到对应的函数应用了。
|
||||
|
||||
请参考下节《测试》进行手动测试函数运行。
|
||||
|
||||
### 3.2. 方式二:上传zip包部署
|
||||
该方式比较简单直观,但是代码是上传是固定版本,想更新的话需要再次手动上传。
|
||||
#### 3.2.1. 下载压缩包到本地
|
||||
点击[BiliBiliToolPro/release](https://github.com/RayWangQvQ/BiliBiliToolPro/releases),选择最新版本的 `tencent-scf.zip` ,下载到本地
|
||||
#### 3.2.2. 云函数控制台新增函数服务
|
||||
**Ⅰ.进入[云函数控制台](https://console.cloud.tencent.com/scf/),单击左侧导航栏【函数服务】,进入“函数服务”页面。顶部地域选择一个靠近自己地址的,点击新建按钮。**
|
||||
|
||||
如下图:
|
||||
|
||||

|
||||
|
||||
**Ⅱ.填写基本信息**
|
||||
* 创建方式:选择自定义创建
|
||||
* 函数名称: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` (供首次部署时测试使用,后续将通过触发器传递功能任务)
|
||||
|
||||
如下图:
|
||||
|
||||

|
||||
|
||||
**Ⅳ.继续下滚,找到执行配置模块:**
|
||||
* 异步执行:勾选启用
|
||||
* 状态追踪:勾选启用
|
||||
|
||||
如下图:
|
||||
|
||||

|
||||
|
||||
**Ⅴ.点击完成按钮,创建函数**
|
||||
|
||||
触发器配置先不用管,可以等测试完成后再添加
|
||||
|
||||
#### 3.2.3. 手动运行测试
|
||||
参考下节《测试》进行手动测试。
|
||||
|
||||
#### 3.2.4. 配置触发器,设定运行时间和频率
|
||||
**Ⅰ.点击左侧【触发管理】导航,点击“创建触发器”按钮**
|
||||
|
||||
如下图:
|
||||
|
||||

|
||||
|
||||
**Ⅱ.填写触发器信息**
|
||||
* 触发方式:定时触发
|
||||
* 定时任务名称:DailyTask
|
||||
* 触发周期:自定义触发周期
|
||||
* Cron表达式:自己根据需求指定,10 15 * * * 表示每天15点10分运行,不会的可以做下搜索工作,规则很简单
|
||||
* 附加信息:是
|
||||
* 信息内容:`Daily`
|
||||
* 立即启用:勾选启用
|
||||
填完后点击提交按钮提交,即可完成。如下图:
|
||||
|
||||

|
||||
|
||||
这里的附加信息将作为runTasks(欲运行的任务编码)配置,通过命令行传入程序。想多个任务共用一个触发器的话,可以使用&号拼接任务编码,填入附加信息,如 `Daily&LiveLottery`
|
||||
|
||||
等到触发器设定的时间,对应的触发器就会去运行应用,自动完成任务。
|
||||
|
||||
## 4. 测试
|
||||
|
||||
**Ⅰ.成功部署好函数后,会看到如下的函数管理页面,点击顶部函数代码 Tab 页,准备测试。**
|
||||
|
||||
如下图:
|
||||
|
||||

|
||||
|
||||
**Ⅱ.下拉,找到测试按钮,点击运行测试,页面下方会同步显示日志。如果运行正常,则表示部署已成功。**
|
||||
|
||||
如下图:
|
||||
|
||||

|
||||
|
||||
**Ⅲ.返回函数配置页面,将之前配置的环境变量`Ray_RunTasks`删除,后续函数将自动执行触发器中配置的功能任务**
|
||||
|
||||
## 5. 关于腾讯云日志
|
||||
|
||||
**Ⅰ.腾讯云关于CLS日志的免费额度说明如下:**
|
||||
|
||||

|
||||
|
||||
**Ⅱ.实测每日运行函数日志花费如图:**
|
||||
|
||||

|
||||
|
||||
**Ⅲ.如果需要完全白嫖(即不需要任何费用)的话,可以切至[腾讯云日志服务页](https://console.cloud.tencent.com/cls/overview)**
|
||||
|
||||
**Ⅳ.点击侧边栏的日志主题,并找到云函数所在地域,如图所示:**
|
||||
|
||||

|
||||
|
||||
**Ⅴ.点击删除,则将删除此日志主题,云函数因为无法定位到日志集,就不会产生额外费用。**
|
||||
26
tencentScf/bootstrap
Normal file
26
tencentScf/bootstrap
Normal file
@@ -0,0 +1,26 @@
|
||||
#! /bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
FuncFile="$(echo $_HANDLER | cut -d. -f1).sh"
|
||||
echo "[step 1]初始化,开始加载函数文件 $FuncFile"
|
||||
source ./$FuncFile
|
||||
echo "=>完成"
|
||||
|
||||
echo "[step 2]初始化完成,开始发送ready信号"
|
||||
curl -d " " -X POST -s "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/init/ready"
|
||||
echo "=>完成"
|
||||
|
||||
echo "[step 3]开始循环监听处理事件调用"
|
||||
while true
|
||||
do
|
||||
HEADERS="$(mktemp)"
|
||||
echo "=>长轮询获取事件"
|
||||
EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET -s "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/next")
|
||||
echo "=>监听到事件:$EVENT_DATA"
|
||||
echo "=>调用函数,开始处理事件"
|
||||
$(echo "$_HANDLER" | cut -d. -f2) "$EVENT_DATA"
|
||||
RESPONSE=$EVENT_DATA
|
||||
echo "=>返回 $RESPONSE"
|
||||
echo "=>推送函数处理结果"
|
||||
curl -X POST -s "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/response" -d "$RESPONSE"
|
||||
done
|
||||
19
tencentScf/index.sh
Normal file
19
tencentScf/index.sh
Normal file
@@ -0,0 +1,19 @@
|
||||
echo "成功加载index.sh函数文件"
|
||||
|
||||
function main_handler () {
|
||||
echo "进入main_handler"
|
||||
EVENT_DATA=$1
|
||||
echo "$EVENT_DATA" 1>&2;
|
||||
runTasks=""
|
||||
if [[ $EVENT_DATA == *Message* ]]
|
||||
then
|
||||
eventMsg=$(echo $EVENT_DATA | grep -Po 'Message[" :]+\K[^"]+')
|
||||
echo "触发事件中的附加消息(任务编码)为:$eventMsg"
|
||||
runTasks="--runTasks=$eventMsg"
|
||||
else
|
||||
echo "触发事件中未包含附加消息(任务编码)"
|
||||
fi
|
||||
echo "开始运行BiliBiliTool......"
|
||||
./Ray.BiliBiliTool.Console $runTasks
|
||||
echo "函数结束"
|
||||
}
|
||||
8
tencentScf/publish.bat
Normal file
8
tencentScf/publish.bat
Normal file
@@ -0,0 +1,8 @@
|
||||
::https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish
|
||||
|
||||
cd ../src/Ray.BiliBiliTool.Console
|
||||
|
||||
dotnet publish --configuration Release --runtime linux-x64 --self-contained true -p:PublishTrimmed=true -o ./bin/Publish/tencent-scf
|
||||
copy /y ..\..\tencentScf\* .\bin\Publish\tencent-scf\
|
||||
|
||||
pause
|
||||
12
tencentScf/publish.sh
Normal file
12
tencentScf/publish.sh
Normal file
@@ -0,0 +1,12 @@
|
||||
# https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish
|
||||
|
||||
cd ../src/Ray.BiliBiliTool.Console
|
||||
|
||||
dotnet publish --configuration Release --runtime linux-x64 --self-contained true -p:PublishTrimmed=true -o ../../tencentScf/bin/publish
|
||||
|
||||
cd ../../tencentScf
|
||||
cp -r ./bootstrap ./index.sh ./bin/publish/
|
||||
|
||||
cd ./bin/publish
|
||||
chmod 755 index.sh bootstrap
|
||||
zip -r -q ../tencent-scf.zip ./*
|
||||
49
tencentScf/serverless.yml
Normal file
49
tencentScf/serverless.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
# https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md
|
||||
|
||||
#组件信息
|
||||
component: scf
|
||||
name: bilibili_tool
|
||||
|
||||
#组件参数配置
|
||||
inputs:
|
||||
name: ${name}_scf
|
||||
namespace: default
|
||||
enableRoleAuth: false
|
||||
src: ./bin/publish/
|
||||
handler: index.main_handler
|
||||
runtime: CustomRuntime
|
||||
region: ap-guangzhou # 函数所在区域,默认广州
|
||||
description: This is a function in ${app} application.
|
||||
memorySize: 128
|
||||
initTimeout: 30
|
||||
timeout: 86400
|
||||
asyncRunEnable: true
|
||||
traceEnable: true
|
||||
events: # 根据自己的需要修改
|
||||
- timer: # 每日任务触发器
|
||||
parameters:
|
||||
name: DailyTask
|
||||
cronExpression: "0 30 12 * * * *"
|
||||
enable: true
|
||||
argument: Daily
|
||||
- timer: # 天选抽奖触发器
|
||||
parameters:
|
||||
name: LiveLotteryTask
|
||||
cronExpression: "0 0 */4 * * * *"
|
||||
enable: true
|
||||
argument: LiveLottery
|
||||
- timer: # 自动取关
|
||||
parameters:
|
||||
name: UnfollowBatchedTask
|
||||
cronExpression: "0 0 0 * * MON *"
|
||||
enable: true
|
||||
argument: UnfollowBatched
|
||||
- timer: # 大会员积分
|
||||
parameters:
|
||||
name: VipBigPointTask
|
||||
cronExpression: "0 07 01 * * * *"
|
||||
enable: true
|
||||
argument: VipBigPoint
|
||||
environment:
|
||||
variables: # 根据自己的需要修改
|
||||
Ray_BiliBiliCookies__1: 123 # cookie,必填
|
||||
Reference in New Issue
Block a user