
想给团队、朋友或者自己的小圈子搭一个独立的聊天空间,又不想买服务器、不想维护服务器?EdgeChat 就是干这个的:它是一个开源的团队聊天系统,全部运行在你自己的 Cloudflare 账号里,部署和更新都交给 GitHub Actions 自动完成。它能做什么:
- 群聊 + 私信:公开群、私有群、一对一私信,实时消息(WebSocket)
- 语音和文件:语音消息、文件上传,私信里还能一对一语音通话
- Telegram 双向桥接:把一个 EdgeChat 群和一个 Telegram 群打通,两边消息互相同步,TG 那边的人不用注册账号
- 消息与附件加密:新消息正文和新上传的附件在服务端用 AES-256-GCM 加密存储;管理员后台不提供任何查看消息正文的入口
- 邀请制:不开放公开注册,只能由管理员建号或发邀请链接,天然防灌水
- 零服务器:不需要 VPS,全套跑在 Cloudflare 免费额度里(个人小圈子通常够用)
原项目地址:https://github.com/aozorae/Edgechat 官方文档:https://echat.azora.top 在线演示(纯前端模拟,先看界面再决定要不要装):https://edgechat-demo.wcjxxgaq.workers.dev

聊天界面

管理后台
本文写于 2026 年 10 月,基于 EdgeChat v2.17.1。项目更新很快,个别菜单名称可能微调,但整体流程是稳定的。全文没有视频,只有文字和可复制的配置块,照着一步步点就能完成。
一、先说清楚:它是怎么跑起来的
理解了架构,后面每一步在干什么你心里就有数了:
| 组件 | 用途 |
|---|---|
| Cloudflare Workers | 跑后端程序(部署后 Worker 名叫 cfchat,是历史遗留名,不用管) |
| Cloudflare D1 | 数据库,存用户、群组、消息 |
| Cloudflare KV | 存登录会话 |
| Cloudflare R2 | 存聊天附件、头像(相当于对象存储) |
| Durable Objects | 扛实时 WebSocket 连接,实现消息秒达 |
| GitHub Actions | 你 Fork 的仓库里自带工作流,负责建资源、建数据库、部署、升级 |
你要准备的东西只有三样:
- 一个 GitHub 账号(免费)
- 一个 Cloudflare 账号(免费)
- (可选,强烈建议)一个托管在 Cloudflare 上的域名,用来绑自己的网址。没有的话先用 Cloudflare 给的
workers.dev免费子域名也能跑,但这个域名在国内网络下经常打不开,所以最终建议绑域名。
几个提前要知道的点,避免装完才发现和预期不符:
- 消息默认只保留 7 天,到期自动硬删除、不可恢复。这是出厂设置,嫌短可以在部署时改成 30 天、365 天(第八步讲),别等聊了一个月才发现历史消息没了。
- 它的加密是服务端加密,不是端到端加密。意思是数据在 Cloudflare 上是密文存储、管理员后台也看不到正文,但理论上掌握部署密钥的人仍能解密。自用小圈子足够,别把它当 Signal 用。
- 没有默认管理员密码,也不开放注册。管理员账号在部署时由你自己通过配置指定(第四步讲),漏配了站点能打开但没人能登录,需要补配后重跑部署。
二、第一步:创建 Cloudflare API 令牌
GitHub Actions 要替你操作 Cloudflare,得先给它一把「钥匙」——API 令牌。
- 登录 Cloudflare,打开 API 令牌页面:https://dash.cloudflare.com/profile/api-tokens
- 点击「创建令牌」(Create Token)
- 找到「编辑 Cloudflare Workers」(Edit Cloudflare Workers)模板,点击「使用模板」

