Hexo部署到服务器

本来Hexo是部署在GitHub上的,无奈访问太慢了,并且有些地区打不开,我这个强迫症就忍不了这种情况。就有了以下开端

一、前提准备

阅读此文章之前,你可能需要首先阅读以下的文章才能更好的理解上下文。

如果你需要购买服务器并安装宝塔面板,可以看下这个文章

添加站点

在宝塔面板->网站->添加站点,填写域名,版本设置纯静态。记住网站资源目录 /www/wwwroot/ruom.top

二、Git仓库搭建

之前推hexo的静态文件都是推到GitHub的仓库,现在服务器也是一样,需要仓库来保存

下面操作需要有Linux基础知识驱动

1.添加一个用户git

在服务器端

1
2
3
4
5
6
adduser git   #添加git用户
chmod 740 /etc/sudoers #改变sudoers文件的权限为文件所有者可写
vim /etc/sudoers
#在root ALL=(ALL) ALL 下方添加一行
git ALL=(ALL) ALL
chmod 400 /etc/sudoers #将其权限修改为文件所有者可读

2.给git用户添加ssh密钥

这一步是为了建立主机与服务器连接,使其不需要密码也能登陆

1
2
3
4
5
6
#在本地打开powershell 生成密匙 如已有密匙可跳过这一步 部署过hexo的应该都有
ssh-keygen -t rsa -C "ruom.top"
# -t 指定密钥类型,默认是 rsa ,可以省略
# -C 用于识别这个密钥的注释,可以输入任何内容
# -f 指定密钥文件存储文件名,默认id_rsa
## 这个生成的文件在 C:\Users\用户名\.ssh

复制公匙id_rsa.pub内容到服务器/home/git/.ssh/authorized_keys,关闭终端

使用ssh git@server重新登录服务器,测试是否能不要密码登录到git用户,如出现Permission denied的问题可查看服务端是否开启ssh的密钥登录

1
2
3
4
5
6
#在服务器端
su git #切换到git用户
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys #创建authorized_keys文件
chmod 600 ~/.ssh/authorized_keys #为authorized_keys文件赋予文件所有者可读可写的权限
chmod 700 ~/.ssh #为.ssh文件夹赋予文件夹所有者可读可写可执行的权限

3.创建Git仓库

1
2
3
mkdir /home/git/repos    #新建目录,这是git仓库的位置
cd /home/git/repos
git init --bare blog.git #初始化一个名叫blog的仓库

4.配置钩子实现自动部署

找到 /home/git/repos/blog.git/hooks/post-update.sample 改名post-update,内容改为

1
2
#!/bin/sh
git --work-tree=/www/wwwroot/ruom.top --git-dir=/home/git/repos/blog.git checkout -f

然后给权限

1
2
3
4
cd blog.git/hooks/
chmod +x post-update #赋予其可执行权限
chown -R git:git /home/git/repos/ #仓库所有者改为git
chown -R git:git /www/wwwroot/ruom.top/ #站点文件夹所有者改为git

5.测试Git仓库是否可用

1
2
#在本地端,如果能将仓库拉下来,说明Git仓库搭建成功
git clone git@server_ip:/home/git/repos/blog.git

三、配置和测试

1.配置

修改本地Hexo博客文件夹中的_config.yml文件

1
2
3
4
deploy:
type: git
repo: git@server_ip:/home/git/repos/blog.git
branch: master

2.测试

1
2
3
hexo clean  #清除缓存
hexo generate #生成静态页面
hexo delopy #将本地静态页面目录部署到云服务器

也可以在package.json 中添加 npm 脚本,这样就可以直接npm run d一下执行

1
2
3
4
5
6
7
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server",
"d": "hexo clean && hexo generate && hexo deploy"
},

然后访问刚开始绑定的网站域名看看是否成功 (记得解析哦)

以上内容仅记录所用,不保证后续还能打开