背景
由于 LeanCloud
的各种“你懂的”的原因,现在国内节点需要备案等等限制
加上自己又想白嫖 LeanCloud
来实现浏览量+评论管理+邮件通知一条龙服务
网上也没有很好的综合文档,所以这里整理一份完整的操作步骤
# 20200926 更新
国内大量使用国际版LeanCloud后端的博客的Valine评论一齐失效
通过Valine的Github的Issue得知,早在5月份LeanCloud官方就低调表示us.avoscloud.com域名将于不久后下线。
参考上方的讨论办法,现在如果使用国际版LeanCloud作为Valine评论的后端的话则必须指定自定义服务器URL才能正常使用了。
自定义服务器的URL需要到LeanCloud后台查看。打开后台之后进入Settings - App Keys,找到Domain whitelist,里面的Request domain里面的那个xxxxxxxx.api.lncldglobal.com就是你需要指定的服务器URL。其中xxxxxxxx就是各位的AppID的前8位字符。
然后再
config.js
里加上serverURLs:'https://xxxxx.api.lncldglobal.com',
即可
# 参考来源
Valine :评论管理系统
Valine-Admin:
Valine v1.4.0
之后已经去除了邮件提醒功能,所以我们这里使用Valine-Admin
by @zhaojun1998LeanCloud流控原因的解决方案:由于白嫖党过多导致的官方限流解决方案
# 开始
# 1. 打开LeanCloud
官网,注册账号
# 2. 登陆
登陆之后右上角选择 国际版【如果你的域名备过案了就选个正常节点就行,但是没备案的或者使用ghpages这种的,请选择国际版】,然后创建新的应用
# 3. 应用创建后
应用创建好以后,进入刚刚创建的应用,选择左下角的设置
>应用Key
,找到你的APP ID
和APP Key
,然后填入我们项目的 config.js
valineConfig: {
appId: 'xxxxx',// your appId
appKey: 'xxxxxx', // your appKey
}
# 4. valine-admin
的配置
这段不做详细介绍,参见官方说明
要注意的几个点:
- 记得在 设置->域名绑定->云引擎、ClientEngine 域名 这里绑定你的域名,这就是为什么要选个国际版,因为没国内节点没备案你是过不了审的
- 部署填写代码库直接是在 云引擎->部署页面最下面的
Git部署
Leancloud 休眠策略【重要】
首先按照大佬给的教程如下:
免费版的 LeanCloud 容器,是有强制性休眠策略的,不能 24 小时运行:
- 每天必须休眠 6 个小时
- 30 分钟内没有外部请求,则休眠。
- 休眠后如果有新的外部请求实例则马上启动(但激活时此次发送邮件会失败)。
分析了一下上方的策略,如果不想付费的话,最佳使用方案就设置定时器,每天 7 - 23 点每 20 分钟访问一次,这样可以保持每天的绝大多数时间邮件服务是正常的。
首先需要先配置下 Web 主机的域名【现在叫”云引擎域名“】,使用定时器时要用到。配置方式如下。
后台登录需要账号密码,需要在这里设置,只需要填写
email
、password
、username
,这三个字段即可, 使用email
作为账号登陆即可。(为了安全考虑,此email
必须为配置中的SMTP_USER
或TO_EMAIL
, 否则不允许登录)# LeanCloud 自带定时器[推荐]
首先需要添加环境变量,
ADMIN_URL
:Web 主机域名【现在叫”云引擎域名“】
,如图所示(添加后重启容器才会生效):然后点击云引擎 - 定时任务,新增定时器,按照图片上填写:
注意, LeanCloud 最近更新了定时器校验规则, 需要将 Cron 表达式写为:
0 */20 7-23 * * ?
!!!上面这个写法是国内的时间!!!国际版和国内有八小时时差,所以国际版请使用
0 */20 0-15 * * ?
添加后要记得点击启用:
启用成功后,每 20 分钟在云引擎的 - 应用日志中可以看到提示:
# 5. 流控问题解决
用一段时间后,会在日志里发现定时任务报错:"因流控原因,通过定时任务唤醒体验版实例失败,建议升级至标准版云引擎实例避免休眠",官方说法是:
然后我去参照了这篇文章,里面介绍的很详细了,就不重复说明了
基本思路就是:
既然你自带的定时任务你可以监控到然后限制,那么我就定时从外部发起请求,只要外部发起请求没有问题,那就可以保证适当的活跃时间,并且避开白天休眠的情况
使用 Github Action,来代替自带的定时器功能,或者代替休眠期后的第一次唤醒工作,因为有人发现只要从休眠中的第一次唤醒是外部发起的,后面定时器执行就不会报错