博客使用静态网站生成技术生成,静态网站生成是指静态生成网站的过程,即生成HTML文件,例如,在本地计算机中,然后将网站文件上载到服务器,该服务器在被请求时向用户提供服务。相比动态网站,有以下优点:
- 内容存储为平面文件,因此不需要数据库
- 静态网站不需要动态服务器端处理
- 静态网站比动态网站超快,因为它们不需要服务器端处理或数据库访问
- 静态网站比任何动态网站都更安全,因为可以利用的安全漏洞更少
- 缓存静态文件比缓存动态页面更有效
目前网上主流的静态站点生成器有三个,分别为Jekyll、Hugo、Hexo。
其中Jekyll由Github用Ruby语言构建,您可以免费使用Github Pages来托管您的静态网站,并使用CNAME文件轻松将其与您的自定义顶级域名链接。
它的主要弱点为随着网站内容的增长,构建过程变得非常慢。
另外,Hugo是一个用Go构建的静态站点生成器。它被宣传为“世界上最快的网站构建框架”。它最近与Jekyll相比,但在人气方面迅速增长。
它的主要缺点为可扩展性差和插件少。
而Hexo是基于Node的开源静态生成器,可在MIT许可下使用。借助Node.js平台,Hexo允许您在几秒钟内生成数百个静态文件。
主要有以下优点:
- 快速而令人难以置信的速度
- 使用一个部署命令部署到Github页面或任何其他主机
- 强大的Markdown支持
- 高度可扩展
- 可用的免费和开源主题
- 可用的免费插件
而且它的缺点是:Hexo有一个相对较大的社区,但大多数是非英语人士(来自中国),这个缺点从我们的角度来看就是优点啊。
根据以上分析,我采用的总体方案为:采用Hexo进行博客创建,其中使用Next主题进行配置,将生成的博客静态网站部署在自己搭建的vps服务器上,最后采用dnspot对域名进行解析。具体细节见下文。
Hexo环境搭建
安装
参照https://hexo.io/zh-cn/docs/ 网站,主要包括Node.js、Hexo和Git安装,Node.js、Git可以直接下载安装包安装,Hexo可以在Git Bash命令行里面安装:1
$ sudo npm install -g hexo-cli
建站
环境搭建好后就可以开始建站了,同样在Git Bash里面输入命令行进行:1
2
3$ hexo init <folder>
$ cd <folder>
$ npm install hexo --save其中folder为你要建立的博客的文件夹。
相关命令
站点建立好后,就可以开始写文章了,可以使用sublime编辑软件打开刚刚建好的folder博客文件夹,找到source/_posts目录即为要写的文章地址。
涉及到的一些命令如下:1
2
3
4
5
6
7
8
9
10
11
12#新建文章
$ hexo new [layout] <title>
#生成静态文件
$ hexo generate
#启动服务器
$ hexo server
#部署网站
$ hexo deploy
#生成完成后部署
hexo g -d
#清除缓存文件 (db.json) 和已生成的静态文件 (public)
$ hexo clean
Next主题
下载使用
进入之前建好的博客文件夹根目录,打开Git Bash,使用git命令进行Next源代码下载:1
$ git clone https://github.com/iissnan/hexo-theme-next themes/next
Git怎么使用子模块?
通过在 git submodule add 命令后面加上想要跟踪的项目 URL 来添加新的子模块:1
2
3
4
5git submodule add https://github.com/iissnan/hexo-theme-next themes/next
#查看
cat .gitmodules
#保持更新
git submodule update --init --recursive配置使用
关于Next主题的配置使用,直接看官网就好。
Hexo本地配置
主题配置
打开站点配置文件_config.yml,位于跟目录下,可以选择使用Next作为主题,参照官网进行配置就好。部署配置
部署其实就是怎么把生成的静态网站上传到服务器端,把部署方式和地址说明一下,我这里采用的是自己搭建的git服务器,也可以是github(那就要在github上新建 blogname-github-io 仓库)1
2
3
4deploy:
type: git
repo: git@你的服务器IP:/home/git/blog.git
branch: master
VPS搭建Hexo博客
作为自己搭建服务器来说,这部分是重点了。
- 什么是vps?
VPS(Virtual Private Server 虚拟专用服务器)技术,将一台服务器分割成多个虚拟专享服务器的优质服务。比如搬瓦工VPS是一款性价比较高的便宜VPS主机,且适合入门级网友学习Linux、建站和软件调试用途。搬瓦工VPS目前有洛杉矶MC、洛杉矶QN、凤凰城、佛罗里达、荷兰这8个数据中心,对中文速度较好的是洛杉矶和凤凰城。 - 基本原理
在服务器上搭建一个Git仓库。在本地Hexo执行deploy后,博客文件会被push到这个Git仓库,然后这个仓库又会通过一个git-hooks的功能把文件同步到VPS的网站根目录,经过Nginx代理服务把网站展现给用户。参考下图 - Git服务器设置
在.git/hooks文件夹中创建一个钩子文件:post-receive,注意没有后缀.sample,这样每当git仓库接收到内容的时候,就会自动调用这个钩子,把内容同步到网站根目录。需要修改post-receive权限使其可执行,chown git:git -R post-update/chmod +x post-update,需要保证TARGET已经创建,并且该目录以及子目录的权限属于git,这点很重要,否则会报Permission denied
的错误。
debug需要注意的地方,实际问题通过git push origin master返回log查看即可。 Nginx设置
web服务器选择Nginx,Nginx与Apache比较,有如下优点:- Nginx轻量级,占用资源少,负载均衡,高并发处理强,静态内容处理高效。
Apache拥有丰富的模块组件支持,稳定性强,BUG少,动态内容处理强。
常见命令:
1
2
3
4
5
6#安装Nginx
yum install -y nginx
#启动Nginx服务
service nginx start
#测试Nginx配置文件
nginx -t重点说一下Nginx的配置部分
1
2
3
4
5
6#配置之前备份一下
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
#修改默认端口号
vi /etc/nginx/conf.d/default.conf
#修改配置文件
vim /etc/nginx/nginx.conf这样配置好后就可以通过http://vps服务器地址:端口号 来访问站点了。
域名解析
最后一步,也是最难理解的一步,将服务器地址解析到域名。首先得买一个域名,通过一些相关的设定后,以后直接通过访问域名来访问站点了。
概念解读
需要了解一些常识,什么叫DNS?
DNS(域名系统)是一个庞大的服务器网络,包含地球上最大的数字数据库。该数据库由多个互联网机构维护,管理和监管,包括IANA(互联网号码分配机构)和ICANN(互联网名称与数字地址分配机构)。
DNS是互联网的中央数据库,如果没有它,互联网将不会像现在一样存在。
它一般处理的数据包括:- 名字(name):指的是域名
资源(resource):包括A(主机地址,一般就是主机的IP)、NS(域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。)、CNAME(规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转)、MX(邮件记录(Mail eXchange),返回接收电子邮件的服务器地址)、TXT(任意字符串)等等。
基本处理原理见下图,下面会结合具体例子进行解读:
另外处理数据里面包含的NS指的是什么呢?它是名称服务器,是安装有DNS软件的Web服务器,特别是由Web主机管理的服务器,该主机专门用于管理与所有主机提供商的帐户关联的域名。
dnspot设置
使用dnspos进行设定,注册账号就可以,这就是一个dns服务器,在国内,解析的比较快,设定如下:
由于我是用godaddy购买的域名,还要在godaddy里面告诉它我使用了第三方的dns服务器,不使用dodaddy自带的了,因为自带的服务器在国外,解析肯定会慢些。深扒dns
可能你还是不理解什么叫dns,它是怎么工作的?我们使用dig工具来深入解读一下域名nephen.cn是怎么解析出它具体的服务器地址的?
如果你使用的是linux系统,本身就自带了dig命令,如果是windows系统,使用网页版工具diggui就好了。
输入如下:
得出输出结果:
再一一解读一下:
- 计算机查找相应IP地址的第一个位置是其本地DNS缓存,该缓存存储计算机最近检索到的信息,如果没有则进行DNS检索查询。
- dig问8.8.8.8:根区域的名称服务器是什么?
8.8.8.8回复:名称服务器为a.root-servers.net…
dig随机挑选了k.root-servers.net并解析为193.0.14.129,端口号为53 - dig问193.0.14.129:nephen.cn的地址是多少?
193.0.14.129回复:我不知道,你可以问下cn.名称服务器,他们是a.dns.cn. … f.dns.cn.
dig随机选择了e.dns.cn,解析地址为203.119.29.1,端口号为53 - dig问203.119.29.1:nephen.cn的地址是多少?
203.119.29.1回复:我不知道,可以问下nephen.cn名称服务器,他们是f1g1ns1.dnspod.net.,f1g1ns2.dnspod.net.
dig随机选择了f1g1ns1.dnspod.net,解析地址为58.247.212.36,端口号为53 - dig问58.247.212.36:nephen.cn的地址是多少?
58.247.212.36回复:23.106.149.209
如果使用的是nephen.github.io托管网页,那这里会回答为CNAME为nephen.github.io,重新进行递归查找真正的地址 - 递归服务器8.8.8.8从权威名称服务器检索nephen.cn的A记录,并将记录存储在其本地缓存中,缓存TTL时间更新一次。
如果有其他人请求nephen.cn的主机记录,递归服务器将已经有了答案,不需要再次进行查找过程
DNS解析器在查询DNS服务器之前始终检查本地缓存,包括当前DNS解析器缓存内容和从Hosts文件预加载的条目
相关命令:C:> ipconfig /displaydns、C:> ipconfig /flushdns - 递归服务器会将A记录返回给您的计算机。您的计算机将记录存储在其缓存中,从记录中读取IP地址,然后将此信息传递给您的浏览器。
当然windows也有自带的nslookup可以查询,直接就能查出解析后的地址,其中208.67.222.222为手动选择的递归服务器,跟上面例子中的8.8.8.8是一个性质的。
还可以使用一些别的网络工具,随便推荐几个:
以上就是建站的整个过程,夹杂了一些对问题的思考,希望对你有所启发,每一个技术问题背后其实有很多东西需要弄明白的,当我们搞清楚以后心里才会觉得更加踏实,从另一个层面来讲,弄清楚了底层的技术原理,对出现问题也能更加快速的定位,对出现新的技术也能触类旁通。