创建令牌时选择「编辑 Cloudflare Workers」模板,别选只读模板 4. 在权限列表里核对并补齐。模板自带的权限会随 Cloudflare 版本变化,不要照抄行数,以最终摘要里包含下面 4 项「编辑」权限为准;缺哪项就点「添加更多」补哪项,别重复添加:
Workers Scripts 编辑(Edit)
D1 编辑(Edit)
Workers KV Storage 编辑(Edit)
R2 编辑(Edit)
- 「账户资源」选择:包含 → 指定账户 → 选中你准备部署的 Cloudflare 账户
- 客户端 IP 过滤、有效期保持默认即可,点「继续以显示摘要」→「创建令牌」
- 令牌只完整显示这一次,立刻复制保存好。丢了没法再看,只能删掉重建。

令牌只显示一次,创建后立刻复制(图中账号 ID 与令牌已脱敏)
另外记下你的账户 ID(Account ID):在 Cloudflare 账户首页或「Workers & Pages」概览页能找到,是一个 32 位的十六进制字符串,长这样(注意别和某个域名的 Zone ID 弄混,要的是账户级的):
0123456789abcdef0123456789abcdef
后面要往 GitHub 里填的两个值,就是令牌和账户 ID,名字先记住:
CLOUDFLARE_API_TOKEN
CLOUDFLARE_ACCOUNT_ID
三、第二步:(建议先做)开通 R2
R2 是存附件用的。先说清楚不开通的后果:不开通也能部署成功,文字聊天、后台管理都正常,但任何人都传不了图片和文件(上传时会提示「当前部署没有绑定 R2,无法上传附件」),Telegram 桥接的文件同步也用不了。
开通方法:登录 Cloudflare 控制台,左侧进入「R2 对象存储」,按页面提示点启用即可(免费额度 10GB;开通时 Cloudflare 可能要求先绑一张支付卡做验证,免费额度内不扣费)。建议在第一次部署前就开通,省得装完再重跑一遍部署。当然,忘了开也没关系——开通后回 GitHub 重运行一次 Deploy Worker,它会自动建好存储桶并恢复附件功能,不用动任何配置。
部署工作流将要自动创建的资源名是固定的,提前了解一下,装完可以在控制台对号入座:
D1 数据库:cfchat-db
KV 命名空间:cfchat-sessions
R2 存储桶:cfchat-files
Worker:cfchat
四、第三步:Fork 项目仓库
- 打开原项目:https://github.com/aozorae/Edgechat
- 点击右上角「Fork」,仓库名保持默认,点「Create fork」
- 等它复制完成,你会得到一个属于你自己的仓库,后续所有配置都填在这个 Fork 里,原仓库不用再管

在原仓库右上角点击 Fork
注意:Fork 出来的仓库要保持公开。一是后台的「检查更新」功能要靠浏览器匿名读 GitHub 做版本比对,二是自动同步上游也依赖公开仓库。
五、第四步:配置仓库 Secrets(最关键的一步)
打开你 Fork 的仓库,进入:
Settings → Secrets and variables → Actions → Secrets → New repository secret

