目录

Twikoo的自建后端与自动更新

系列 - Deploy Blog on Own Server
  1. 全局安装twikoo:

    bash

    sudo npm i -g tkserver@latest
  2. 创建twikoo工作目录:

    bash

    mkdir /home/senzyo/project/twikoo/

    twikoo会在此目录下生成data文件夹存放数据文件db.json*db.json.0存储具体评论, db.json.1存储twikoo前端控制面板的配置, db.json.2存储文章属性。

  3. 创建/etc/systemd/system/twikoo.service并写入以下内容:

    text

    [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
  4. 重新加载守护程序:

    bash

    sudo systemctl daemon-reload
  5. 设置twikoo.service自启动并立刻启动:

    bash

    sudo systemctl enable --now twikoo.service
  6. 检查运行状态:

    bash

    sudo systemctl status twikoo.service
  7. 注意/home/senzyo/project/twikoo的权限归属, 最好是分配给当前普通用户。

    bash

    sudo chown -R senzyo:senzyo /home/senzyo/project/twikoo

首先参考Nginx部署Hugo站点设置一系列仓库, 然后按照以下步骤操作:

  1. 创建更新脚本/home/senzyo/project/twikoo/upgrade.sh并写入以下内容:

    bash

    #!/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
  2. 授予可执行权限:

    bash

    chmod +x /home/senzyo/project/twikoo/upgrade.sh
  3. sudo crontab -e设置crontab, 添加以下内容:

    bash

    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后端服务, 普通用户会因权限不足而不能执行这一过程。
  4. 由于Nginx部署Hugo站点中设置的.git/hooks/post-receive在接收到push后会在/home/senzyo/project/blog自动构建Hugo站点, 所以闭环成功🎉。