部署Hexo博客到私有云服务器上

本文最后更新于:2023年2月3日 下午

前言

本文介绍一个将Hexo建立的博客,部署到私有云服务器上的过程。私有云服务器系统使用Linux系统,博客框架使用Hexo,Hexo发布器使用git,网站代理服务器使用nginx。

名词解释

Hexo[1] 一款快速、简洁且高效的博客框架 。

私有云服务器 在云服务提供商处购买的,可用于个人使用的网络服务器。

git[2] 一个免费和开源的分布式版本控制系统。

nginx[3] 一个HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务。

部署流程

  1. 本地电脑使用Hexo发布器,将要发布的网站内容上传到私有云服务器的git仓库。

  2. 私有云服务器的git仓库在接收到git push后,自动通过git hooks,将网站内容同步到nginx的访问目录下。

  3. 通过nginx服务,对静态博客网站进行代理。

服务器环境的安装与配置

以下步骤,除特别提醒,均在私有云服务器上操作。

一、配置git服务

安装git

安装git,在云服务器的控制台输入如下命令:

1
$ sudo yum install git-core

读条结束后,输入以下命令检查git版本:

1
$ git --version

创建 www 用户

创建的这个用户,是用于管理博客网站相关的服务

1
$ useradd -m www

然后为这个账号设置密码

1
$ passwd www

创建 git 仓库并初始化

我们创建/data/repos目录用于存放 git 仓库

1
$ mkdir -p /data/repos

创建好后,初始化一个裸露的仓库

1
$ cd /data/repos/ && git init --bare myBlog.git

这个仓库用于存放Hexo博客的git仓库

给 git 仓库目录设置用户和用户组并设置权限

1
2
$ chown -R www:www /data/repos/myBlog.git
$ chmod 755 /data/repos/myBlog.git

创建网站存放目录

创建网站目录文件

1
2
$ cd /data
$ mkdir -p /data/www/myBlog

给网站目录文件设置权限

1
2
$ chown -R www:www /data/www/myBlog
$ chmod 755 /data/www/myBlog

绑定git hook

创建git同步钩子

1
2
$ cd /data/repos/myBlog.git/hooks
$ vi /data/repos/myBlog.git/hooks/post-receive

按下i键,进入插入模式,输入钩子脚本如下:

1
2
#!/bin/bash
git --work-tree=/data/www/myBlog --git-dir=/data/repos/myBlog.git checkout -f

按下ESC键退出编辑模式,输入:wq保存并退出文件

增加可执行权限

1
2
$ chown -R www:www /data/repos/myBlog.git/hooks/post-receive
$ chmod +x /data/repos/myBlog.git/hooks/post-receive

二、ssh连接配置

生成ssh密钥对

在本地客户端电脑上,输入shell命令生成密钥对[4]

1
2
3
4
5
$ cd ~
$ mkdir .ssh
$ cd .ssh
$ ssh-keygen -t rsa
## 生成公钥和私钥

这时会生成两个文件,如:id_rsaid_rsa.pub。其中有后缀名.pub的是公钥,没有后缀名的是私钥。

如果已生成了公钥和私钥,可跳过这步。

绑定私钥

本地客户端电脑上,进入到用户文件夹,创建ssh配置文件。

1
2
3
4
$ cd ~
$ cd .ssh
$ touch config
$ vi config

修改配置文件,绑定刚刚生成的私钥。

config

1
2
3
4
5
# blog
Host <你的私有云服务器地址>
HostName <你的私有云服务器地址>
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

保存文件,并确认配置文件config和私钥id_rsa在同一目录.ssh下。

若有多个密钥对,也可以通过此文件进行配置。[5]

绑定公钥

切换到git用户,创建ssh密钥目录

1
2
3
4
5
$ su git
$ cd /home/www
$ mkdir .ssh
$ cd /home/www/.ssh
$ chmod 755 /home/www/.ssh

绑定密钥

1
2
3
4
$ touch authorized_keys
$ vi authorized_keys
## 输入客户端ssh公钥
$ chmod 600 authorized_keys

重启ssh服务

1
$ systemctl restart sshd

更改www用户默认shell

