在ghost中集成talkyard,为你的个人博客添加评论系统

将talkyard评论系统加入您的博客,吸引更多同好,碰撞各自的思想

在ghost中集成talkyard,为你的个人博客添加评论系统

什么是ghost

ghost是一款开源的博客系统,帮助开发者、内容创作者来搭建网站、输出内容并创造收益。比起其他的博客平台,比如wordpress、hexo、hugo等,它的优势在于设计出众、色彩鲜艳,主题丰富,自部署便捷而且自带美观的后台、可集成功能齐全——具体的可以查看它的官网:

Ghost: The Creator Economy Platform
The world’s most popular modern publishing platform for creating a new media platform. Used by Apple, SkyNews, Buffer, Kickstarter, and thousands more.

它的缺点在于本地化需要自己修改,而且更注重于营造一个发布者-会员的出版社区,可能对于国人的消费与阅读习惯来说不太贴合。


什么是talkyard?

talkyard是开源免费的评论系统,没有广告,体积小巧,但却可以轻松满足你的过滤垃圾内容、实时预览、响应式设计等等需求。甚至你可以另外部署一个社区以供你的粉丝们交流,确实很让人心动,这也是我最终在disqus、cover comment等竞品里选中它的理由。

Talkyard Blog Comments
Listen to and talk with your readers, get to know what they think and like

如何部署ghost

ghost的部署非常简单,只要按照官网教程一步步进行,很轻松就可完成自己的博客部署,如果您在部署ghost的过程中遇到什么问题,可以在我即将推出的问答社区中提问。

How to install Ghost, the official guide
Everything you need to know about working with the Ghost professional publishing platform.

如何部署talkyard

这是这篇文章的重头戏,我在部署talkyard的过程中遇到了不少问题,一些是因为自身经验不足,一些是因为官方文档不那么详细,我会在下面依次列出,争取能为每一个部署talkyard的同好提供一个完善、简洁的百科式教程。

阅读前的某些定义

  • 假设您的域名为example.com
  • 假设你想部署的talkyard子域名为talkyard,即生产域名为talkyard.example.com
  • 所有的bash或shell代码片段都是逐行依次执行,请勿全部复制粘贴

我的安装环境

  • 腾讯云轻量服务器
    • 4核8G
    • 广州节点
    • x86_64架构
  • Ubuntu系统
    • Ubuntu 22.04 LTS
  • nginx
    • 1.18.0

部署前准备

  • 在您的云服务商dns控制台上解析talkyard子域名,并将域名指向您的服务器IP
  • 在您的服务器防火墙上开放8843、8080端口
  • 请确保您的服务器内存至少大于2G(这是talkyard官方建议)
  • SSH连接服务器后,请使用 sudo su - 命令切换到root身份

安装git、vim及其他

apt-get update
apt-get -y install git vim locales
apt-get -y install tree ncdu

创建大空间空文件

fallocate --length 250MiB /balloon-1-delete-if-disk-full
fallocate --length 250MiB /balloon-2-delete-if-disk-full
fallocate --length 250MiB /opt/balloon-3-delete-if-disk-full
fallocate --length 250MiB /var/balloon-4-delete-if-disk-full

下载talkyard仓库

注意:您只有在/opt/talkyard/中安装才能正常使用备份脚本

cd /opt/
git clone https://github.com/debiki/talkyard-prod-one.git talkyard
cd talkyard

运行开始前的整理脚本

将会安装工具、启用自动安全更新。简化故障排除,并使ElasticSearch正常工作

./scripts/prepare-os.sh 2>&1 | tee -a talkyard-maint.log

运行docker安装脚本

./scripts/install-docker-compose.sh 2>&1 | tee -a talkyard-maint.log

下面是这步可能遇到的问题:

github仓库无法下载

  1. ping测试是否畅通
ping github.com
  1. 如果不通,浏览器访问查询ip网站, 键入github.com查看IP
  2. 在系统的host文件添加github指向
xx.xx.xx.xx github.com
  1. 再次ping测试

报错 https://download.docker.com/linux/ubuntu jammy Release 404  Not Found

  1. 删除现有的docker源
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 安装阿里云镜像源所需的软件包
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
  1. 添加阿里云镜像源的GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  1. 添加阿里云镜像源到APT源列表中
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. 更新软件包列表并安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

