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
中。
具体做法:
- 创建git用户
adduser git
- 创建git裸仓hexo.git
cd /home/git
git init --bare hexo.git
- 修改权限
chown -R git:git hexo.git
写入信息
获取并复制本地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
- 修改本地_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并自动同步到服务器。