前言

原博客是使用Halo搭建,Halo太吃内存,导致VPS不堪重负,遂决定迁移博客到Hexo。

所有要做的步骤

1.在Windows上安装git

2.在Windows上安装Node.js(Node.js 版本需不低于 10.13,建议使用 Node.js 12.0 及以上版本)

3.在Windows上安装Hexo

4.配置Hexo

4.在VPS上安装git和nginx

5.在VPS上配置git和nginx

6.在Windows上利用git同步本地博客到VPS

7.访问网站

在Windows上安装git

https://git-scm.com/download/win 下载并安装

镜像站 https://registry.npmmirror.com/binary.html?path=git-for-windows/

在Windows上安装Node.js

https://nodejs.org/en/download/prebuilt-installer 下载

镜像站 https://registry.npmmirror.com/binary.html?path=node/

在Windows上安装Hexo

1
2
3
4
$ npm install -g hexo-cli  # 在git bash 或者cmd终端
$ hexo init blog # 在指定的目录内,例如在blog内
$ cd blog
$ npm install

配置Hexo

在根目录下的_config.yml修改配置
如果有主题的话,一般在_config.<主题名>.yml文件内配置
详见 https://hexo.io/zh-cn/docs/configuration
关于主题 https://hexo.io/zh-cn/docs/themes

Hexo的简单命令

1
2
3
4
5
6
7
# 在hexo的根目录下使用cmd执行
hexo init <目录> # 新建一个网站
hexo new <标题> # 新建文章,保存在/blog/source/_posts内
hexo generate # 生成静态文件,可简化为 hexo g
hexo server # 启动本地服务器,地址为http://localhost:4000/,可简化为 hexo s
hexo clean # 清除缓存文件
hexo deploy # 部署网站 可简化为 hexo d

更多命令参见https://hexo.io/zh-cn/docs/commands

在VPS上安装git

1
2
apt-get install -y git #ubuntu
yum install -y git #centos

在VPS上安装nginx

1
2
3
4
5
apt-get install -y nginx #ubuntu
yum install -y nginx #centos
systemctl enable nginx
systemctl start nginx
systemctl status nginx

配置VPS上的git

1
2
3
4
5
6
7
8
9
10
adduser git # 增加git用户

chmod 740 /etc/sudoers # 修改sudo权限
vim /etc/sudoers
--------------------------
# User privilege specification
root ALL=(ALL:ALL) ALL
---------------------------
# 在下面添加 git ALL=(ALL:ALL) ALL
chmod 440 /etc/sudoers # 改回权限

禁用git用户的shell权限

1
2
3
vim /etc/passwd
把git:x:1001:1001:***:/home/git:/bin/bash
修改为 git:x:1001:1001:***:/home/git:/usr/bin/git-shell

初始化 git 仓库

1
2
3
4
cd /home/git                //切换到git用户目录
mkdir blog.git //创建git仓库文件夹,以blog.git为例
cd blog.git //进入仓库目录
git init --bare //使用--bare参数初始化为裸仓库,这样创建的仓库不包含工作区

配置 SSH-Key

1
2
3
4
cd /home/git                
mkdir .ssh
cd .ssh
vim authorized_keys # 将windows上的公钥复制的此文件内

修改目录权限

1
2
3
chown -R git.git /home/git/blog.git/ #权限很重要
chown -R git.git /home/git/.ssh/
chown -R git.git /var/www/html/

配置 nginx(可选)

1
2
3
cd /etc/nginx/sites-available           
cp default default.bak
vim default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
default
---------------------------------------
server {
listen 80 default; # 默认监听80端口
root /var/www/html;
server_name *.com, www.*.com; # 域名
access_log /var/log/nginx/blog_access.log;
error_log /var/log/nginx/blog_error.log;
error_page 404 = /404.html;

location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {
root /var/www/html;
access_log off;
expires 1d;
}

location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {
root /var/www/html;
access_log off;
expires 10m;
}

location / {
root /var/www/html;
if (-f $request_filename) {
rewrite ^/(.*)$ /$1 break;
}
}

location /nginx_status {
stub_status on;
access_log off;
}
}
1
2
3
systemctl restart nginx
systemctl enable nginx
systemctl status nginx

配置 Git Hooks 自动化

创建 post-receive 文件

1
2
cd /home/git/blog.git/hooks    
vim post-receive
1
2
3
4
5
6
7
8
9
10
post-receive 
----------------------------
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/html

rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
1
chmod +x post-receive #赋予执行权限

在Windows上尝试免密登录VPS

1
2
3
# 在windows上打开 Git Bash
ssh git@VPS_ip
# 显示登录信息后立刻断开连接(git用户没有shell权限)则为成功实现免密登录,否则(卡在密码输入上)检查目录权限和配置文件修改是否错误。

修改本地博客根目录下的_config.yml 文件

1
2
3
4
5
6
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@VPS IP:/~/blog.git
branch: master

同步到VPS

1
2
3
4
5
# 在hexo根目录下
$ hexo g
$ hexo clean
$ hexo s # 在本地查看是否配置有误
$ hexo d # 部署到服务器