阅读视图

发现新文章,点击刷新页面。

Github Action+Cloudflare R2:打造自动化图床教程

之前阿斌使用 GitHub Action将图片同步到了Backblaze、又拍云,这次又打通了 Cloudflare R2,只需将图片上传到Github,Github自动将图片同步到图床平台,一劳永逸。

Cloudflare R2免费套餐(详见:https://developers.cloudflare.com/r2/platform/pricing

永远免费 月度费用
存储 10 GB/月 0.015 美元/GB 存储
A 类操作:改变状态 100 万次/月 4.50 美元/百万次
B 类操作:读取现有状态 1000 万次/月 0.36 美元/百万次

Github Action+Backblze+Cloudflare R2:自动化版图床搭建
Github Action+Backblze+Cloudflare R2:自动化版图床搭建

步骤 1:安装 rclone

如果你还没有安装 rclone,可以按照下面的步骤安装它:

  • 在 Linux/macOS 上运行:
    curl https://rclone.org/install.sh | sudo bash
  • 在 Windows 上,可以从 rclone的官方页面 下载适合你的版本,并解压后将其添加到 PATH 中。

步骤 2:获取 Cloudflare R2 API 访问信息

你需要 Cloudflare R2 的访问密钥(Access Key)和密钥(Secret Key)。这些可以从 Cloudflare 的账户面板中获取:

  1. 登录到你的 Cloudflare 仪表板。
  2. 点击左侧菜单:R2 对象存储 - 概述,点击右侧:管理 R2 API 令牌,创建 API 令牌,权限:对象读和写,获得存储桶的 API 密钥信息。
  3. 记下 Access Key 和 Secret Key 以及 R2 Bucket 名称。

步骤 3:配置 rclone 和 R2 存储桶

使用 rclone config 命令来配置 Cloudflare R2 作为一个存储后端。

  1. 运行以下命令来启动配置向导:
    rclone config
  2. 按照以下提示来配置 R2:
    • 选择 n 来创建一个新的远程连接。
    • 输入一个名称,例如 cloudflare_r2
    • 选择 s3 作为存储类型,因为 Cloudflare R2 使用了与 Amazon S3 兼容的 API。
    • provider 中输入 Cloudflare.
    • 输入 Cloudflare R2 的 Access KeySecret Key
    • endpoint 输入 https://<account-id>.r2.cloudflarestorage.com,其中 <account-id> 是你的 Cloudflare 账户 ID(R2 对象存储 - 概述 - 右侧:帐户 ID)。
    • 其余选项可以保持默认,最后保存配置。

配置完成后,rclone 将能够访问 Cloudflare R2。

步骤 4:将图片从 Cloudflare R2 下载到本地

假设你已经配置好了远程名称(例如 cloudflare_r2),并且你的 R2 存储桶名称为 my-images,你可以使用以下命令将存储桶中的所有内容同步到本地目录:

# 仅列出 R2 存储桶的文件
rclone ls cloudflare_r2:my-images
# copy 推荐使用
rclone copy cloudflare_r2:my-images /path/to/local/folder
# sync 会删除通路径其他文件,不推荐使用
rclone sync cloudflare_r2:my-images /path/to/local/folder
# 检查同步状态(不做实际操作)
rclone sync --dry-run cloudflare_r2:my-images /path/to/local/folder
# 删除 R2 存储桶指定文件夹
rclone delete cloudflare_r2:my-images/wp-cdn-02/2021

参数解释:

  • cloudflare_r2:my-images 是你在 R2 上的存储桶。
  • /path/to/local/folder 是本地文件夹路径,你希望将图片下载到这里。

步骤 5:验证同步结果(可忽略)

同步完成后,你可以检查本地文件夹 /path/to/local/folder,确保 R2 上的图片已经下载到本地。

我这一步是为了将 Cloudflare 原来的图片文件下载到本地与本地的 Github 仓库的图片进行合并

步骤 6:获取 rclone Config 信息

  1. 通过命令 rclone config paths 可以查看这个 Config 保存在什么位置。

  2. 然后把这个 Config 文件的内容用 Base64 base64 -w 0 rclone.conf 编码一下待用(需要用到Linux终端,或使用Git Bash 也可以)

    rclone Config信息获取
    rclone Config信息获取

步骤 7:Github Action 设置

  1. 在 Github 仓库的 .github/workflows 添加 Cloudflare-r2.yml

    name: Sync B2 Bucket
    on: push
    
    jobs:
     deploy:
       runs-on: ubuntu-latest
       steps:
       - uses: actions/checkout@master
       - run: rm -rf /github/workspace/.git/ && rm -rf /github/workspace/.github
       - name: Setup Rclone
         uses: AnimMouse/setup-rclone@v1
         with:
           rclone_config: ${{ secrets.RCLONE_CONFIG }}
       - name: Rclone Sync Cloudflare
         run: |
             rclone copy ./ cloudflare_r2:${{ secrets.CF_R2_BUCKET }}/wp-cdn-02 --transfers=8 --checkers=16 --exclude=.git/** --exclude=.github/** --exclude=README.md
  2. 上面用到了 2 个变量:RCLONE_CONFIG(步骤6里的base64内容)和 CF_R2_BUCKET(c)

    # cloudflare_r2:修改为步骤3里的名称
    # wp-cdn-02:修改为存储桶里的子文件夹(可以删除,连带/一起删除)
    cloudflare_r2:${{ secrets.CF_R2_BUCKET }}/wp-cdn-02
  3. GitHub 新增 Action 变量: Settings - Action - New repository secret - Name:冒号前的内容,Secret:冒号后的内容 - Add secret,将上面的 2 个变量添加进去即可

    RCLONE_CONFIG: 步骤6里的base64内容
    CF_R2_BUCKET: Cloudflare 存储桶名称

    Github Action设置 secrets
    Github Action设置 secrets

步骤 8:验证

在本地用上传工具上传到GitHub,查看Action是否运行,运行成功后查看Cloudflare R2 是否有文件

  • 运行成功、有文件:代表配置没问题
  • 运行失败:查看报错并解决

参考链接

ChatGPT-on-WeChat、WordPress、微信公众号:实现具有AI搜索功能的博客公众号

阿斌之前使用 WordPress 插件:微信机器人高级版 将 Wordpress 与微信公众号 进行了打通,但后来作者将插件隐藏,只能加入社区的才能免费下载,所以阿斌一直使用的是旧版本。

后来我发现微信将我的网站列为不安全网站了,申诉还比较麻烦,阿斌在想怎样直接将链接返回给用户,用户直接复制链接到浏览器打开即可。

我就找到了 chatgpt-on-wechat 这个可以对接微信公众号AI聊天机器人,只要设置好就能通过AI来回答用户发来的问题,还可以自己开发插件,自由度很高。

ChatGPT-on-WeChat、WordPress、微信公众号:实现具有AI搜索功能的博客公众号
ChatGPT-on-WeChat、WordPress、微信公众号:实现具有AI搜索功能的博客公众号

zhayujie/chatgpt-on-wechat :基于大模型搭建的聊天机器人,同时支持 微信公众号、企业微信应用、飞书、钉钉 等接入,可选择 GPT3.5/GPT-4o/GPT4.0/Claude/文心一言/讯飞星火/通义千问/Gemini/GLM-4/Claude/Kimi/LinkAI,能处理文本、语音和图片,访问操作系统和互联网,支持基于自有知识库进行定制企业智能客服。

如何在 CentOS上 安装 Python3.8

按行运行,一行是一条命令

# 查看系统包含的python环境
ps -aux|grep python
# 下载Python3.8.20的包
wget https://www.python.org/ftp/python/3.8.20/Python-3.8.20.tgz
# 解压压缩包
tar -zxvf Python-3.8.20.tgz
# 进入文件夹
cd Python-3.8.20/
# 配置python3
./configure --prefix=/usr/local/python3
# 编译
make && make install
# 将原有的python软链接重命名
mv /usr/bin/python3 /usr/bin/python368
mv /usr/bin/pip3 /usr/bin/pip368
# 对新的python3.8创建软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
# 查看当前python3的版本号
python3 --version

搭建 ChatGPT-on-WeChat

# 克隆仓库
git clone https://github.com/zhayujie/chatgpt-on-wechat
# 进入文件夹
cd chatgpt-on-wechat/
# 安装核心依赖 
pip3 install -r requirements.txt
# 安装扩展依赖
pip3 install -r requirements-optional.txt
# 复制该模板创建最终生效的 config.json 文件,要先设置好配置信息再启动
cp config-template.json config.json
# 报错:ImportError: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips  26 Jan 2017'再执行下面命令
pip3 install urllib3==1.22
# 在后台运行程序并通过日志输出二维码
nohup python3 app.py & tail -f nohup.out

我的 config.json 文件内容,记得将 服务器 IP 加入 IP 白名单,否则会调用不通(配置说明

{
  "channel_type": "wechatmp",
  "single_chat_prefix": [""], 
  "wechatmp_app_id": "开发者ID(AppID)",
  "wechatmp_app_secret": "开发者密码(AppSecret)",
  "wechatmp_aes_key": "消息加解密密钥(EncodingAESKey)",
  "wechatmp_token": "令牌(Token)",
  "wechatmp_port": 999,
  "model": "gpt-3.5-turbo",
  "open_ai_api_base": "OpenAI地址",
  "open_ai_api_key": "OpenAI密码",
  "text_to_image": "dall-e-2",
  "voice_to_text": "openai",
  "text_to_voice": "openai",
  "proxy": "",
  "hot_reload": false,
  "single_chat_prefix": [
    ""
  ],
  "single_chat_reply_prefix": "[bot] ",
  "group_chat_prefix": [
    "@星辰"
  ],
  "group_name_white_list": [
    "文章接收助手"
  ],
  "group_chat_in_one_session": [
    "文章接收助手"
  ],
  "image_create_prefix": [
    "画"
  ],
  "speech_recognition": true,
  "group_speech_recognition": false,
  "voice_reply_voice": false,
  "conversation_max_tokens": 2500,
  "expires_in_seconds": 3600,
  "character_desc": "你是ChatGPT, 一个由OpenAI训练的大型语言模型, 你旨在回答并解决人们的任何问题,并且可以使用多种语言与人交流。",
  "temperature": 0.7,
  "top_p": 1,
  "subscribe_msg": "欢迎来到斌仔的公众号~\n\n2024年,愿你所求皆如愿🎉!\n\n记住我的资源小站,我把好用的都放在了那里:https://www.wangdu.site(复制链接在浏览器打开)\n\n1. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=目录导航'>点我:查看📕目录导航📕</a>\n2. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=专属福利'>点我:获取🎁专属福利🎁</a>\n3. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=黑苹果'>点我:获取🍎黑苹果🍎教程</a>\n4. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=影视'>点我:免费📽️看电影📽️</a\n5. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=youtube'>点我:🌍看YouTube🌍,了解世界</a>\n6. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=音乐'>点我:解锁全部🎵音乐🎵,不再怕灰色</a>\n7. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=AI'>点我:获取🤖AI(人工智能)工具🤖,大大提升工作效率</a>\n8. <a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=IPTV直播源'>点我:获取📺IPTV直播源📺,免费TV看电影视频</a>\n\n获取博客文章验证码:<a href='weixin://bizmsgmenu?msgmenuid=0&msgmenucontent=验证码'>点我:获取验证码</a>!\n\n查询博客内容:[搜 关键词],如:搜 黑苹果\n\n默认使用AI回答",
  "use_linkai": false,
  "linkai_api_key": "",
  "linkai_app_code": ""
}

ChatGPT-on-WeChat 公众号设置教程

根据上面设置好后启动项目,没啥报错后,我们要将项目的端口映射到域名,这样在微信公众号后台调用更加方便。

宝塔反向代理

  1. 宝塔面板 - 网站 - 添加站点,域名:你需要解析的域名,PHP版本:纯静态,确定

    宝塔面板添加站点
    宝塔面板添加站点

  2. 点击域名后的设置 - 反向代理 - 添加反向代理,代理名称:chatgpt,目标URL:http://服务器IP:999,确定

    宝塔面板添加反向代理
    宝塔面板添加反向代理

  3. 登录域名控制台,我这里是 阿里域名控制台,解析 - 添加记录 - 主机记录:上面解析域名的前缀,记录值:服务器IP,确认

    阿里域名控制台添加解析记录
    阿里域名控制台添加解析记录

  4. 服务器开放端口:在阿里云服务器控制台 - 安全组 - 服务器 - 管理规则 - 手动添加 - 目的:999/999,源:选择所有IPv4(0.0.0.0/0),保存(入方向、出方向都要添加)

    服务器开放端口
    服务器开放端口

  5. 此时访问你之前解析的域名:http://解析的域名/wx,出现:'signature',表示已经搭建成功了,为了安全起见,下面再给域名加个SSL证书就完美了。

  6. 宝塔面板申请SSL证书:宝塔面板 - 网站 - 点击域名后的设置 - SSL - Let's Encrypt - 申请证书,等待一会即可申请成功。(如果不成功,可查看阿里云申请证书教程来申请免费证书,有效期90天,申请下来后,下载解压证书,将PEM、KEY内容填到对应当前内容里保存即可。)

    宝塔面板申请SSL证书
    宝塔面板申请SSL证书

  7. 打开强制HTTPS,使用HTTPS来访问解析的域名,即可看到前面变成了小锁🔒(页面此时502,不要慌,继续往下看)

    宝塔面板打开HTTPS
    宝塔面板打开HTTPS

  8. 宝塔放行端口:宝塔面板 - 安全 - 添加端口规则 - 端口:14300,方向:入站/出站(2个都要添加) - 确定

    宝塔放行端口
    宝塔放行端口

  9. 此时使用HTTPS域名访问:https://解析的域名/wx,出现:'signature',表示已经搭建成功了。

微信公众号设置

微信公众号 - 基本设置 - 服务器配置,配置如下,设置好,提交成功表示配置成功。

  • 服务器地址:https://解析的域名/wx
  • 令牌:config.json 里的 wechatmp_token(两者保持一致)
  • 消息加解密密钥:config.json 里的 wechatmp_aes_key(两者保持一致)

服务器配置
服务器配置

给公众号发送消息,bot回复则代表对接成功

公众号回复效果图
公众号回复效果图

ChatGPT-on-WeChat 如何对接 WordPress

我开发了一款插件,用户通过关键词来搜索WordPress文章链接,并将文章标题、文章链接返回给用户。

WordPress插件效果图
WordPress插件效果图

  1. 下载插件,将压缩包上传到服务器 chatgpt-on-wechat/plugins 文件夹下并解压

  2. 修改 wordpress插件/config.json

    {
     "wordpress": true,
     "wordpress_prefix": "搜",
     "wordpress_base_url": "改为自己的WordPress博客地址"
    }
  3. 重启 ChatGPT-on-WeChat,执行下面命令

    # 直接杀死之前的进程,否则端口会被占用
    kill -9 ps -ef | grep app.py | grep -v grep | awk '{print $2}'
    # 启动项目
    nohup python3 app.py & tail -f nohup.out

ChatGPT-on-WeChat 插件

安装完插件后,需要重启一下项目才能正常使用

  1. fatwang2/sum4all:为大模型内容总结服务,有微信插件、telegram机器人 、iOS快捷指令 三个版本,其中微信插件需要自行部署,需配合chatgpt-on-wechat项目,其他插件可点击链接自行体验
  2. XcNgg/chatgpt-on-wechat-plugins
    • FishCalendar 摸鱼日历
    • SearchDomain 域名查询
    • SearchIP ip查询
    • TodaysQuotationste 每日语录
    • TopHub163 网易新闻热榜
    • RandomWord 随机语录
    • WindowsHostInfo Windows主机状态巡检
    • PerpetualCalendar万年历
    • Almanac 黄历
    • CurrentAffairs 政务要闻
    • Poetry 随机诗词
    • CetsHelper CETS单词助手(每日背单词)
    • CTF日历
❌