继续运行,如果还是不行:

最终解决办法

# 1. 更新apt软件包索引
sudo apt update
# 2. 手动安装docker-compose
sudo apt install docker-compose
# 3.检查docker-compose版本
docker-compose --version

继续运行。

修改talkyard配置文件

修改docker-compose配置

/opt/talkyard/docker-compose.yml 文件中,更改 web 属性下的端口内容:

ports:
  - '8080:80'
  - '8443:443'

修改talkyard的启动设置

修改框架配置

使用命令 vim conf/play-framework.conf 编辑配置

  • 设置 talkyard.becomeOwnerEmailAddress 的值为你的邮箱 ,这是你部署后的登录用户邮箱
  • 设置 talkyard.hostname=talkyard.example.com  ,这是你自定义的对外展示的域名
  • 设置 talkyard.secure=true , 这样才可以使用https
  • 设置 play.http.secret.key 的值,这是你部署后的登录用户密码
  • 下面的邮箱smtp设置参照你想使用的邮箱官网的smtp指导
  • talkyard.googleApiKey 属性是用于配置Google reCAPTCHA验证的API密钥
修改环境配置

使用命令 vim .env ,修改 POSTGRES_PASSWORD 属性的值为你设置的postgres数据库密码

根据服务器的内存设置docker-compose

  1. 查询服务器的RAM
free -mh

2. 直到服务器的内存大小后,选择 mem 文件夹下跟你内存相符的 yml 文件,并将其复制到 ./docker-compose.override.yml

# 例如,我的服务器内存是8G,就复制8g.yml
cp mem/8g.yml docker-compose.override.yml

配置nginx反向代理

重要提醒,跟随步骤一下走完再打开是没有问题的,如果中途想访问域名查看效果,一定记得跳到最后两步,执行完毕再访问

如未安装,安装nginx
apt install nginx
在nginx下配置你的talkyard域名

请注意:必须使用子域名,并且记得修改下面配置中的子域名为您的子域名

  1. 创建新的配置文件
vim /etc/nginx/sites-available/talkyard.example.com.conf

2.  写入以下内容。

server {
    listen 80;
    listen [::]:80;
    server_name talkyard.example.com;
    # 在这里重定向了http请求为https
    rewrite     ^   https://$host$request_uri? permanent;
    location /.well-known {
            alias /var/www/talkyard.example.com/.well-known;
    }
    location / {
        # proxy commands go here
    }
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    # if you wish, you can use the below lines for listen instead
    # which enables HTTP/2
    # requires nginx version >= 1.9.5
    # listen 443 ssl http2;
    # listen [::]:443 ssl http2;

    server_name talkyard.example.com;

    ssl_certificate /etc/letsencrypt/live/talkyard.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/talkyard.example.com/privkey.pem;

    # Turn on OCSP stapling as recommended at 
    # https://letsencrypt.org/docs/integration-guide/ 
    # requires nginx version >= 1.3.7
    ssl_stapling on;
    ssl_stapling_verify on;

    # Uncomment this line only after testing in browsers,
    # as it commits you to continuing to serve your site over HTTPS
    # in future
    add_header Strict-Transport-Security "max-age=31536000";

    access_log /var/log/nginx/sub.log combined;

    # maintain the .well-known directory alias for renewals
    location /.well-known {
        alias /var/www/talkyard.example.com/.well-known;
    }
	# 在这里反向代理了talkyard
    location / {
        # proxy commands go here as in your port 80 configuration
        proxy_pass http://talkyard.example.com:8080/;
    	proxy_redirect http://talkyard.example.com:8080/ https://talkyard.example.com;
    	proxy_http_version 1.1;
    	proxy_set_header Host $http_host;
    	proxy_set_header X-Real-IP $remote_addr;
    	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    	proxy_set_header X-Forwarded-Proto $scheme;
    	proxy_read_timeout 120;
    }
}

3. ./well-known 文件夹是稍后用来请求LetsEncrypt证书的,所以现在需要手动创建这个文件夹及下面的子文件夹