使用命令查找 git-shell 所在目录

1
2
3
$ su root
$ which git-shell
# /usr/bin/git-shell

输入命令,编辑/etc/passwd文件,

1
$ vi /etc/passwd

将最后一行关于www用户的登录 shell 配置改为查找到的 git-shell 的目录如下

passwd

1
www:x:1001:1001::/home/www:/usr/bin/git-shell

此举是为了保证访问安全,将git用户默认的shell修改为git,禁止其使用Linux shell。

使用搭建好的 Git 服务

克隆仓库到本地客户端电脑

1
$ cd ~ && git clone www@<你的私有云服务器地址>:/data/repos/myBlog.git

三、nginx配置

安装nginx服务

1
2
$ su root
$ yum install -y nginx

修改nginx启动用户

输入命令,配置nginx

1
2
$ cd /etc/nginx
$ vi nginx.conf

在nginx.conf文件中,找到如下内容:

nginx.conf

1
2
3
4
5
6
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;

查看使用nginx服务的用户名,将其修改为我们创建的www用户。

1
2
3
4
5
6
7
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

# user nginx;
user www;
worker_processes auto;

按下ESC键退出阅读模式,输入:q退出文件。

设置nginx网站服务

输入命令,打开nginx配置

1
2
$ cd /etc/nginx
$ vi nginx.conf

在nginx.conf文件中,找到如下内容:

nginx.conf

1
2
3
4
5
6
server{
listen 80 default_server;
listen [::]:80 default server;
server_name 172.0.0.1
root /usr/share/nginx/html;
}

root这一行的/usr/share/nginx/html;修改为用于存放网站文件的目录。

nginx.conf

1
2
3
4
5
6
7
server{
listen 80 default_server;
listen [::]:80 default server;
server_name 172.0.0.1
# root /usr/share/nginx/html;
root /data/www/myBlog;
}

按下ESC键退出编辑模式,输入:wq保存并退出文件

重启nginx服务器

在nginx服务停止后,输入命令,重启nginx服务。

1
$ nginx -c /etc/nginx/nginx.conf

需要停止nginx服务,使用以下命令:

1
$ nginx -s stop

需要重启nginx服务,可以使用以下命令

1
2
$ systemctl restart nginx.service
$ nginx -s reload

本地客户端创建Hexo项目并部署

以下步骤在本地客户端电脑操作

一、建立Hexo项目(Mac OS)

安装brew

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

中国地区安装方法

1
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装node.js

1
$ brew install node

或者需要指定版本

1
$ brew install node@6.14.0

安装Hexo-cli

1
$ npm install hexo-cli -g

安装完成后,在终端查看hexo的版本

1
$ hexo -s

创建Hexo项目

1
2
$ cd ~
$ hexo init

如果已存在Hexo项目,但丢失了node_modules目录,可以通过如下命令重新安装依赖包

1
2
$ cd <你的Hexo博客目录>
$ npm install hexo

二、Hexo部署配置

安装hexo-deployer-git

1
$ npm install hexo-deployer-git --save

Hexo项目的deploy配置

1
2
3
4
deploy:
type: git
repo: www@<你的私有云服务器地址>:/data/repos/myBlog.git
branch: master

使用deploy发布博客到云服务器

1
2
$ hexo g
$ hexo deploy

访问你的博客

完成以上步骤后,通过直接访问公网IP地址,或者通过你自己的域名(经过IP绑定、备案),将可以访问到自己的博客

参考

  1. netlify.Hexo[EB/OL].https://hexo.io/zh-cn/, 2022/2022
  2. git[EB/OL].https://git-scm.com/, 2022/2022
  3. nginx[EB/OL].https://nginx.org, 2022/2022
  4. 生成/添加SSH公钥 - Gitee.com[EB/OL].https://gitee.com/help/articles/4181, 2022/2022
  5. Git配置多个SSH-Key - Gitee.com[EB/OL].https://gitee.com/help/articles/4229, 2022/2022

部署Hexo博客到私有云服务器上
http://blog.cnctema.pub/post/zh-CN/3959f95a9e1b/
作者
cnctema
发布于
2022年5月14日
许可协议