在ghost中集成talkyard,为你的个人博客添加评论系统
将talkyard评论系统加入您的博客,吸引更多同好,碰撞各自的思想
什么是ghost
ghost是一款开源的博客系统,帮助开发者、内容创作者来搭建网站、输出内容并创造收益。比起其他的博客平台,比如wordpress、hexo、hugo等,它的优势在于设计出众、色彩鲜艳,主题丰富,自部署便捷而且自带美观的后台、可集成功能齐全——具体的可以查看它的官网:
它的缺点在于本地化需要自己修改,而且更注重于营造一个发布者-会员的出版社区,可能对于国人的消费与阅读习惯来说不太贴合。
什么是talkyard?
talkyard是开源免费的评论系统,没有广告,体积小巧,但却可以轻松满足你的过滤垃圾内容、实时预览、响应式设计等等需求。甚至你可以另外部署一个社区以供你的粉丝们交流,确实很让人心动,这也是我最终在disqus、cover comment等竞品里选中它的理由。
如何部署ghost
ghost的部署非常简单,只要按照官网教程一步步进行,很轻松就可完成自己的博客部署,如果您在部署ghost的过程中遇到什么问题,可以在我即将推出的问答社区中提问。
如何部署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仓库无法下载
- ping测试是否畅通
ping github.com
- 如果不通,浏览器访问查询ip网站, 键入
github.com
查看IP - 在系统的host文件添加github指向
xx.xx.xx.xx github.com
- 再次ping测试
报错 https://download.docker.com/linux/ubuntu jammy Release 404 Not Found
- 删除现有的docker源
sudo apt-get remove docker docker-engine docker.io containerd runc
- 安装阿里云镜像源所需的软件包
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
- 添加阿里云镜像源的GPG密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 添加阿里云镜像源到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
- 更新软件包列表并安装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
- 查询服务器的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域名
请注意:必须使用子域名,并且记得修改下面配置中的子域名为您的子域名
- 创建新的配置文件
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配置并重启
- 测试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请求您的初始证书
- 首先检查是否安装了 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
:
- 删除旧版的
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的评论嵌入
- 点击头像,访问
Admin
设置页 - 点击
Settings
内的Embedded Comments
选项卡 - 在多行文本框输入您的博客域名
- 然后点击下方的保存按钮
- 在原处你会看到几个博客提供商的单选选项,选择
ghost
,查看提供的模板嵌入代码并复制到剪贴板 - 在服务器内进入您当时安装ghost时的文件夹,键入
cd content/themes/casper/post.hbs
编辑,找到<section class="article-comments gh-canvas">
将里面的{{ comment }}
替换成您刚才复制的模板。一定记得修改第一行的talkyardServerUrl
的值为您的talkyard子域名,如https://talkyard.example.com
- 保存后,运行
ghost restart
命令重启ghost,刷新您的博客,就可以在底部看到您的评论插件啦!
基本的设置现在就完成了,后面我会将ghost和talkyard的本地化及账户体系再写一篇文章。