hexo博客迁移云服务器

前言

最近搞了个域名,并且用移动网络访问 github pages 太慢了,有时甚至根本上不去,干脆就直接把博客从 github 迁移到国内的云服务器上。

云服务器配置

安装 Git 和 Nginx 服务

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

新建一个 git 仓库的路径并修改权限

1
2
3
mkdir /var/repo/
chown -R $USER:$USER /var/repo/
chmod -R 755 /var/repo/

创建远程 git 仓库

1
2
3
cd /var/repo
git init --bare {自定义仓库名name}.git
# 例如 git init --bare hexo-source.git

配置 Nginx 文件目录

1
2
3
mkdir -p /var/www/hexo
chown -R $USER:$USER /var/www/hexo
chmod -R 755 /var/www/hexo

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

1
vim /etc/nginx/sites-available/default

修改完如下所示

server {
listen 80 default_server;
listen [::]:80 default_server;
#
# 中间的省略
#
root /var/www/hexo;
server_name zhaoxing.wang; # 有域名可以替换掉

重启 nginx 服务

1
service nginx restart

配置 git hooks

在自动生成的hexo-source.git/hooks 目录下创建一个新的钩子文件

1
vim /var/repo/hexo-source.git/hooks/post-receive

编辑文件,输入下面的内容。注意你原来的分支是什么,可以在hexo_config.yml里的deploy下的branch查看,我这里是main,后续如果git上传不了,可以排查一下这里。

1
git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo-source.git checkout -f main

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

1
chmod +x /var/repo/hexo-source.git/hooks/post-receive

本地配置

编辑站点配置文件_config.yml , 将url改成https://{云服务器IP}/,将deploy目标改为 {服务器用户名}@{服务IP}:/var/repo/hexo-source.git,如果云服务器的默认端口改过,不是22,则改为ssh://user@ip:port/var/repo/hexo-source.git的形式。

1
2
3
4
deploy:
type: git
repository: ssh://root@114.514.1919.810:8000/var/repo/hexo-source.git
branch: main

然后就和以前的步骤一样,在个人博客目录下打开git bash,使用 hexo clean && hexo g -d 部署。

https配置

SSL证书

配置完上面的步骤后,正常来说是可以访问的,但是我有一些加密的文章却访问不了,输入密码后没有反应。搜了一下原因,反正大概就是必须得用 https 才能正常使用,下面就继续配置一下 SSL
先上阿里云申请一个免费的SSL证书,这个有详细的教程就不说了,反正下载nginx的解压完后有两个文件,一个是key一个是pem,然后把这两个文件上传到/etc/nginx/cert路径下,没有就自己建一个。

修改Nginx配置文件

打开站点配置文件(通常位于 /etc/nginx/sites-available/ 目录下)

1
sudo vim /etc/nginx/sites-available/default

添加HTTPS Server块(替换以下内容中的域名和路径)

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
server {
listen 443 ssl http2; # 启用SSL和HTTP/2
server_name zhaoxing.wang; # 替换为你的域名

# 指定证书和私钥路径
ssl_certificate /etc/nginx/cert/zhaoxing.wang.pem;
ssl_certificate_key /etc/nginx/cert/zhaoxing.wang.key;

# 优化SSL配置(推荐)
ssl_protocols TLSv1.2 TLSv1.3; # 禁用旧版TLS
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;

# 网站根目录配置(需与原有HTTP配置一致)
root /var/www/html;
index index.html index.htm;

location / {
try_files $uri $uri/ =404;
}
}

# 重定向HTTP到HTTPS(可选但推荐)
server {
listen 80;
server_name zhaoxing.wang;
return 301 https://$host$request_uri;
}

验证并应用配置

检查Nginx配置语法

1
sudo nginx -t

如果显示 syntax is oktest is successful 表示配置正确
重启Nginx服务

1
sudo systemctl restart nginx

记得防火墙放行HTTPS

顺便说下

域名备案后要把备案号放上去,hexobutterfly主题要在themes/butterfly/layout/includes/footer.pug里添加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#footer-wrap
if theme.footer.owner.enable
- var now = new Date()
- var nowYear = now.getFullYear()
if theme.footer.owner.since && theme.footer.owner.since != nowYear
.copyright!= `©${theme.footer.owner.since} - ${nowYear} By ${config.author}`
else
.copyright!= `©${nowYear} By ${config.author}`
<a href="http://www.beian.miit.gov.cn/" style="color:#f72b07" target="_blank">蜀ICP备2025145090号</a>
if theme.footer.copyright
.framework-info
span= _p('footer.framework') + ' '
a(href='https://hexo.io')= 'Hexo'
span.footer-separator |
span= _p('footer.theme') + ' '
a(href='https://github.com/jerryc127/hexo-theme-butterfly')= 'Butterfly'
if theme.footer.custom_text
.footer_custom_text!=`${theme.footer.custom_text}`

参考资料

将hexo个人博客部署到个人云服务器–最详细踩坑教程