关于 Hexo 本地部署可以参考 官方文档 或另外一篇文章

~~ /posts/ebd7615d.html~~

阿里云

此处以阿里云ECS 作为例子进行说明(为什么不用轻量腾讯云啥的?没机子咩)。

  1. 首先在本地完成部署;

  2. 服务器配置:

    1. 安装 Git: yum install -y git ,如果安装了就可以跳过
    2. 创建 git 用户用于站点文件同步: useradd git ,可以不设置密码;
    3. 初始化 git 仓库:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 切换到 git 用户
    su git
    # 初始化仓库: 创建一个名称为 hexo.git 的裸仓库,如果看不习惯可以自己修改, --bare 选项用于创建一个裸仓库
    git init --bare ~/hexo.git
    # 创建钩子函数,用户同步之后将站点文件 copy 一份到站点目录
    cd ~/hexo.git/hooks/
    vim post-receive

    git --work-tree=/path/to/webroot --git-dir=/home/git/hexo.git checkout -f

    # 下面是我的配置,仅供参考
    git --work-tree=/data/blog --git-dir=/home/git/hexo checkout -f

    rsync -av --delete /data/blog/ /data/nginx/html/

    📝 这里要提前把涉及到的目录创建好哦!

    ‼: 一定要给执行权限: chmod +x post-receive ,已经上当了以为部署没生效,看看更新日期就知道是哪里的问题了。

  3. 配置 git 用户的 SSH 免密登录,可以参考:待补充

  4. 修改 hexo 站点配置文件 _config.yml:

    1
    2
    3
    4
    deploy:
    - type: git
    repo: git@hexo:/home/git/hexo
    branch: master
  5. 然后就可以部署到服务器了: hexo deploy 。如果失败了,注意看终端中的报错信息,挨个挨个解决,毕竟不能保证每个人都会遇到同样的问题。

云存储

之前偶然间了解到又拍云给开发者每年提供一定额度的CDN浏览,对于我这个基本没有人到访(我是不是人呐)的站点完全够了,于是迁到了 CDN 上。最近看到还提供 10G 的云存储,存放 Hexo 也基本够了,因此也就用上了。

基本配置很简单,这里主要提一下如何将部署到服务器的静态资源同步到云存储,这里有两种方法:

  1. FTP客户端:需要手动上传,自然不可能用这种方式;
  2. 命令行工具:upx

upx 是又拍云官方提供的一个命令行工具,提供三端多架构二进制包,比如在 Cent8 上,可以这么做:

  1. 先在控制台创建服务和操作员,保存【服务名】、【操作员名称】、【操作员密码】;
  2. 从上面的 Github 上下载适合的二进制包:
1
2
3
4
5
6
cd /home/git
mkdir upx
cd upx
wget upx-linux-amd64.tar.gz
tar -zxf upx-linux-amd64.tar.gz
chmod +x upx
  1. 基本命令操作,更加全面及详细的请参考 Github:
1
2
3
4
5
6
# 根据提示登录
upx login
# 同步
upx sync --delete <source_dir> <dest_dir>
# 退出登录
upx logout
  1. 找一个舒服的位置躺好,写一个自动登录同步的脚本:

先装一下命令:yum install -y expect

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/bash
# 登录帐密
SERVICE_NAME=""
OPERATOR=""
PASSWORD=""



/usr/bin/expect <<EOF
spawn /home/git/upx/upx login
expect {
"ServiceName:" { send -- "$SERVICE_NAME\r"; exp_continue }
"Operator:" { send "$OPERATOR\r"; exp_continue }
"Password:" { send "$PASSWORD\r"; exp_continue }
}
EOF
# 资源同步路径——git检出路径
/home/git/upx/upx sync /data/blog/ /
/home/git/upx/upx logout

赋权:

1
chmod +x sync2cloud.sh
  1. 加到 post-receive 之后就可以每次部署到服务器时自动推送更新云存储:
1
bash /home/git/sync2cloud.sh

切换到 git 用户手动执行一下 post-receive 检查是否有报错: ./post-receive 。(不会有人都没给这个文件执行权限吧,是谁呢,好难猜啊。)

  1. 下一次 hexo d 之后看看云存储上更新了没,没问题的话就大功告成了。