个人博客就想游戏里的装备,要想更厉害一点,总归要花钱的,不过这个钱花得很实在。
绑定个人域名
域名被发明出来原本只是方便人们记忆,给IP起个名字,但现在有了品牌的意义。说高级一点,这也是一笔无形资产。
买买买
域名很便宜,建议在 阿里云 上购买。个人观点,域名除了要有意义以外,最重要一点是,短。很多人拿自己名字的全拼去申请域名,比如zhangsanfeng.com,字母太多敲得累,如果换成拼音的首字母zsf.com,是不是一下子就显得高大上了?但这域名肯定天价,com、cn、net都比较贵,那就换别的后缀,vip、xyz、top也很好。
申请流程比较繁琐,填资料交钱备案,中间有不明白的可自行百度,等域名拿到手的那一刻,一切等待都是值得的。
绑定
打开阿里云的控制台,找到域名绑定,如果你有自己的服务器,就填写一个A记录,表示将域名指向一个IP,然后在记录值里写上IP。
如果你是用GitHub作博客,就填写一个CNAME记录,表示将域名指向另一个域名,然后在记录值里写上自己GitHub的博客地址,例如zhangsanfeng.github.io。还没完,现在绑定并没有生效,需要在博客里改点东西
- 本地打开博客项目
- 找到
source文件夹,点进去 - 新建文本文档
CNAME.txt - 输入自己的域名,例如
zhangsanfeng.com,保存 - 将
CNAME.txt重命名为CNAME - 部署到GitHub
大功告成,浏览器访问zhangsanfeng.com。
使用自己的服务器
如果你不喜欢用GitHub作博客,想使用自己的服务器,那你肯定是个搞IT的,因为没有普通用户会为了一个博客而去自己搭服务,门槛比较高,也太折腾。但文章写到这,就把它一并讲了,接下来的内容各位选择性略过。
项目结构
Hexo项目中,有这些文件和文件夹
node_modules,hexo依赖包public,hexo生成的页面,部署的就是里面所有的静态资源scaffolds,命令生成文章等的模板source,自己实际写的文章themes,主题_config.yml,整个博客的配置db.json,source解析后得到的package.json,项目所需模块的配置信息
Hexo部署的原理就是,把public里的所有内容同步到服务器的HTTP服务中。
部署思路
Hexo的页面全部是静态的,因此使用Nginx做HTTP服务,性能好配置也简单。剩下的问题是如何同步,还是用Git,我们在服务器创建一个Git仓库,这样做的目的有两个
- 结合
hexo-deployer-git插件,实现一键部署,解决文件从本地到服务端的问题 - 配置Git钩子,在每次Git接收到更新时,触发钩子,将仓库中文件同步到Nginx的网站根目录
参考 阿里云VPS搭建自己的的Hexo博客。至于钩子是什么,引用 官方文档 一句话
Git 能在特定的重要动作发生时触发自定义脚本。
创建Git仓库
我用的是CentOS系统,因此用yum安装Git
1 | $ yum install -y git |
指定裸仓目录
1 | $ cd /home/git |
在Hexo的配置里,使用非root用户连接服务器更安全。增加只操作Git的用户git,并改变仓库目录的所属,否则git用户无权访问
1 | $ adduser git |
配置Nginx
先安装
1 | $ yum install -y nginx |
查看Nginx配置文件路径,然后修改
1 | $ nginx -t |
找到下面这一段
1 | server { |
修改上面三个地方。接下来创建网站根目录并修改所属,启动Nginx
1 | $ mkdir /usr/local/blog |
注意,一定要修改网站根目录的所属,否则下面配置的Git钩子会因为无权访问而不生效。
配置hooks
仓库中的hooks目录,就是存放钩子的地方,重命名post-update.sample为post-update
1 | $ cd /home/git/blog.git/hooks |
将post-update修改为
1 |
|
最后,确保post-update拥有执行权限。
修改博客配置
和部署到GitHub的过程是一样的,只不过要修改部署地址,打开全局配置文件_config.yml,找到deploy节点
1 | deploy: |
同样需要部署插件hexo-deployer-git,没安装的话,在博客项目中打开命令行
1 | $ npm install hexo-deployer-git --save |
去吧皮卡丘
部署命令和之前一样,毕竟整个过程只是服务端变了,客户端除了一个地址,其余都不用动
1 | $ hexo g -d |
参考 基于Hexo、git、nginx静态博客实现自动部署功能。使用自己的服务器作博客,就完成了,但还有几点不完美的地方,其中一个是没有配置SSH,但这个篇幅较大,所以下次再讲。