hexo配置到github国内访问不用梯子上不去,一直想把博客放到自己的服务器上,这样baidu也可以收录。接下来介绍一下配置过程。

环境

云服务器 ubuntu20.04
本地主机装好hexo(不会的可以看下我之前关于hexo的文章)

将hexo配置到个人服务器

安装git和nginx

以下操作建立在 root 权限之下,如权限不足请申请 root 权限或采用 sudo 关键字。

1
2
apt-get update
apt-get install git nginx -y

安装完成后新建一个文件路径来存放我们的git仓库并初始化仓库:

1
2
3
mkdir /var/repo/
cd /var/repo
git init --bare {自定义仓库名name}.git

配置 Nginx 托管文件目录

创建一个新的www目录(如果想使用默认的可以跳过这一小节)

1
mkdir -p /var/www/hexo

修改 Nginx 的 default 文件使得 root 指向刚刚创建的 /var/www/hexo目录:

1
2
3
4
vim /etc/nginx/sites-available/default

# 找到root字段并修改为:
root /var/www/hexo

重启nginx服务:

1
service nginx restart

配置完成。

tips:可以自己随便写个网页放到这个目录,ip访问一下服务器看看配置成功没有。

Git勾子(hooks)

我们的hexo文件传到服务器的git后,需要同步传到nginx的托管目录下。这样访问网站时才会有hexo的内容,这就需要使用git hooks。

执行下面的命令,在自动生成的{自定义仓库名name}.git/hooks 目录下创建一个新的钩子文件:

1
vim /var/repo/{自定义仓库名name}.git/hooks/post-receive

tips:注意这是要新建一个文件,而不是用post-update.sample这个文件。我踩了粗心大意的坑

打开文件后,加入下面的代码:

1
2
3
#!/bin/bash

git --work-tree=/var/www/hexo --git-dir=/var/repo/{自定义仓库名name}.git checkout -f

将文件保存后,赋予该文件可执行权限:

1
chmod +x /var/repo/{自定义仓库名name}.git/hooks/post-receive

使用Git部署本地Hexo到远端

将服务器地址添加到受信任的站点,在本地任意目录从服务器上把hexo_static仓库克隆下来:

1
git clone root@{云服务器IP}:/var/repo/ganahBlog.git

tips: 如果你在远端服务器创建了 Git 用户并设定为拥有者,请将 root 改成 git (git用户)。

编辑本地hexo工作目录中的_config.yml,将url改成https://{云服务器IP或域名}/

将 deploy 目标改为 {服务器用户名}@{服务IP}:/var/repo/{自定义仓库名name}.git:
img

在个人博客站点目录下,打开 Git bash ,使用 hexo clean && hexo g -d 部署

这里如果不想每次都输密码,可以将本地的id_rsa.pub文件写入服务器用户家目录的.ssh文件夹中
具体操作参考:https://blog.csdn.net/jewely/article/details/104743806/(ssh密钥的生成和配置部分)

至此,可使用IP地址访问博客。
img

nginx配置https

获取证书文件

自己去域名商那里申请一个nginx的证书文件(或者自己openssl签发),一般是如下几个:

1
2
3
4
callmelp.online.csr
callmelp.online.key
callmelp.online_bundle.crt
callmelp.online_bundle.pem

我们需要用的是.crt和.key文件

域名解析

在域名商那边把域名解析到自己服务器的ip地址

配置nginx

添加https站点:修改 /etc/nginx/sites-enabled/default站点的配置文件(记得自己先备份):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
root /var/www/www.domain.com; #网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
index index.html index.htm;
ssl_certificate /usr/local/nginx/conf/1_www.domain.com_bundle.crt; #证书文件路径+名称
ssl_certificate_key /usr/local/nginx/conf/2_www.domain.com.key; #私钥文件路径+名称
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
server {
listen 80;
server_name www.domain.com; #填写绑定证书的域名
rewrite ^(.*)$ https://$host$1 permanent; #把http的域名请求转成https
}