很多同学喜欢把hexo博客搭建在github或者gitee上,今天我尝试了下把它搭建在vps上。实现gitpage、codingpage和vps同步部署。

  • 首先我们要弄明白,它的原理。hexo的部署工作其实就是把,hexo根目录下的public文件夹中的内容推送到服务器上。我们甚至可以直接把public文件夹中的内容拷贝到,nginx的网站根目录下来实现访问。但这样太麻烦了,我们可以通过设置来达到一次部署多端推送的目的。

1、服务器环境搭建

  • 1.1安装git和nginx

1
2
3
4
yum install git
yum install -y nginx
#启动nginx服务
service nginx start

  • 1.2创建一个网站的根目录(用于存放网站的部署的静态文件)

1
2
#先找到自己的网站目录创建一个新的文件夹blog
mkdir blog
  • 1.3建立git仓库

1
git init --bare blog.git
  • 1.4使用 git-hooks 同步网站根目录

在这里我们使用的是 post-receive这个钩子,当git有收发的时候就会调用这个钩子。 在 ~/blog.git 裸库的hooks文件夹中,新建post-receive文件。

1
2
3
#!/bin/bash
rm -rf /var/www/blog
git clone /root/blog.git /var/www/blog

意思就是删除/var/www/blog/下的文件,并将root/blog.git下的文件clone到/var/www/blog目录下,这里注意一下,我这里使用的是cenOS服务器,登录默认给予的是root权限,所以这里的/root即为/home
然后我们赋予这个文件夹权限:

1
chmod +x post-receive
  • 1.5配置Nginx

1
vim /etc/nginx/conf.d/blog.conf

在里面添加:

1
2
3
4
5
server{
listen 80;
server_name www.lee1224.com lee1224.com;
root /var/www/blog;
}

重启nginx:

1
service nginx restart

2、本地hexo配置

  • 当我们完成了上述服务器端操作时候,就要回到本地,开始配置hexo。
  • 进入我们本地初始化的项目源文件中,看到有一个_config.yml文件,是整个项目的配置文件,打开在最后一行你会发现deploy字样,输入下列信息:
1
2
3
deploy:
- type: git
repo: root@IP:blog.git

3、补充

  • 设置完成后发现每次部署都要输入Linux登录密码。我们可以通过配置

配置SSH公钥

1、生成公钥。

1
ssh-keygen

注意: 键入这个命令后,会提示让你给这个公钥配置密码(passphrase),我们既然是为了避免多次输入密码, 这里为什么还要给公钥配置密码呢,所以我们要一路回车,不理他(会出现三次)
2、然后将本地公钥拷贝到服务器。

1
2
#首先cd到公钥目录
ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

这条命令由多个语句组成,依次分解开来看:
(1)“$ ssh user@host”,表示登录远程主机;
(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:
(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;
(4)‘cat >> .ssh/authorized_keys’ < /.ssh/id_rsa.pub的作用是,将本地的公钥文件/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
写入authorized_keys文件后,公钥登录的设置就完成了。

  • 到这里就全都配置完毕啦!