使用git进行hexo博客部署

hexo静态博客的部署方式有很多种,但在实验的结果上来说,git部署依旧是最方便且最快捷的。
网上有一些部署方式是通过将hexo仓库整体上传,并且在服务器段进行生成和部署,这样的方式可能会造成加密博文的泄露等安全性问题。可以将本地生成后的博客静态目录进行上传,以避免这种问题。这也是hexo-deployer-git所作的事情。

本篇博客不会涉及:

  1. hexo博客的配置、本地安装、本地渲染及测试
  2. nginx等服务器对静态目录的站点映射
  3. 域名配置等问题

服务器配置

  1. 首先需要确保服务器已成功安装git,可以通过git --version查看是否安装成功。
    如没有安装,可以通过yum install gitapt install git等命令进行安装,具体可参考搜索引擎提供的结果。

  2. 添加并配置git用户

    sudo adduser git  # 添加git用户
  3. 配置git仓库
    为方便后续操作,你需要设置如下变量:

    export blogdir=/path/to/your/repo

    shell变量名、等号和值之间均不要留有空格

    之后你可以进行操作了:

    mkdir -p $blogdir/public
    cd $blogdir
    sudo git init --bare git
    sudo echo '#!/bin/bash' > $blogdir/git/hooks/post-receive
    sudo echo "git --work-tree=$blogdir/public --git-dir=$blogdir/git checkout -f" >> $blogdir/git/hooks/post-receive
    chmod +x $blogdir/git/hooks/post-receive
  4. 配置站点路径
    请将站点路径配置为$blogdir/public,其中$blogdir为你上一步设置的变量。

  5. 将你的ssh公钥放入git用户目录下
    如果你没有ssh公钥,请搜索“生成ssh密钥”以找到解决方法。这里不再赘述。

    sudo su git
    mkdir /home/git/.ssh
    # 使用
    echo "ssh-ed25519 xxxxxxxx" >> /home/git/.ssh/authorzied_keys # 直接输入
    # 或
    echo $(curl https://github.com/GZTimeWalker.keys) >> /home/git/.ssh/authorzied_keys # 使用github上的公钥
    # 或
    # 在本地使用 ssh-copy-id git@yourhost 上传密钥
    
    chmod 600 /home/git/.ssh/authorzied_keys
    chmod 700 /home/git/.ssh

    至此可以测试一下ssh git@yourhost是否可以成功访问了。

    如遇到各种权限问题或公钥放进去但无法登录,个人经验为使用ssh-copy-id利用密码登录上传一次密钥最为可靠。

  6. 更新git用户权限

    sudo chown -R git:git $blogdir
    sudo sed -i 's/::\/home\/git:\/bin\/bash/::\/home\/git:\/bin\/git-shell/g' /etc/passwd
    # 更改git用户的ssh登陆权限

    Q:为什么要更改git用户的ssh登录相关权限?
    A:保证git用户仅可以用来进行git操作而不能使用终端,保障安全性。

    要使此操作生效,你可能需要重启服务器

本地配置

  1. 安装hexo-deployer-git
    npm install hexo-deployer-git --save

  2. 配置文件_config.yml

    deploy:
      type: git
      repo: git@yourhost:$blogdir/git
      branch: master

    其中$blogdir为你上文设置的变量。

  3. 使用hexo clean ; hexo d -g进行测试