Hexo从Github Pages到阿里云


Reference:http://wu.run/2018/12/20/hexo-from-github-2-aliyun/

前言

本次迁移,实质是将个人站点部署到阿里云内地节点服务器,以符合阿里云备案要求。

附:关于阿里云用户ICP备案情况自查的通知备案接入准确性检查链接

环境搭建

ssh连接

ssh root@公网IP

安装nginx

  • 更新package
sudo apt update
sudo apt upgrade
  • 安装nginx
sudo apt-get install nginx 
  • 测试安装是否成功
nginx -v
  • nginx相关目录

    - /usr/sbin/nginx — nginx主程序

    - /etc/nginx — 存放nginx相关配置

    - /var/log/nginx — 存放nginx日志

安装git

  • 安装并配置本地用户信息
sudo apt-get install git
git config --global user.name "your name"
git config --global user.email "your email"

首次clone,配置环境

  • 生成本地公钥/私钥,直接三次回车,不推荐设置密码
ssh-keygen -t rsa
  • 查看并添加ssh key信息到github
cat ~/.ssh/id_rsa.pub

测试环境

  • 进入/var/www/html,clone博客源代码
  • 修改/etc/nginx/sites-available/default文件中server下的root字段值为clone的博客目录路径
server {
        listen 80 default_server;
        listen [::]:80 default_server;

        root /var/www/html/forest/forest-lee.github.io;
        ... #省略,未复制
}
  • 重新运行nginx
nginx -s reload

这时,就可以通过访问阿里云服务器的公网IP查看个人博客(这里个人发生了一点小插曲:修改后访问ip显示404页面,一直以为是配置问题,结果是路径打错了QAQ)

绑定域名

使用已购买并备案的域名,解析至阿里云服务器的公网IP。

自动同步

问题提出

经过上述操作,我们实质是将博客源代码git clone到路径/var/www/html/forest-lee.github.io,如果需要对博客进行修改或发布新文章,运行hexo d还是只能将新源码pull到github及gitee上,而无法自动上传到服务器上。要想同步修改,还是需要在服务器上的博客路径删除源码并重新git clone,非常麻烦。

问题解决

解决方法很简单,只需要在阿里云服务器上搭建一个Git远程仓库,每次通过hexo d更新源码时,也同步更新至服务器仓库中,并自动同步到/var/www/html/forest-lee.github.io中。

具体做法:

  1. 创建git用户
adduser git
  1. 创建git裸仓hexo.git
cd /home/git
git init --bare hexo.git
  1. 修改权限
chown -R git:git hexo.git
  1. 写入信息

    获取并复制本地SSH公钥并写入服务器/home/git/.ssh/authorized_keys(没有则创建)文件

    cat ~/.ssh/id_rsa.pub

    /home/git/hexo.git/hooks/post-receive(没有则创建)文件中写入:

    #!/bin/sh
    git --work-tree=/var/www/html/forest-lee.github.io --git-dir=/home/git/hexo.git checkout -f
  1. 修改本地_config.yml文件
deploy:
  type: git
  repo: 
    gitee: https://gitee.com/frank-f-lee/frank-lee.git # HTTPS
    github: git@github.com:Forest-Lee/forest-lee.github.io.git # SSH
    hexo: root@106.14.97.210:/home/git/hexo.git
  brach: master
  message: blog

小插曲

域名无法正常访问

将域名正确解析到公网ip后,发现直接访问域名forestlee.top被拒绝ERR_CONNECTION_CLOSED,而www.forestlee.top可以正常访问;咨询阿里云客服,最终找到原因——浏览器的缓存导致访问域名时直接添加了https,而没有进行SSL申请,不能访问https页面。

服务器443端口无法访问,所以https页面无法打开,目前应该是浏览器的缓存使直接访问域名添加了https,这边浏览器没有自动添加https,所以这边可以访问的。您可以清理缓存后直接访问http://forestlee.top

需要申请过SSL证书,并在服务器上配置了SSL证书后才能通过443端口访问https页面。

伪自动同步

本人在初次完成以上步骤后,发现hexo d提交时,博客源码并没有自动同步到服务器上。

其实从上图中的”hint: The ‘hooks/post-receive’ hook was ignored because it’s not set as executable.”就可以略窥一二了。

为此,我尝试了多次(重建服务器git仓库…),最后在和npfs的交流中找到了问题所在——**post-receive文件的权限问题**

由此足见Linux文件权限的重要性,学习指路:Linux chmod 命令

至此,你已经可以通过hexo d直接将博客源码上传到gitee、github并自动同步到服务器。

效果展示


Author: Frank Lee
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Frank Lee !
评论
  TOC