岁虚山

行由不得,反求诸己

0%

Hexo博客部署到VPS

前言

Hexo 博客搭建完成后,可以将博客部署到 git 服务商提供的静态网页服务上,如 Github,Gitee等。当然,如果有自己的 VPS 服务器的话,还可以将博客部署到 VPS 服务器上,通过 IP 或者有域名来进行访问。

本文记录将 Hexo 部署到 VPS 的步骤,以供参阅。

环境

VPS端

CentOS 7.6 64位

Git

Nginx

本地

Git

Hexo

本地 Hexo 博客已经搭建好了,再次不做赘述。详细步骤可以参考我之前的文章。

原理

当使用 hexo g 命令生成博客内容时,Hexo 实际上是将我们编写的 md 文件编译成 html 文件,存放在 Hexo 根目录下的 public 文件夹中。而我们使用 hexo d 命令后,Hexo 会把 public 文件夹中的内容通过 git 上传到 git 服务器上,服务器将 public 中的内容部署到博客站点上,我们就可以通过 git 服务器提供的站点网址访问我们的博客内容。

因此,我们要想在 vps 上部署我们的博客,要做的内容其实就很清楚了:

1、在 vps 上创建 git 服务器;

2、在 vps 上创建网站;

3、通过 hero d 命令上传本地博客内容;

4、vps 自动将上传的内容部署到站点内;

5、通过域名或站点网址访问博客。

在 vps 服务器上创建 Git 服务器

安装 Git

首先,我们需要购买一台 安装有 Linux 系统的 VPS 服务器,本文使用的 Linux 系统是 CentOS 64 位。

我们通过 ssh 登录到我们的服务器:

1
ssh root&yourip

按照提示输入密码后:

sshlogin

出现如下界面表示登录成功。

现在,让我们来看一下 git 是否安装,输入命令

1
git --version

如提示未找到命令,说明我们的系统中尚未安装 git,因此我们需要先在系统中安装 git:

1
yum install git

出现以上界面说明 git 正在安装。

安装过程中可能会出现询问是否确认安装的界面:

按照提示,确认安装即可。

安装完成后检查一下是否安装成功:

1
git --version

出现 git 的版本,说明安装成功。

创建 git 服务器

首先,我们需要在系统中创建一个名为 git 的用户组和用户来运行 git 服务:

1
2
3
groupadd git            //创建 git 用户组
useradd git -g git //创建 git 用户
passwd git //设置 git 用户密码

创建完成后,我们需要给 git 用户添加账户权限,用户权限需要通过编辑 /ect/sudoers 进行设置。

通过命令打开 /ect/sudoers 文件:

1
2
chmod 740 /etc/sudoers
vim /etc/sudoers

找到:

1
2
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

按 i 进入 vim 的编辑模式,添加一行:

1
git     ALL=(ALL)       ALL

按 ESC 键退出编辑模式,输入 :wq 回车退出,并将 /etc/sudoers 改回权限:

1
chmod 400 /etc/sudoers

现在,通过

1
su git

命令切换至 git 用户:

通过 cd 命令,进入到 /home/git/ 路径下,并输入 pwd 命令查看当前路径以确认是否正确进入到该路径下:

1
2
cd /home/git
pwd

接下来,首先,我们先关闭这个 ssh 连接,然后通过 ssh 将本地计算机的 ssh 公钥上传到服务器上(中间需要输入一次 git 用户的密码):

1
ssh-copy-id git@yourip         

接下来,重新登录到 vps ,切换至 git 用户,进入到 /home/git/.ssh 目录下赋予 authorized_keys 文件及 .ssh 目录相应的权限:

1
2
3
chmod 600 authorzied_keys 
cd ..
chmod 700 .ssh

再次退出登录,使用 ssh 通过

1
ssh git@yourip

免密码登录到 vps 上。

在 git 目录下,创建 blog.git 目录:

1
mkdir blog.git

通过 cd 命令进入到 blog.git 目录下,并输入

1
git init --bare

创建裸 git 仓库:

输入

1
ll /home/git/blog.git

若上图中红色标注的位置是 git 说明 git 用户对 /home/blog 目录有操作权限,若显示的是 root 则需要

通过

1
sudo chown git:git -R /home/git/blog.git

命令对 /home/git/blog.git 目录权限进行更改。

通过 sudo 命令在 /var 检查有没有 www 目录,若没有,则创建 www 目录。

在 www 目录下创建 blog 目录

1
2
3
4
cd /var
cd www
sudo mkdir www
sudo mkdir blog

确保

/home/git/blog.git

/home/git/.ssh

/var/www/blog

三个目录的用户权限组都是 git :

