写在开始
一开始将自己hexo部署到github,结果发现打开页面速度有点慢,然后又将其同时部署到coding,实现双线路访问,国内解析记录到coding,国外解析到github,这样确实网站的速度能提高不少,但是国内访问因为是经过coding,所以打开网站会有广告,这点不能容忍,于是想到自己的服务器也还空闲着,于是想到可以部署到自己的服务器上,折腾开始
演示站点
部署总览
- 个人使用的环境
- 本地环境:
Windows10(64位) - 云主机:阿里云ECS(
CentOS7.2 64位)
- 本地环境:
- 整个部署过程
- 本地环境搭建(
git,NodeJs,hexo..) - 云主机环境搭建(
git,Nginx) - 设置解析(
dnspod) - 使用git自动化部署博客
- 本地环境搭建(
本地环境搭建
- 安装git
- 安装hexo(这些步骤省略)
- 生成ssh公钥(之前生成过的也就不用再执行了,比如部署在github上填写过rsa密钥就不需要再进行这一步了)
- 在命令行终端执行如下命令
ssh-keygen -t rsa -C "邮件地址" - 生成的文件默认在
~/.ssh目录中,看到有id_rsa,id_rsa.pub这些文件即可
- 在命令行终端执行如下命令
云主机环境搭建
安装git及nodejs
1
2
3yum install git
#安装NodeJS
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -创建git账户
1
2
3adduser git
chmod 740 /etc/sudoers
vim /etc/sudoers添加内容
找到1
2## Allow root to run any commands anywhere
root ALL=(ALL) ALL添加以下内容
1
git ALL=(ALL) ALL
保存退出并改回权限
1
chmod 400 /etc/sudoers
设置git账户密码
1
sudo passwd git
切换至
git用户,创建~/.ssh文件夹和~/.ssh/authorized_keys文件,并赋予相应的权限1
2
3
4
5
6
7su git
mkdir ~/.ssh
vim ~/.ssh/authorized_keys
#然后将本地电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy ,将公钥复制粘贴到
authorized_keys
chmod 600 ~/.ssh/authorzied_keys
chmod 700 ~/.ssh- 在本地终端中测试是否能免密登录
gitssh -v git@SERVER - 其中
SERVER为填写自己的云主机IP
- 在本地终端中测试是否能免密登录
创建目录
1
2
3
4# repo 作为为git仓库目录
mkdir -R /var/repo
# hexo 作为网站根目录
mkdir -R /var/www/hexo配置
nginx(当然Apache也是可以的,nginx的安装步骤省略)- 首先输入
ngixn -t找到配置文件,我的是在/etc/nginx/nginx.conf,配置SERVER
- 首先输入
1 | server { |
设置解析
- 在
dnspod设置解析记录,设置解析A记录www解析到服务器IP地址, 解析线路默认 - 设置
CNAME解析使www解析到xxx.github.io,解析线路国外,这里的xxx为hexo部署在github的仓库名称,这样保证了在国外访问速度也是极佳的
使用git自动化部署博客
自动化部署主要用到了git-hooks同步
服务器建立裸库,这里要用
git用户登录,确保git用户拥有仓库所有权1
2
3su git
cd /var/repo/
git init --bare blog.git使用 git-hooks 同步网站根目录
在这里我们使用的是post-update这个钩子(也有可能是post-receive,具体进入文件就知道了),当git有收发的时候就会调用这个钩子。 在/var/repo/blog.git裸库的hooks文件夹中1
2vim /var/repo/blog.git/hooks/post-update
# 编辑文件,写入以下内容1
2#!/bin/sh
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f保存后,要赋予这个文件可执行权限
1
chmod +x post-update
配置
_config.yml,完成自动化部署
打开_config.yml, 找到deploy1
2
3
4
5
6deploy:
type: git
repo:
github: git@github.com:Finhoo/Finhoo.github.io.git
www: git@www.fayne.cn:/var/repo/blog.git
branch: master保存后,即可测试部署
hexo clean && hexo g -d- 至此,我们已经成功部完成,并且访问自己的服务器端比访问
github快多了,国外速度也是很好
常见问题
我在部署过程中,执行 hexo d发现部署老是出错,什么权限不允许之类的,这里我们需要检查我们在上述的git操作部署是否使用了git用户操作,若是没有,需要给相应的目录更改用户组
使用chown -R git:git /var/repo/这条命令递归的将repo目录及其子目录用户组设置为git,同时chown -R git:git /var/www/hexo,这样即可解决此类问题