仓库的 Actions Secrets 配置页
逐个添加下面 4 个 Secret(Name 一字不差,Value 填你自己的):
CLOUDFLARE_API_TOKEN
填第一步创建的 Cloudflare API 令牌。
CLOUDFLARE_ACCOUNT_ID
填第一步记下的账户 ID(32 位十六进制)。
EDGECHAT_ADMIN_USERNAME
你给管理员起的用户名,自己定,例如 admin。
EDGECHAT_ADMIN_PASSWORD
管理员密码,自己设一个强密码。没有默认值,这就是你之后登录用的密码,记牢。
可选再加一个(管理员的显示昵称,不填就默认用用户名):
EDGECHAT_ADMIN_DISPLAY_NAME
关于管理员配置的几条规则,踩坑的人很多,务必看完:
- 用户名和密码必须成对填,只填一个工作流会直接报错停下。
- 首次漏配了不用慌:补齐这两个 Secret,重新运行一次部署即可,不需要删数据库重来。
- 这套凭据只在账号不存在时创建账号。部署成功后再改这里的密码,不会改掉线上管理员的密码(改密码要登录后台改);它也不会把同名普通用户提升为管理员。
- 旧版名称
CFCHAT_ADMIN_USERNAME/CFCHAT_ADMIN_PASSWORD仍兼容,但新部署就用上面的新名称。
六、第五步:运行部署工作流
- 在你的 Fork 仓库点「Actions」页签,选择左侧的「Deploy Worker」
- 如果页面提示工作流被禁用(Fork 的仓库默认如此),先点「I understand my workflows, go ahead and enable them」启用
- 点「Run workflow」,分支选默认分支(
main或master,以你 Fork 的实际默认分支为准),确认运行 - ⚠️ 展开 Run workflow 时会看到两个选项:
apply_encryption_keyring和rotate_encryption_key,两个都保持不勾选! 这是密钥覆盖/轮换的高级入口,新手部署误勾可能直接失败。正常部署和正常更新永远不用勾它们。 - 等待运行完成(一般几分钟)。全绿打勾就是部署成功。

在 Actions 页面手动运行 Deploy Worker
这一次运行,工作流自动替你做完了这些事:
- 安装依赖、跑测试、构建前端
- 检查并创建 D1 / KV / R2 资源(已有同名资源会复用,不会重复建)
- 首次创建 D1 时执行完整建表,并应用全部数据库迁移
- 按第四步的配置创建管理员账号,并在发布前验证「至少有一名能登录的超级管理员」,验证不过会停下并提示,不会发一个登不进去的站糊弄你
- 首次部署自动生成服务端加密密钥并注入 Worker(后续部署只检查存在,不会重新生成、不会覆盖)
- 把 Worker 部署上线
七、第六步:首次登录检查
部署成功后,你的站点地址是:
https://cfchat.你的子域名.workers.dev
其中「你的子域名」是你开通 Workers 时设置的那个,在 Cloudflare 控制台「Workers & Pages」里能看到。打开站点,用第四步设的管理员用户名和密码登录,逐项检查:
- 首页能打开、能正常登录
- 进管理后台,随便发一条消息测试群聊
- R2 已开通的话,试着发一张图片,确认附件可用
- 给朋友开账号:EdgeChat 不开放注册,在后台「注册邀请」里可以直接创建用户,或者生成一条邀请链接发给对方自助注册
- 顺手确认:后台里没有任何能看别人聊天正文的入口——这是它故意的设计,不是功能缺失
如果站点能打开但登录提示账号不存在,多半是第四步两个管理员 Secret 漏填或只填了一个。补齐后回 Actions 重运行 Deploy Worker 即可。
八、第七步:绑定自己的域名(建议做)
workers.dev 子域名在国内经常访问异常,长期用务必绑自己的域名,前提是域名已托管在 Cloudflare(DNS 在 Cloudflare 解析)。
- 打开 Cloudflare 控制台 →「Workers & Pages」→ 点开
cfchat这个 Worker - 进入「设置 → 域和路由」(Settings → Domains & Routes)→「添加」→「自定义域」
- 填你想用的完整子域名,例如:
chat.example.com
- 确认添加,Cloudflare 会自动建好 DNS 记录并签发 HTTPS 证书,等一两分钟就能用新域名打开
注意事项:
- 绑定域名不需要给第二步那个 API 令牌加任何权限(部署工作流本身不管域名路由,域名是你在控制台手动绑的)。
- 如果以后换域名:用了 Telegram 桥接的,要去后台把 Bot Token 重新保存一次,系统会按新域名重新设置 Webhook,不然 TG 同步会断(第十步细说)。
- 老版本升级上来的站点,如果以前保存过完整网址形式的站点图标,可能需要在配置里补
SITE_ORIGINS声明本站域名;全新部署的可以忽略这一条。
九、第八步:三个值得改的设置
1. 消息保留天数(重要,建议部署当天就改)
默认消息只保留 7 天。清理任务每天约 UTC 19:00(北京时间凌晨 03:00)执行一次,把超过保留期的消息硬删除,附件核对引用后一并删,删了就是删了,之后再把天数调大也找不回来。
改法(通过仓库变量,注意是 Variables 不是 Secrets):
- 打开 Fork 仓库:
Settings → Secrets and variables → Actions → Variables - 点「New repository variable」,Name 填:
MESSAGE_RETENTION_DAYS
- Value 填纯数字,不要引号、不要带「天」字,例如想保留一个月:
30
- 回 Actions 手动运行一次 Deploy Worker,部署完成即生效。以后每次部署都会沿用这个变量,不会被打回 7 天。
补充说明:填 0 或者乱填不是「关闭清理」,工作流会直接报错拦下(手动在面板改的无效值则会回退为 7 天)。所以只填正整数。另外这个设置只管聊天消息,不管软删除数据和孤儿文件的保留期。
也可以直接在 Cloudflare 面板改(Workers & Pages → cfchat → 设置 → 变量和密钥,添加文本类型同名变量),但只要你还用 Actions 部署,就必须同时设仓库变量,否则下一次自动部署会以仓库变量为准覆盖面板的值。
2. 站点名称与外观
登录后台的「网站设置」可以改站点名称、图标等;「站点外观」能换配色。部署完先把名字改成你自己的,站点看起来就像个正经地方了。
3. 后台自检
后台左侧导航最底部有「安装与维护」页面(路径 /admin/maintenance),能一键检查 D1、KV、R2、Durable Objects 是否都连通、数据库迁移是否齐全,还能导出一份不含密钥的诊断报告。装完、以及每次大更新后,建议进去跑一次自检,心里有底。
另外还有一个进阶功能「隐身模式」:可以把站点的公开入口藏起来、给静态资源也加上访问鉴权,适合只想小圈子内部用的人。开启方式见官方文档的「隐身模式」一页,这里不展开。
十、可选进阶一:Telegram 双向桥接
这是 EdgeChat 的招牌功能:把一个 EdgeChat 群和一个 Telegram 群绑定,文字、Emoji、图片、视频、语音、文件在两边双向同步。TG 群里的人不需要有 EdgeChat 账号,他们的消息进到网页端会带一个小小的 TG 来源标识。
前提:站点已开通 R2(不开通时只有文字能同步,文件会跳过并在消息后标注未同步)。

