hexo教程 - 部署在CentOS服务器上

从零开始搭建自己的Hexo博客

基于私有服务器搭建,Nginx + Git

准备工作

  • 在自己的电脑上部署好Hexo环境
  • 准备一台CentOS系统的服务器(教程中使用的是Centos7

配置Nginx

安装Nginx

1
2
3
sudo yum install -y epel-release    # 安装epel-release
sudo yum -y update
sudo yum install -y nginx

安装成功后,默认的目录为/usr/share/nginx/html,新建一个blog文件夹用来专门存储Hexo生成的静态文件,同时新建/etc/nginx/ssl文件夹用于存储证书:

1
2
mkdir /usr/share/nginx/blog
mkdir /etc/nginx/ssl

启动Nginx

1
2
systemctl start nginx
systemctl enable nginx # 设置开机自启动

获取免费SSL证书 (acme 协议)

acme 协议一般有两种方式验证: http 和 DNS 验证,这里使用HTTP进行验证,更多方式可参照官方文档

本教程以80(HTTP)和443(HTTPS)端口为例配置Nginx。大部分服务器都会默认开放80443端口,证书生成需要保证网站的HTTP正常访问,因此如果没有默认开启80端口,需手动打开。

安装acme.sh

1
2
3
yum install -y socat
curl https://get.acme.sh | sh -s email=<email> # 将<email>替换为自己的邮箱
alias acme.sh=~/.acme.sh/acme.sh

修改Nginx配置文件

在命令行输入命令打开Nginx配置文件:

1
vi /etc/nginx/nginx.conf

滚动文件至末尾,将未被注释的server字段(HTTP服务器)中的server_name为你的域名,root目录改为/usr/share/nginx/blog

1
2
3
4
5
6
7
8
9
10
{
# ...
server {
listen 80;
listen [::]:80;
server_name <domain.com>; # <domain.com>替换为自己的域名
root /usr/share/nginx/blog;
# ...
}
}

保存并退出后,重启Nginx:

1
systemctl restart nginx

生成证书

通过Nginx配置获取根目录,<domain.com>替换为自己的域名:

1
acme.sh --issue -d <domain.com> --nginx /etc/nginx/nginx.conf

命令行输出一下信息时,则已经成功生成证书:

1
2
3
4
5
6
7
8
[Wed Feb  7 19:36:00 UTC 2024] Cert success.
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
[Wed Feb 7 19:36:00 UTC 2024] Your cert is in: /root/.acme.sh/<domain.com>_ecc/<domain.com>.cer
[Wed Feb 7 19:36:00 UTC 2024] Your cert key is in: /root/.acme.sh/<domain.com>_ecc/<domain.com>.key
[Wed Feb 7 19:36:00 UTC 2024] The intermediate CA cert is in: /root/.acme.sh/<domain.com>_ecc/ca.cer
[Wed Feb 7 19:36:00 UTC 2024] And the full chain certs is there: /root/.acme.sh/<domain.com>_ecc/fullchain.cer

当生成过程中出现任何错误导致失败时,在Debug后最快捷的从新开始的方式是直接删除/root/.acme.sh文件夹并重新安装acme.sh:

1
2
rm -rf .acme.sh
curl https://get.acme.sh | sh -s email=<email> # 将<email>替换为自己的邮箱

设置证书存储位置并自动更新

1
2
3
4
acme.sh --install-cert -d <domain.com> \
--key-file /etc/nginx/ssl/server.key \
--fullchain-file /etc/nginx/ssl/server.crt \
--reloadcmd "service nginx force-reload"

配置HTTPS服务

在命令行打开Nginx配置文件:

1
vi /etc/nginx/nginx.conf

把最后被注释的server字段(HTTPS服务器)解除注释,并修改server_namerootssl_certificatessl_certificate_key的值,server_nameroot与HTTP服务器保持一致,ssl_certificatessl_certificate_key改为对应证书文件的路径。最后修改后的配置文件(部分)如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
# ...
# Settings for a TLS enabled server.
#
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name <domain.com>; # <domain.com>替换为自己的域名
root /usr/share/nginx/blog;

ssl_certificate "/etc/nginx/ssl/server.crt";
ssl_certificate_key "/etc/nginx/ssl/server.key";
# ...
}

}

保存并退出后,重启Nginx:

1
systemctl restart nginx

常用命令

启动Nginx

1
systemctl start nginx

设置开机自启动

1
systemctl enable nginx

停止Nginx

1
systemctl stop nginx

重启Nginx

1
systemctl restart nginx

查询Nginx状态

1
systemctl status nginx

重新加载Nginx配置文件

1
systemctl reload nginx

取消开机自启动

1
systemctl disable nginx

配置Git仓库

安装Git

首先先在命令行输入git检查是否已安装好Git,如果没有,使用以下代码安装:

1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
yum install -y git

创建用户

在服务器上创建一个用户名为git的用户,并设置密码。

1
2
3
useradd git
# 设置git用户的密码
passwd git

创建Git仓库

切换到git用户并创建用于储存Hexo静态文件的Git仓库:

1
2
3
su git                      # 切换到git用户
cd /home/git/
git init --bare blog.git # 创建裸仓库

成功创建:

1
Initialized empty Git repository in /home/git/blog.git/

创建钩子 (Githook)

1
2
cd blog.git/hooks
vi post-receive

在文件中写入以下指令:

1
2
#!/bin/sh
git --work-tree=/usr/share/nginx/blog --git-dir=/home/git/blog.git checkout -f

修改文件及仓库权限:

1
2
3
4
chmod +x post-receive
exit
chown -R git:git /home/git/blog.git
chown -R git:git /usr/share/nginx/blog

RSA公私钥生成

用于免密登录git用户

在本机(以Windows为例)打开C:/Users/<username>/.ssh文件夹,若没有id_rsaid_rsa.pub文件(之前未曾生成过密钥),则输入以下指令生成密钥:

1
ssh-keygen -t rsa

确定以持有密钥后,将公钥拷贝到服务器上,在本机的Git Bash输入:

1
ssh-copy-id -i C:/Users/<username>/.ssh/id_rsa.pub git@<ip> # 替换<username>和<ip>为对应值

限制git用户权限

查找git-shell位置并将路径添加到/etc/shells文件的末尾(如不存在):

1
2
which git-shell
# 默认为/usr/bin/git-shell

修改/etc/passwd中git用户的权限,使其只能使用git-shell:

1
2
# ...
git:x:1001:1001::/home/git:/usr/bin/git-shell

配置Hexo

修改Hexo的_config.yml配置文件中的deploy设置为:

1
2
3
4
deploy:
type: git
repo: git@<ip>:/home/git/blog.git
branch: master

清除并部署:

1
2
hexo clean
hexo g -d

待完成后访问域名就可以看到自己的博客啦!