无服务器搭建 Artalk 评论系统后端

这篇的无服务器部署 Artalk,指的是 NoServer 而不是 Serverless

这篇所写的是部署后端,关于前端部署十分简单,这里不多阐述

Artalk,一款简洁有趣的自托管评论系统。此时,Valine 作为老大哥就不得不跳出来了。但是,作为 Valine 的 Leancloud 作为第三方托管,数据放在别人那里总是不舒服的,譬如2020/9/24Leancloud 华北节点云引擎被 DDoS 攻击

image-20201001071514956

或者说 LeanCloud 将开发版限额一限在限,亦或者 leancloud 多次宕机, 作为自由开放的我自然不舒服。加上 leancloud 开发版的 SLA 实在令人担忧【不包括休眠时间,一个月内宕机超过 20 次(不过 leancloud 开发版确实没有保证 SLA)】,以及比较严重的管理员冒充。我一直再找一个能用自己服务器托管评论系统,真巧,我找到了 Artalk。Artalk 的优点:

  • 轻量简洁 (~23kB gzipped)

  • 有趣有爱

  • 自托管

  • Markdown

  • 表情自定

  • 滑稽表情包

  • 管理员密码,防冒名

  • 验证码,提交频率限制

  • 通知中心 ,邮件提醒

  • 自定义某些页面 仅管理员可评论

  • 无限层级回复

  • 滚动加载更多

  • 评论折叠

  • 一页多个评论

  • TypeScript

  • 提交频繁验证码

  • 无数据库

    当然没有垃圾评论检测就很蛋疼

有服务器部署起来相当简单,宝塔【虽然被炸 0day,不过修修补补还能用】+Artalk 能实现 5 分钟部署完毕 【Jalen 的 Artalk 自托管评论系统的后端部署】,但是,习惯 Valine 的群友一看到后端部署就立刻皱起了眉头:我没有服务器,怎么办?

Artalk 的后端是 PHP 的,虽然作者也承诺了会开发别的后端Go API / Node API / Python API,但迟迟没有写出来,考虑到QWQCODE 是个学生【我也是】,那么咕咕咕就情有可原了。

实际上,我用的是 Euserv 白嫖的,至少 SLA 还是过的去【>=99%】,但是无论是申请还是部署都非常麻烦。此时,我就在想,既然有免费的 php 托管商,何苦不用呢?

目前找到两个:Gearhost 和 000webhost

注意,heroku 虽然也有免费容器部署 php,但是 heroku 是沙盒制度,一个评论存储为文件后会删除,所以 heroku 并不适合作为 artalk 后端。

安装

设置 Artalk

与其它评论系统不同,artalk 本身并没有做到开箱即用这一特点,所以,你还要做一些事先准备。

GithubAction+Composer 安装

Artalk 为了缩小原文件大小,并没有安装好依赖,依赖需要你自己安装。

如果你本地有 composer,那就直接克隆本地运行 composer。但不论其便携性还是效率都不高【composer 安装起来比较麻烦】,所以,我建议此处用 GithubAction 实现 composer 安装。当然你有 composer 环境就可以直接 clone 在本地安装。

进入 原项目 ,Fork 到你自己的账户

image-20201001073812407

image-20201001073913581

新建一个文件,文件名为:.github/workflows/composer.yml

内容为:

name: composer

on: 
  push:
    branches: 
      - master # build master branch only

jobs:
  download:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout
      uses: actions/checkout@v2
      with:
        ref: master

    - name: Install
      run: |
        npm install composer
        composer install
        
        
    - name: Deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: ${{ secrets.TOKEN }}
        publish_dir: ./

image-20201001074023800

设置 Secret,NAME 为 TOKEN, 内容为你的 GithubTOKEN.【Token 的获取与这篇文章关联不大】,请自行百度。

image-20201001081902077

image-20201001081941932

回到仓库,新建一个空白的 .htaccess 文件夹,里面什么都不写[1],并删除根目录底下的.gitignore 触发 GithubAction

此处必须删除 .gitignore【或者你自行修改】,否则接下来出错一律不管

稍后即部署完毕

本地修改配置文件

Clone 你的仓库,指定为 gh-pages 分支

git clone -b gh-pages https://github.com/ChenYFan-Tester/Artalk-API-PHP.git

-b 是强制指定分支的意思

速度慢试试 github.com.cnpmjs.org,阿里 github 镜像

image-20201001082653387

打开并修改 Config.example.php 具体参照 官方文档

完毕后退出,将 Config.example.php 重命名为 Config.php

此时, 你的 artalk 安装终于告一段落, 但是, 你还没有将他们部署上去.

部署

Gearhost

Gearhost 其实是一个小有名气的托管商,Free 计划提供了最高一线程、每小时 256MB 内存、每小时 5%CPU 周期和每月 1GB 流量,作为评论托管是完全足够的。并且不需要信用卡。

