无服务器搭建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错误

 目录