1
2
3
ll /home/git/blog.git
ll /home/git/.ssh
ll /var/www

可以看到,/var/www 目录的权限是 root ,通过以下命令对其权限进行修改:

1
sudo chown git:git -R /var/www/blog

自动部署上传内容

这里,我们使用 Git Hooks来进行博客内容的自动部署。

Git Hooks

Git Hooks 可以理解为 Git 在特定事件发生之前或之后执行的脚本。

通过编写 Git Hooks 脚本,我们来实现 Git 服务器对本地计算机 hexo 博客上传后的自动部署功能。

打开 /home/git/blog.git 目录:

1
2
3
4
cd /home/git/blog.git
ls
cd hooks
ls

通过 vim 创建 post-receive 文件:

1
vi post-receive 

将以下内容复制到 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}

保存退出后,执行

1
chmod +x post-receive

命令赋予可执行权限。

安装 Nginx

安装依赖

安装 gcc

首先查看系统中是否已经安装了 gcc :

1
gcc -v

如上所示表明系统中已经安装了 gcc,无需再次安装。如果提示未找到命令,说明系统中没有安装 gcc ,可以通过以下命令安装:

1
yum -y install gcc

安装 pcre、pcre-devel

1
yum install -y pcre pcre-devel

安装 zlib

1
yum install -y zlib zlib-devel

安装openssl

1
yum install -y openssl openssl-devel

安装 Nginx

下载 Nginx 安装包

1
wget http://nginx.org/download/nginx-1.9.9.tar.gz  

将文件移动到 /tmp 目录下

1
mv nginx-1.9.9.tar.gz /tmp

进入到 /tmp 目录,解压文件

查看 /tmp 目录下内容

进入到 nginx-1.9.9 目录下。

安装 Nginx

在 nginx-1.9.9 目录下执行下面三个命令:

1
2
3
./configure
make
make install

配置 Nginx

切换到 /usr/local/nginx 目录下:

进入到 nginx/config 目录下:

编辑 nginx.conf 文件,将以下内容填入 nginx.conf 中:

1
vi nginx.conf
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
user git git;
worker_processes 1; #设置值和CPU核心数一致
error_log /usr/local/nginx/logs/nginx_error.log crit; #日志位置和日志级别
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#charset gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#下面是server虚拟主机的配置
server
{
listen 80; #监听端口
server_name exmaple.com www.example.com yourip; #域名
root /var/www/blog; #站点目录
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
#access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
#access_log off;
}
access_log off;
}
}

启动 neginx

1
/usr/local/nginx/sbin/nginx

其他命令

1
2
3
4
5
6
/usr/local/nginx/sbin/nginx             #启动 
/usr/local/nginx/sbin/nginx -s stop #快速关闭(不建议使用)
/usr/local/nginx/sbin/nginx -s quit #等待完成用户请求后关闭(建议使用)
/usr/local/nginx/sbin/nginx -t #检查配置文件内容
/usr/local/nginx/sbin/nginx -s reload #重启 nginx
/usr/local/nginx/sbin/nginx -c filename #以制定配置文件启动

强行停止 nginx

1
2
ps -ef | grep nginx   #查看 nginx 所有进程
pkill -9 nginx #关闭所有 nginx 进程

设置开机启动

通过源码安装的 nginx 想要设置开机启动,需要手动在 /usr/lib/systemd/system/ 目录下创建 nginx.service 文件。

1
vi /usr/lib/systemd/system/nginx.service

写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

如果现在 nginx 处于运行状态,首先要先关闭 nginx。

1
2
systemctl enable nginx.service  #设置开机自启
systemctl status nginx.service #查看 nginx 状态

如果查看 nginx 运行状态显示结果如下:

那么需要先杀死所有nginx 进程:

1
2
3
pkill -9 nginx                  #关闭所有 nginx 进程
systemctl start nginx #启动 nginx
systemctl status nginx.service #查看 nginx 状态

重启服务器

1
reboot

等待重启完成后,重新连接服务器,查看 nginx 运行状态:

上传博客内容

进入到本机的 Hexo 博客根目录下,打开 _config.yml 文件,在

1
2
3
4
5
6
7
8
deploy:
type: git

#在此添加vps上的仓库地址
repository:
self: git@www.example.com:/home/git/blog.git
#或者 self: git@vpsip:/home/git/blog.git
branch: master

保存后在此目录下打开终端,输入命令:

1
2
3
hexo clean
hexo g
hexo d

等待上传完成后,在浏览器中输入你的域名或者是 vps 的 ip (需要在 nginx.conf 中声明),就能看到博客的主页了!

-------------本文结束 感谢阅读-------------
打赏一包辣条