将Hexo部署到vps,实现自动发布

博客一直放在GitHub上面,今天放到了服务器上,记录了一下简单的流程。供大家参考!

hexo相关文章:

用Hexo搭建博客

Maupassant主题个性化

搭建流程

  1. 服务器环境配置,安装Git、Nginx配置、创建git用户
  2. 本地hexo初始化
  3. 使用Git自动部署并发布博客

服务器环境搭建

  • 安装Git和NodeJS(Centos环境)
1
2
3
yum install git
# 安装NodeJS
curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
  • 创建git账号
1
2
3
adduser 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
  • 使用su git切换到git用户,再执行下列操作:
1
2
3
4
5
6
7
8
9
10
11
# 切换到git用户目录
cd /home/git
# 创建.ssh文件夹
mkdir ~/.ssh
# 创建authorized_keys文件并编辑
vim ~/.ssh/authorized_keys
# 如果你还没有生成公钥,那么首先在本地电脑中执行 cat ~/.ssh/id_rsa.pub | pbcopy生成公钥
# 再将公钥复制粘贴到authorized_keys
# 保存关闭authorized_keys后,修改相应权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
  • 然后可以通过本地Git Bash执行ssh命令测试是否可以免密登录
1
ssh -v git@服务器ip地址

这样git用户就添加好了。

  • 安装Nginx
  • 准备工作
    首先由于nginx的一些模块依赖一些lib库,所以在安装nginx之前,必须先安装这些lib库,这些依赖库主要有g++、gcc、openssl-devel、pcre-devel和zlib-devel 所以执行如下命令安装
1
2
3
4
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl--devel

Ubuntu系统安装命令如下:

1
2
3
sudo apt-get install libpcre3 libpcre3-dev
sudo apt-get install zlib1g-dev
sudo apt-get install openssl libssl-dev
  • 安装Nginx
    安装之前,最好检查一下是否已经安装有nginx
1
find -name nginx

如果系统已经安装了nginx,那么就先卸载

1
yum remove nginx

然后开始安装
首先进入/usr/local目录

1
cd /usr/local

从官网下载最新版的nginx

1
wget -c https://nginx.org/download/nginx-1.14.2.tar.gz

(注:版本号可更改,去官网查看最新版本号修改即可)

解压nginx压缩包

1
tar -zxvf nginx-1.14.2.tar.gz

会产生一个nginx-1.14.2 目录,这时进入nginx-1.14.2 目录

1
cd  nginx-1.14.2

接下来安装,使用–prefix参数指定nginx安装的目录,make、make install安装

1
./configure

(默认安装在/usr/local/nginx,推荐使用默认设置)

1
make

1
make install

如果没有报错,顺利完成后,最好看一下nginx的安装目录

1
whereis nginx

(where和is要连这些,中间没有空格)

  • 启动和停止nginx
1
2
3
4
5
6
7
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit
./nginx -s reload
./nginx -s quit: 此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s stop: 此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。

查询nginx进程:

1
ps aux | grep nginx

  • 重启 nginx
  1. 先停止再启动(推荐):
    对 nginx 进行重启相当于先停止再启动,即先执行停止命令再执行启动命令。如下:
1
2
./nginx -s quit
./nginx
  1. 重新加载配置文件:
    当 nginx 的配置文件 nginx.conf 修改后,要想让配置生效需要重启 nginx,使用 -s reload 不用先停止 nginx 再启动 nginx 即可将配置信息在 nginx 中生效,如下:
1
./nginx -s reload

启动成功后,在浏览器可以看到如下页面:

  • 开机自启动

即在rc.local增加启动代码就可以了。

1
vim /etc/rc.local

增加一行

1
/usr/local/nginx/sbin/nginx

到这里,nginx安装完毕,启动、停止、重启操作也都完成。

建立git裸库

1
2
3
4
# 回到git目录
cd /home/git
# 使用git用户创建git裸仓库,以blog.git为例
git init --bare blog.git

检查用户组权限

我们的git裸仓库已经建立好了,离成功又近了一步。为了以防万一,我们要检查一下之前的blog.git、.ssh、blog目录的用户组权限是否都为git:git

1
2
3
# 还记得/var/www/吗?这是之前配置nginx时,我们自己选定的网站根目录,请依据你自己的设置更改,如果没有的话自己
​ll -a /var/www/
​ll -a /home/git/

如果有哪个不是,执行下面相应的命令后再查看

1
2
sudo chown git:git -R /var/www/blog
sudo chown git:git -R /home/git/blog.git

使用git-hooks同步网站根目录

简单来说,我们使用一个钩子文件:post-receive,每当git仓库接收到内容的时候,就会自动调用这个钩子,把内容同步到网站根目录。
​ 在git用户下执行:

1
2
# 新建一个post-receive文件并编辑
vim ~/blog.git/hooks/post-receive

在里面输入以下内容,注意修改为自己的设置:

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

保存退出后,进入/home/git/blog.git/hooks执行:chmod +x post-receive赋予这个文件可执行权限。

好了,以上就是服务器端需要配置的内容。我们还差最后一步就可以完成整个部署了!

修改配置文件nginx.conf

修改上面的配置文件:

1
vim /usr/local/nginx/conf/nginx_config

然后修改其中两个部分,如下所示:

然后重启nginx,方法见nginx安装部分。

配置本地Hexo的_config.yml

非常简单,只需要找到本地Hexo博客的站点配置文件_config.yml,找到以下内容并修改:

1
2
3
4
deploy: 
type: git
repo: git@你的服务器IP:/home/git/blog.git
branch: master

保存后,剩下的就是Hexo的日常操作了,这里就不赘述了,写完文章后,在你的本地博客根目录执行以下命令:

1
hexo c && hexo g -d

就可以实现线上博客的自动更新了!一切搞定!

一些需要注意的地方

  • vim: command not found
    解决方法:安装vim
1
yum -y install vim*
  • 设置防火墙
    开启80端口,并重新启动防火墙
Donate comment here
-------------本文结束感谢您的阅读-------------
0%