部署 Hexo 个人博客框架到服务器
前言
我为什么要从 Wordpress 换为 Hexo
一个关键字:卡!Wordpress 太卡了,十分笨重和不方便。对于小小服务器来说简直是难以承受。况且对于内容为主的博客,Wordpress 显得过于臃肿,有大量插件可以用,也意味着你要看更多的广告和垃圾信息。此外,Wordpress 用户数量多,社区庞大,但社区内容鱼龙混杂,充斥大量商业化甚至无用的信息,不够纯粹,质量偏低
Wordpress 对于小白来说好上手,无脑后台管理。而拥有一点点编程经验的我完全可以凭一点点知识储备和动手能力砍掉多余的,无用的东西。Hexo 相较于 Wordpress,更轻,静态页面对 SEO 更友好,文章数据管理更方便、更让人贴心。
实现思路和原理
整个过程实现的原理可以用下图表示。
可参照下文顺序进行配置。
本地配置准备
Hexo
本地启用 Hexo:按照官方文档搭建基本环境(Node.js,Git),在本地尝试部署并熟悉 hexo 的写作流程,了解配置文件结构,此处不再赘述。官方文档 | Hexo
在本地 Hexo 站点目录下安装 hexo-deployer-git 插件:
1 | npm install hexo-deployer-git --save |
配置 SSH 密匙
为了使本地可以跟远程的 github 建立联系,需要在本地配置 SSH 密钥,这样我们就可以在本地直接提交代码到 GitHub 上或者远端 git 仓库。
如果是第一次配置 SSH,则配置一下 git 的 username 和 email
1 | git config --global user.name "你要设置的名字" |
之后生成 SSH 密钥:
1 | ssh-keygen -t rsa -C "你刚刚设置的邮箱" |
如果不需要设置密码的话,连续三个回车就好了。
复制好公钥后面要用:
服务器端操作
如果你刚刚重新初始化阿里服务器云盘,可能会连接报错。具体解决方法请看文末。
Nginx
安装 Nginx 并配置好域名(如果有)。具体操作详见我的这篇文章。
Git
git 的安装与用户创建
1 | # 安装git |
在 vim 编辑模式下,这个地方加上一行 git ALL=(ALL) ALL
:
1 | ## Allow root to run any commands anywhere |
执行:
1 | chmod 400 /etc/sudoers # 改回权限 |
输两次密码即可:
1 | Changing password for user git. |
执行:
1 | su git # 切换至 git 用户 |
这里提一嘴,有时候切换不了 git 用户,即 su git
执行不了。其实也没事,就是知道 git 用户目录是 /home/git/
就行,即上面命令中的 ~
指的是 /home/git/
在本地电脑中,终端执行:
1 | ssh -v git@<你的服务器主机IP> |
如果能免密登录,那就成了。
仓库创建与钩子创建
保证之前在 Nginx 配置里的网站根目录的权限:
1 | chown -R git:git <网站根目录> |
创建仓库:
1 | mkdir repo # 我选择在git的用户目录下创建 |
在 post-receive 里边输入:
1 |
|
以上内容建议手打。可以看出第一个参数对应的是网站根目录,第二个参数是代码仓库目录。
添加权限:
1 | chown -R git:git hexo.git/hooks/post-receive |
本地上传到仓库
Hexo 配置
进入本地电脑 hexo 博客的根目录,编辑 站点配置文件 _config.yml ,找到 deploy,修改成以下:
1 | deploy: |
最后在本地电脑 hexo 博客的根目录执行命令:
1 | hexo clean |
deploy 不需要输入 git 账户密码。如果还提示需要输入,说明之前配公钥的步骤没有成功。
出现错误记得检查服务器端权限问题:
1 | chown -R git:git <你的仓库> |
在浏览器输入网址即可。
嫌每次都输入两个命令麻烦,可以在 package.json 中添加 npm 脚本:
1 | "scripts": { |
下次执行时可以直接:
1 | npm run publish |
其他问题
SSH 连接问题
服务器云盘初始化后,再次使用 ssh 连接时会有 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
的提示。解决方法:
1 | ssh-keygen -R <之前连接时的网段IP> |
再次 SSL 连接:
1 | ssh root@<服务器公网IP> |
出现一句:
Are you sure you want to continue connecting (yes/no)?
输入:yes 回车
参考:问题解决——SSH时出现WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!_口袋里のInit的博客-CSDN博客
钩子不起作用
出现已经推送到服务器但是钩子不起作用,且出现 cannot run hooks/post-receive: No such file or directory 的提示:
请重新创建并手打post-receive 文件,保证该文件有可执行权。
1 | chmod +x post-receive |
参考: cannot run hooks/post-receive: No such file or directory_渣渣林的博客-CSDN博客
hexo d 命令报错
hexo d 命令报错 ERROR Deployer not found: git
解决方案
这是因为没安装 hexo-deployer-git
插件,在站点目录下输入下面的插件安装就好了:
1 | npm install hexo-deployer-git --save |
然后在使用 Hexo d
命令就可以推送了。
参考:hexo d命令报错 ERROR Deployer not found: git_蓝蓝223的博客-CSDN博客