两个聊天入口,同一段讨论:左边在网页里发,右边 Telegram 里就能看到,反之亦然
1. 在 Telegram 建 Bot 并拿 Token
- 在 Telegram 里打开
@BotFather,发送:
/newbot
- 按提示给 Bot 起名字和用户名,BotFather 会返回一串 Bot Token,形如:
123456789:AAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
保存好,下一步要用。
2. 让 Bot 能读到群消息(二选一)
Telegram 的 Bot 默认有「群组隐私模式」,开着的话它只能收到 @ 它或者回复它的消息,普通聊天同步不过来。两种解法:
- 方法 A:找
@BotFather发送/setprivacy,选你的 Bot,选Disable - 方法 B:把 Bot 拉进目标 TG 群后,直接把 Bot 设为该群管理员
3. 把 Bot 拉进群,拿到群 ID
把 Bot 加入目标 Telegram 群(或超级群)。然后准备这个群的 群 ID:群组 ID 是负数,超级群通常以 -100 开头,例如:
-1001234567890
拿群 ID 的常用办法:把 Bot 拉进群后在群里随便发一句话,再打开下面这个地址(把 <TOKEN> 换成你的 Bot Token),在返回内容里找 chat 的 id:
https://api.telegram.org/bot<TOKEN>/getUpdates
注意目标必须是群聊,频道不行;私聊也不能桥接。
4. 在 EdgeChat 后台连接并映射
- 用管理员账号登录 EdgeChat,进后台「Telegram 互通」
- 粘贴 Bot Token,点「连接 Bot」。系统会自动验证 Token 并为当前站点设置好 Webhook,你不用手动配任何回调地址
- 在同一页面创建群组映射:选一个本站的公开或私有群组,填入上一步的 TG 群 ID,保存
映射规则:一对一。一个 EdgeChat 群只能绑一个 TG 群,反之亦然;映射可以随时暂停、恢复或删除。
Bot Token 不用写进 GitHub Secrets 或任何配置文件:它在后台填入后,会被站点的服务端加密密钥加密后存进数据库,前端读不回来,安全上可以放心。
5. 同步规则与限制(先了解再用)
- 两边都只转发本站原创消息:从 TG 过桥来的消息不会再被转发到另一个桥,不会套娃循环
- 文件上限 16 MiB:TG 发来的超限文件不下载,只同步文字说明;EdgeChat 发出的超限附件会跳过附件、只同步文字
- TG 的文件会被下载、加密后存进你的 R2,之后不再依赖 Telegram 的文件地址
- 暂不支持:贴纸、动画、消息编辑、撤回、回复关系、话题(Topic)映射
- 换了站点域名后桥接不同步:回后台把 Bot Token 重新保存一次,让系统按新域名重设 Webhook
6. 桥接故障速查
| 现象 | 先查什么 |
|---|---|
| 后台提示 Token 无效 | Token 是否完整、有没有多余空格 |
| 存不了群组映射 | Bot 是否已进群、群 ID 是否为负数、目标是不是群而不是频道 |
| TG 消息进不了 EdgeChat | 隐私模式是否已关 / Bot 是否是管理员、映射是否已启用 |
| EdgeChat 消息进不了 TG | Bot 是否还在群里、有没有发言权限 |
| 文件不同步 | 是否超过 16 MiB、站点是否已开通 R2 |
附带一提:Telegram 离线提醒
和桥接是两回事:成员可以在自己的个人设置里绑定提醒 Bot,网页关掉时,有私信或 @ 提醒会推到他的 Telegram。提醒里不包含消息正文,只提示有新消息,不泄内容。群里大家本来就重度用 TG 的话,这个功能很实用。
十一、可选进阶二:私聊语音通话的 TURN 中继
EdgeChat 的一对一私聊语音默认走 P2P 直连,多数网络下没问题;遇到严格 NAT 直连失败时,需要 TURN 中继兜底(也可以手动强制走 TURN,避免向对方暴露自己的网络地址)。
配置方法:
- 在 Cloudflare 控制台的「Realtime」里创建(或复用)一个 TURN Key,记下它的 Key ID(uid)和 Key Token(key)
- 回到 Fork 仓库的 Secrets,成对添加:
EDGECHAT_TURN_KEY_ID
EDGECHAT_TURN_API_TOKEN
- 两项必须都填,只填一项工作流会报错。重新运行一次 Deploy Worker,工作流会把它们以 Worker Secret 的形式注入,不要把 TURN 密钥写进任何明文配置文件或前端
- 通话时客户端拿到的是 1 小时有效的短期凭据,单次通话最长 1 小时;Cloudflare 对 SFU 与 TURN 每月有共享的免费流量额度(当前为前 1000 GB 免费,超额按量计费,以官方定价页为准)
不配 TURN 完全不影响文字聊天,只是语音通话在部分网络下可能连不上、会给出错误提示。
十二、更新与日常维护
方式一:手动同步(Sync fork)
- 打开你的 Fork 仓库首页,点文件列表上方的「Sync fork」
- 看清 GitHub 显示的差异再点「Update branch」。如果它提示要「丢弃 N 个提交」,而那些提交里有你自己的改动,千万别点——先备份你的改动,再用 Git 正常合并处理冲突