# 这个文件夹用于存放公共文件的目录
mkdir /var/www/talkyard.example.com/.well-known
# 这个文件夹用于存放 Certbot 验证域名所有权的临时文件
mkdir /var/www/talkyard.example.com/.well-known/acme-challenge
测试nginx配置并重启
  1. 测试nginx
nginx -t

2. 如果一切正常,在/etc/nginx/sites-enabled/目录中创建一个符号链接,将其指向/etc/nginx/sites-available/中的配置文件

ln -s /etc/nginx/sites-available/talkyard.example.com.conf /etc/nginx/sites-enabled/

3. 重启nginx

systemctl reload nginx
Let's Encrypt请求您的初始证书
  1. 首先检查是否安装了 Certbot
sudo apt list --installed | grep certbot

2. 安装Certbot

sudo apt install certbot python3-certbot-nginx

3. 使用Cerbot从Let's Encrypt请求证书

certbot certonly --webroot -w /var/www/talkyard.example.com/ -d talkyard.example.com

然后根据提示简单配置一下邮箱等之后,稍稍等候,恭喜,您的密钥、证书就生成成功了,存放在 /etc/letsencrypt/live/talkyard.example.com/ 里哦

如果跟着步骤一步步来,您现在可以打开 https://talkyard.example.com 不再会报不安全的错误,能看到nginx的欢迎标语😄

运行talkyard安装脚本

./scripts/upgrade-if-needed.sh 2>&1 | tee -a talkyard-maint.log

如果一切正常,静静等待几分钟。如果出现错误,看下面

报错了fatal: unable to access 'https://github.com/debiki/talkyard-versions.git/': GnuTLS recv error (-110): The TLS connection was non-properly terminated.

git config --global http.sslVerify false
git config --global http.postBuffer 1048576000

报错 ./scripts/upgrade-if-needed.sh: line 126: /usr/local/bin/docker-compose: Permission denied

这个错误提示是由于当前用户对/usr/local/bin/docker-compose文件没有执行权限导致的。可以使用下面的命令给这个文件添加执行权限:

sudo chmod +x /usr/local/bin/docker-compose

报错 Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg

这个错误提示通常是由于在安装docker-compose时出现问题导致的。您可以按照以下步骤重新安装docker-compose

  1. 删除旧版的docker-compose
sudo rm /usr/local/bin/docker-compose

2. 下载新版的docker-compose二进制文件:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

3. 添加执行权限:

sudo chmod +x /usr/local/bin/docker-compose

如果没有问题,显示“down bye”的字眼,这意味着您安装成功了。现在键入 docker-compose ps 命令,如果看到一些列的容器显示 Up ,这代表着他们都已经处在运行中了。

运行计划任务

 # 计划删除旧日志文件
 ./scripts/schedule-logrotate.sh 2>&1 | tee -a talkyard-maint.log
 # 每日备份,删除旧备份
 ./scripts/schedule-daily-backups.sh 2>&1 | tee -a talkyard-maint.log
 # 自动升级
 ./scripts/schedule-automatic-upgrades.sh 2>&1 | tee -a talkyard-maint.log

恭喜!安装成功

现在刷新 https://talkyard.example.com ,您应该可以看到talkyard的欢迎页,按照你之前设置的用户邮箱和密码进行登录吧!

配置ghost的评论嵌入

  1. 点击头像,访问 Admin 设置页
  2. 点击 Settings 内的 Embedded Comments 选项卡
  3. 在多行文本框输入您的博客域名
  4. 然后点击下方的保存按钮
  5. 在原处你会看到几个博客提供商的单选选项,选择 ghost ,查看提供的模板嵌入代码并复制到剪贴板
  6. 在服务器内进入您当时安装ghost时的文件夹,键入 cd content/themes/casper/post.hbs 编辑,找到<section class="article-comments gh-canvas"> 将里面的 {{ comment }} 替换成您刚才复制的模板。一定记得修改第一行的 talkyardServerUrl 的值为您的talkyard子域名,如 https://talkyard.example.com
  7. 保存后,运行 ghost restart 命令重启ghost,刷新您的博客,就可以在底部看到您的评论插件啦!

基本的设置现在就完成了,后面我会将ghost和talkyard的本地化及账户体系再写一篇文章。

END