Twikoo的自建后端与自动更新
系列 - Deploy Blog on Own Server
目录
1 自建twikoo后端
全局安装twikoo:
sudo npm i -g tkserver@latest
创建twikoo工作目录:
mkdir /home/senzyo/project/twikoo/
twikoo会在此目录下生成
data
文件夹存放数据文件db.json*
。db.json.0
存储具体评论,db.json.1
存储twikoo前端控制面板的配置,db.json.2
存储文章属性。创建
/etc/systemd/system/twikoo.service
并写入以下内容:[Unit] Description=Twikoo [Service] Type=simple WorkingDirectory=/home/senzyo/project/twikoo ExecStart=nohup tkserver Restart=on-failure RestartSec=10s ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target
重新加载守护程序:
sudo systemctl daemon-reload
设置
twikoo.service
自启动并立刻启动:sudo systemctl enable --now twikoo.service
检查运行状态:
sudo systemctl status twikoo.service
注意
/home/senzyo/project/twikoo
的权限归属, 最好是分配给当前普通用户。sudo chown -R senzyo:senzyo /home/senzyo/project/twikoo
2 自动更新后端和前端
首先参考Nginx部署Hugo站点设置一系列仓库, 然后按照以下步骤操作:
创建更新脚本
/home/senzyo/project/twikoo/upgrade.sh
并写入以下内容:#!/bin/bash PROD="/home/senzyo/project/blog" WORK="/home/senzyo/project/twikoo" LATEST=$(npm view tkserver version) LOCAL=$(npm ls tkserver -g | grep @ | cut -d '@' -f 2) if [ "$LATEST" != "$LOCAL" ]; then echo "==========更新Twikoo前端==========" cd $WORK wget -O - https://mirrors.cloud.tencent.com/npm/twikoo/-/twikoo-$LATEST.tgz | tar -zxf - mv package/dist/twikoo.all.min.js $PROD/themes/DoIt/assets/lib/twikoo/twikoo.all.min.js rm -rf package echo "==========正在提交到Git仓库==========" cd $PROD git pull git add -A git commit -m "更新Twikoo至$LATEST" git push -uf origin master echo "==========更新Twikoo后端==========" systemctl stop twikoo.service npm i -g tkserver@latest systemctl start twikoo.service else echo "==========当前Twikoo已是最新版本$LATEST==========" fi
授予可执行权限:
chmod +x /home/senzyo/project/twikoo/upgrade.sh
sudo crontab -e
设置crontab, 添加以下内容:0 1 * * 1 flock -xn /tmp/twikoo-upgrade.lock -c '/home/senzyo/project/twikoo/upgrade.sh > /dev/null 2>&1 &'
注意这里要为root
用户创建定时任务而不是为普通用户创建, 因为upgrade.sh
中需要通过systemd
管理twikoo后端服务, 普通用户会因权限不足而不能执行这一过程。由于Nginx部署Hugo站点中设置的
.git/hooks/post-receive
在接收到push
后会在/home/senzyo/project/blog
自动构建Hugo站点, 所以闭环成功🎉。