进入 Gearhost 注册一个账号, 新建一个免费的 CloudSite。

image-20201001083231112

image-20201001083258674

构建完毕后稍等片刻,进入面板设置:

image-20201001083743275

PHP 版本设置为 7.1

image-20201001085602629

Virtual Directories网址设置为 / 路径设置为 site\wwwroot\public\

image-20201001083959803

进入 Publish 选项卡,勾选 Local GitActivate 这个方式

注意,我强烈不推荐你使用 FTP 上传,FTP 看起来有图形化很方便,但是请注意,Composer 后的文件将近 300+,FTP 最致命的上传方式是 每上传一个文件就会握一次手 ,这样子会严重浪费你的时间。而是用 Github 链接的同学我就要考虑你的危险的想法了,如果 没有 将仓库设置为 Private,那么用 Github 链接是一个非常 不明智 的选择

image-20201001084334323

绑定 git,上传三步走,git init && git add . && git commit -m "OHH" && git push website master

绑定域名什么不多说了,建议套一层 CloudFlare。

Gearhost 所用的共享 ip,来自美国 科罗拉多州 丹佛,三网优化都不好。当然回源 CloudFlare 还是不错的。

DEMO:https://artalk-pub1.cyfan.top/

SLA:还在测试,大约 95%,你可以前往 https://status.cyfan.top 查看详情

在页面 id 为 12345 有几个测试评论,你可以去测试一下,跨域均设置为’*‘。

管理员用户名:admin

管理员邮箱:admin@admin.admin

管理员密码:admin

000webhost

000webhost也是个著名的免费 php 托管商,虽然早年的种种行为看着十分恶心,但是好歹也是个能白嫖的托管商。000webhost 提供了每个账户一个免费的容器,每个容器每月 3GB 流量、300MB 空间、1w 个文件和每天 25 次邮箱发送。

000webhost 的部署相对简单些,直接将所有文件拖拽上传【因为它不支持 git 上传】,稍等即可

image-20201001150747082

上传至 public_html 子文件夹下:

image-20201001151009729

000webhost 不支持设置运行目录,这意味着 data 文件夹将会被曝光,但是我们可以设置 000webhost 的但目录密码保护:

image-20201001151719382

这样,当有人试图访问 data/comments.data.json 时,就会遭到密码拦截。

绑定域名

由于 000webhost 域名验证需要一段时间,请先前往域名托管商设置记录。比如我的 app 名字是 XXX.000webhostapp.com,我要绑定的是 artalk-pub2.cyfan.top,就应该这样设置:

image-20201001152944348

请注意 000webhost 验证域名是通过 dns 记录来验证的,在验证完毕前请不要开启 CDN!

绑定域名,请鼠标移至卡片上,点击 QuickActions,点击 Details

image-20201001152257105

image-20201001152417027

点击 My Domains, 进入设置界面:

image-20201001153112150

点击 Add domain

image-20201001153038499

选择 PointDomain【毕竟把 ns 改到 000webhost 是不可能的】

image-20201001153224077

如实填写,稍等即可。

DEMO:https://artalk-pub2.cyfan.top/public/

SLA:还在测试,大约 90%,你可以前往 https://status.cyfan.top 查看详情

000webhost 默认线路烂的和 shit 一样,强烈建议套 CloudFlare

和另一个 demo 一样在页面 id 为 12345 有几个测试评论,你可以去测试一下,跨域为’*‘。

管理员用户名:admin

管理员邮箱:admin@admin.admin

管理员密码:admin

000webhost 对于这些不能展现他的广告徽标的账户可能会存在限制处理,请注意【老恶心了】。

最后

国庆作业有点多,这篇要不是被我 亲爱 的群友催的要紧,我也不会水这一篇啊呜呜呜。

如果你的 artalk 卡在了转圈圈的问题上,你可以在 html 前面加上这一句

<link href="https://XXX.XXX.XXX/index.php" rel="preconnect" crossorigin>

preconnect 可以强制在渲染页面试并发一个请求,可以有效解决 5s 超时问题和并发过多不稳定导致 cancel 问题。

另外你也可以用我的 artalk 脚本:

https://cdn.jsdelivr.net/gh/ChenYFan-Tester/Artalk@gh-pages/Artalk.js
https://cdn.jsdelivr.net/gh/ChenYFan-Tester/Artalk@gh-pages/Artalk.css
  • 修改超时时间为 60s
  • 掩盖 artalk 标识
  • 杰哥 提示语

如果你觉得不放心,你可以亲自检查 我做了什么 ,我会尽量保证与原仓库同步。

国庆快乐!写作业去了

  1. 此处不写.htaccess,gearhost 就会莫名其妙炸 500 错误

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

 目录