Sync fork 面板:注意看清「丢弃提交」的提示再确认
- 同步完成后,如果这次更新包含后端/前端代码,Deploy Worker 会自动触发;打开 Actions 确认最新一次运行成功。如果没自动跑(比如只改了不在监听范围内的文件),手动 Run workflow 一次即可,密钥选项照例不勾
- 更新后:打开站点确认能登录;进后台「网站设置」点「检查更新」确认版本跟上;再去「安装与维护」跑一次自检
数据库迁移不用你操心:工作流每次部署前都会检查并自动应用未执行的迁移,结构对不齐会停下来报错,而不是硬上。
方式二:开启自动更新(Sync Upstream 工作流)
仓库自带定时同步:每天 UTC 01:17 和 13:17(北京时间 09:17、21:17)检查上游,只自动跟进带稳定版 / 安全更新标记的发布,标记之后的开发中提交不会跟,相对稳妥。首次启用要做这几步:
- 先按方式一手动 Sync fork 一次,让你的仓库里有
sync-upstream.yml这个工作流文件 - 去 Actions 页面把
Sync Upstream工作流启用(Fork 仓库的定时工作流默认是禁用状态;另外公开仓库 60 天没活动,GitHub 也可能自动暂停定时任务,届时回来重新启用即可) - 推荐加一个同步专用令牌:去 GitHub 的开发者设置创建一个 fine-grained 个人访问令牌(PAT),只授权你这个 Fork 仓库,权限只开两项:
Contents: Read and write
Workflows: Read and write
然后把它存为仓库 Secret:
EDGECHAT_SYNC_TOKEN
不配这个令牌的话,普通源码同步能用内置令牌完成,但一旦上游更新里包含工作流文件本身,同步会报错失败。令牌有到期时间,记得在过期前换新。
- 保留原有全部 Cloudflare Secrets 和仓库变量,默认分支要允许工作流写入
- 手动运行一次
Actions → Sync Upstream → Run workflow验证能跑通。注意:同步成功 ≠ 部署成功,还要去看紧接着那次 Deploy Worker 是否成功。不想自动更新了,把工作流 Disable 即可
关于加密密钥(了解即可,别乱动)
- 加密密钥由工作流自动管理:首次部署生成,后续部署原样保留,永远不要手贱去删 Worker 的加密 Secret——删掉或换掉,历史密文(包括存着的 Telegram Bot Token)就再也解不开了
- 真想轮换:手动运行 Deploy Worker 时勾
rotate_encryption_key,它只新增一把新密钥并切换为当前使用,旧密钥全部保留,旧消息照常可读 apply_encryption_keyring是手动提供完整密钥环的高级入口,新手不要碰;两个密钥选项也不能在同一次运行里同时勾选- 如果你希望密钥完全握在自己手里备份,可以在首次部署前就准备好密钥环 JSON,存为仓库 Secret
EDGECHAT_ENCRYPTION_KEYRING,格式如下(值要用真正的 Base64 编码 32 字节随机密钥):
{"activeKeyId":"v1","keys":{"v1":"BASE64_ENCODED_32_BYTE_KEY"}}
十三、手动部署(进阶,新手跳过)
不想用 GitHub Actions 的人也可以在本地部署,要求 Node.js 24。概要流程:
git clone https://github.com/aozorae/Edgechat.git
cd Edgechat
npm ci
把 wrangler.example.toml 复制为 wrangler.toml,把里面的 D1 数据库 ID、KV 命名空间 ID 换成你自己在 Cloudflare 建好的资源(数据库名、桶名沿用 cfchat-db / cfchat-files 最省事)。先完成建表与迁移,再初始化管理员账号。管理员初始化有现成脚本,密码走终端输入、不落文件:
export EDGECHAT_ADMIN_USERNAME=admin
read -r -s -p 'Set administrator password: ' EDGECHAT_ADMIN_PASSWORD
export EDGECHAT_ADMIN_PASSWORD
if npm run admin:bootstrap; then
unset EDGECHAT_ADMIN_PASSWORD
npx wrangler d1 execute DB --remote --config wrangler.toml --file .tmp/edgechat-admin-upsert.sql
else
unset EDGECHAT_ADMIN_PASSWORD
fi
最后发布:
npm run deploy
提醒三点:第一,新装和升级不是一回事——全新空库才执行完整 worker/schema.sql,旧库升级要走迁移规划脚本(node .github/scripts/prepare-d1-migrations.mjs 生成、执行、再加 --verify 验证),千万别对旧库重跑全量建表、更别逐个乱跑历史迁移文件。第二,发布前先迁移并验证、再发 Worker,顺序反了线上会报错。第三,手动部署一样要自己保管好加密密钥和定期同步上游代码,运维负担比 Actions 方式大得多,没有特殊需求就用第六步的自动部署。项目还提供 Docker 部署方式(仓库里的 DOCKER.md),有自己服务器的人可以看那篇。
十四、常见问题汇总
部署工作流中途失败怎么办? 先看失败在哪一步。最常见是令牌权限不全(回第一步核对 4 项编辑权限都在)或账户 ID 填错(填成了 Zone ID)。Secrets 只填了一个管理员项也会在管理员步骤被拦下。改好后直接重运行工作流,它是幂等的,不会把已有资源建重。
站点能打开,但没有账号能登录?
管理员 Secrets 漏配或只配了一项。补齐 EDGECHAT_ADMIN_USERNAME 和 EDGECHAT_ADMIN_PASSWORD 后重跑部署。站本身没有默认密码、没有公开注册入口,这是设计如此,不是装坏了。
部署后改了管理员 Secret,密码怎么没变?
设计如此:初始化凭据只负责「创建不存在的账号」,不重置已有账号。改密码请登录后台修改;管理员账号彻底丢失(忘密码又没别的超管)时,不要清库,官方仓库的 docs/admin-bootstrap.md 与权限说明里有显式的超管恢复流程,照那篇操作。
上传图片/文件提示没有绑定 R2? 账号还没开通 R2。去 Cloudflare 开通 R2 后重跑一次 Deploy Worker 即可自动恢复,不用改配置。
消息怎么过几天就没了?
默认保留 7 天,见第九节,部署当天就把 MESSAGE_RETENTION_DAYS 仓库变量设好。已经被清掉的消息无法恢复。
同步上游时提示冲突 / 要丢弃提交? 停手。那说明你 Fork 里有自己的改动。先把改动备份成分支,再用 Git 合并上游,别用 Sync fork 的丢弃功能硬覆盖。
自动更新怎么停了?
公开仓库 60 天无活动,GitHub 可能暂停定时工作流;或者 EDGECHAT_SYNC_TOKEN 过期了。去 Actions 里重新启用工作流、更新令牌即可。
后台「检查更新」显示无法准确检查? 你的仓库要是公开的;另外未推送的改动、GitHub 接口限流都会导致检查不准,稍后再试即可,这不影响站点运行。
十五、写在最后
整套流程走下来你会发现,真正需要你动手的只有三处:建一个 Cloudflare 令牌、Fork 一下仓库、填 4 个 Secret。剩下的建资源、建库、迁移、加密、发布,全由工作流包办;日后更新点一下 Sync fork,或者干脆开自动更新,连点都省了。
几个链接汇总,方便收藏:
原项目:https://github.com/aozorae/Edgechat
官方文档:https://echat.azora.top
在线演示:https://edgechat-demo.wcjxxgaq.workers.dev
Telegram 社区:https://t.me/EdgeChatlounge
项目采用 GPL-3.0 协议开源。文中界面截图来自 EdgeChat 官方文档与项目仓库。最后提醒一句:EdgeChat 只是软件,实例是你自己在运营——成员数据、内容合规、密钥备份,都由部署者自己负责。把管理员密码和加密密钥当回事,这个聊天站就能稳稳地跑很久。
评论