把Hexo部署到云服务器
把Hexo部署到云服务器
前言
虽然我们可以把Hexo免费部署到Github Pages上,但是考虑到国内网络访问Github并不是那么友好,我决定把博客部署到自己的云服务器上。部署的前提是得有一个云服务器,本文以腾讯云为例简单说明一下,主要是记录自己踩过的坑,避免哪天重新搭建的时候重复踩坑。
服务器环境
我服务器装的是腾讯云提供有的宝塔面板镜像,CentOs 7.9 64位,集成软件:LNMP,LAMP,tomcat,Node.js。当然不装宝塔也可以,只是对于博主这种非Linux技术栈的人来说,宝塔面板方便很多。
部署步骤
友情提示
本文除非明确说明是在本地操作的,否则所有步骤都是在云服务器上操作。
Git安装
其实上面镜像安装完毕后,自带已经有git,但是我跟着这篇文章(文章中Git安装及配置的1~3步)
重新安装了一遍最新版,安装在/home/git/
目录下,安装的版本是2.29.2
。如果是用自带的git的话,应该也没什么问题。
创建git用户并部署环境
创建git用户
1 | adduser git |
新增git用户(注意这个git只是该主机上的一个用户的名字)
修改sudoers文件
输入指令
1 | //修改权限 |
可以进入编辑模式,对sudoers文件内容进行修改
找到以下内容:
1 | ## Allow root to run any commands anywhere |
新增一行代码:
1 | git ALL=(ALL) ALL |
修改后如下:
1 | ## Next comes the main part: which users can run what software on |
输入以下代码,保存并退出
1 | :wq |
最后改回权限:
1 | chmod 400 /etc/sudoers |
以上步骤可通过宝塔面板直接找到文件编辑
修改sshd_config文件
输入以下代码编辑sshd_config文件
1 | vim /etc/ssh/sshd_config |
在sshd_config文件中设置以下几项(注意有些以#开头的是被注释了的,需要打开注释)
1 | RSAAuthentication yes |
以上步骤可通过宝塔面板直接找到文件编辑
设置git用户密码
1 | sudo passwd git |
需要记下这个密码,后续步骤可能会提示输入
配置ssh
在这一步骤开始之前,首先得确保我们得有密钥,当然一般我们已经搭建过Hexo博客,那么肯定已经创建过了,一般是存放在C/User/你的用户名/.ssh
下。
没找到的话,可以参考:
Git生成SSH密钥(这里的步骤是在本地主机操作)
要注意的是,配置ssh主要是为了本地可以免密登录到服务器,这里生成密钥的时候不能设置密码,生成过程应该连按回车跳过密码步骤。
id_rsa.pub
id_rsa
最后在本地获得这两个文件,有后续的是公钥,没后续的是私钥,把他们放到服务器的/home/git/.ssh
路径中
切换到git用户(重要!)
1 | su git |
然后编辑authorized_keys文件
1 | cd ~ |
最后用以下指令测试是否可以免密登录服务器
1 | ssh -v git@服务器的公网ip |
若提示需要密码,先检查
- 是否先用su git切换到git用户再进行其他步骤
- 密钥创建时不能带密码
如果仍然提示需要密码,可以根据以下文章修改,主要是权限问题:
git仓库与网站部署
这一步骤主要讲如何在本地生成后,利用hexo d
推送生成内容到服务器上,如果已经实现了提交网站源码自动提交生成内容的自动部署(参考:Hexo-Butterfly主题博客搭站记录),或者需要实现云服务器CI的,可以跳过这一步骤,直接跳到[利用Github Actions搭建云服务器CI流程](##利用Github Actions搭建云服务器CI流程),实现服务器上的自动部署
切换到git用户(重要!)
1 | su git |
我们需要创建一个网站根目录,博主创建在/www/wwwroot/Hexo
这个路径
1 | mkdir /www/wwwroot/Hexo |
创建git仓库
1 | cd ~ |
使用–bare参数,Git 就会创建一个裸仓库,裸仓库没有工作区,我们不会在裸仓库上进行操作,它只为共享而存在
修改blog.git权限
1 | chown git:git -R blog.git |
在 /home/hexo/blog.git 下,有一个自动生成的 hooks 文件夹,我们创建一个新的 git 钩子 post-receive,用于自动部署。
1 | vim blog.git/hooks/post-receive //这里必须在git用户下用指令创建,不能用其他用户或宝塔面板创建 |
设置钩子,在该文件写入(这个操作可以在宝塔面板写入)
1 | git --work-tree=/www/wwwroot/Hexo --git-dir=/home/git/blog.git checkout -f |
这里有一点要注意的,因为我博客原本也是部署在Github Pages上的,现在Github新的仓库默认分支名是main,而不是master,所以_Config.yml
文件中的deploy项配置的分支是main,而服务器的git仓库默认分支是master,如果在服务器上我们仍然是push到main的话,需要在钩子上添加分支名称,如下:
1 | git --work-tree=/www/wwwroot/hexo --git-dir=/home/git/blog.git checkout -f main |
最后修改该钩子文件权限
1 | chmod +x /home/git/blog.git/hooks/post-receive |
在本地修改hexo的_Config.yml
配置
1 | deploy: |
这时在本地执行三连
1 | Hexo clean && Hexo g && hexo d |
这个时候生成的网页文件已经推到服务器了
若未设置站点,可在宝塔面板添加站点,根目录设置到/www/wwwroot/hexo,这里就不再赘述了,可在网上参考或看宝塔文档
然后在浏览器输入自己站点的域名,能正确看到博客内容,即部署成功了
如果不成功,先检查下以上步骤是不是都是在git用户下进行的,不然会有权限问题,如果还是不行,可以尝试删除本地Hexo目录的.deploy_git
文件夹,再执行Hexo三连,参考:hexo d 显示成功 但是在网站上面内容没有更新
利用Github Actions搭建云服务器CI流程
这一步主要是在我们已经使用Github管理我们的Hexo博客源码时,借助Github Action实现只需要提交源码,就会自动生成网页文件,并把文件推到服务器上
详细步骤可以参考上面链接,下面贴出我用的代码
1 | # workflow name |
需要在仓库的setting-secrets配上以下字段
- HEXO_DEPLOY_PRIVATE_KEY:私钥
- REMOTE_HOST:网站ip地址
- REMOTE_USER:用户名(git)
- TARGET:服务器上的网站路径(/www/wwwroot/Hexo)
若action失败,请检查服务器/www/wwwroot/Hexo
目录权限所有者是不是git
宝塔面板 SSL 证书安装部署
把博客部署到自己服务器,并使用自己的域名访问时,若没有部署SSL可能会在浏览器有不安全的提示,可以按上面步骤免费部署。