Github+Hexo快速搭建个人博客

Hexo是一个快速、简洁且高效的博客框架,默认使用MarkDown解析文章,用选定的主题渲染出静态页面。使用JavaScript进行逻辑控制,没有后端,直接通过Url访问页面即可。通过github仓库来存储Hexo需要的文件(包括资源文件Html页面),即可搭建公网博客。


准备工作

安装Hexo很简单,不过要先装上Node.jsGit

  • Node.js
  • Git
  • Hexo

安装Node.js

Hexo基于JavaScript,因此首先要安装Node.js,版本不能低于10.13。Hexo建议使用最新版本,Node.js建议使用v12.22版本,版本过高会导致一些插件无法适配。

Hexo 版本最低兼容 Node.js 版本
6.0+12.13.0
5.0+10.13.0
4.1 - 4.28.10
4.08.6

​ 安装好后,将Node换成国内源,非必须,不过npm下载会很慢。这里使用淘宝的镜像源:

  • 临时换源
npm --registry https://registry.npm.taobao.org install express
  • 永久换源
npm config set registry https://registry.npm.taobao.org
  • 查看源
npm config get registry

安装Git

  • Windows:下载并安装 git.
  • Mac:使用 Homebrew, MacPorts 或者下载 安装程序
  • Linux (Ubuntu, Debian):sudo apt-get install git-core
  • Linux (Fedora, Red Hat, CentOS):sudo yum install git-core

Mac用户

如果在编译时可能会遇到问题,请先到 App Store 安装 Xcode,安装完成后,启动并进入 Preferences -> Download -> Command Line Tools -> Install 安装命令行工具。

Windows用户

对于中国大陆地区用户,可以前往 淘宝 Git for Windows 镜像 下载 git 安装包。

安装Hexo

安装完Node.js和Git之后,即可安装Hexo,建议全局安装

npm install -g hexo-cli

查看Hexo版本

hexo -v

本地操作

在部署前,需要在本地对Hexo进行一些操作,包括目录的初始化、静态页面的生成和预览等。

Hexo初始化

hexo init Blog

输入上述命令,会在当前目录下生成一个Blog目录(名字可以自己取)。目录中结构大致为:

.
├── _config.yml
├── package.json
├── scaffolds
├── source
|   ├── _drafts
|   └── _posts
└── themes

其中,_config.yml为博客的根配置文件,配置信息参照:https://hexo.io/zh-cn/docs/configuration source目录下存放博客的md文件以及博客需要的资源文件。theme目录下存放下载的资源文件,可在根_config.yml中指定选用的主题。

进入该文件夹,安装必备的node组件

npm install

会有WARN,不过没有影响。

静态网页生成与预览

hexo generate

上述命令将根据Blog文件夹中的资源和配置生成静态网页,命令可可简写为hexo g

INFO  Start processing
INFO  Files loaded in 356 ms
INFO  Generated: index.html
INFO  Generated: archives/index.html
INFO  Generated: fancybox/fancybox_loading@2x.gif
INFO  Generated: fancybox/jquery.fancybox.css
INFO  Generated: fancybox/fancybox_loading.gif
INFO  Generated: fancybox/blank.gif
INFO  Generated: fancybox/helpers/fancybox_buttons.png
INFO  Generated: js/script.js
INFO  Generated: fancybox/fancybox_overlay.png
INFO  Generated: fancybox/fancybox_sprite.png
INFO  Generated: fancybox/fancybox_sprite@2x.png
INFO  Generated: archives/2019/06/index.html
INFO  Generated: fancybox/helpers/jquery.fancybox-buttons.js
INFO  Generated: fancybox/jquery.fancybox.pack.js
INFO  Generated: fancybox/helpers/jquery.fancybox-buttons.css
INFO  Generated: fancybox/helpers/jquery.fancybox-thumbs.css
INFO  Generated: css/style.css
INFO  Generated: fancybox/helpers/jquery.fancybox-thumbs.js
INFO  Generated: archives/2019/index.html
INFO  Generated: fancybox/helpers/jquery.fancybox-media.js
INFO  Generated: css/fonts/fontawesome-webfont.eot
INFO  Generated: css/fonts/fontawesome-webfont.woff
INFO  Generated: css/fonts/fontawesome-webfont.svg
INFO  Generated: css/fonts/FontAwesome.otf
INFO  Generated: css/fonts/fontawesome-webfont.ttf
INFO  Generated: 2019/06/08/hello-world/index.html
INFO  Generated: fancybox/jquery.fancybox.js
INFO  Generated: css/images/banner.jpg
INFO  28 files generated in 715 ms

由于现在还没有进行Git部署,所以只能在本地预览:

hexo server

也可以简写为hexo s,该命令将开启本地服务。

INFO  Validating config
INFO  Start processing
INFO  Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.

Hexo默认4000端口,因此打开 http://localhost:4000 就可以看到博客啦。


Github部署

我们需要一个远程仓库来存储Hexo需要的文件并托管博客,Github就很适合。

创建仓库

点击New repository创建一个新的仓库,给仓库取名

  • Rep name一定要严格按照 Account Name.github.io的形式来命名,只有这样的仓库名称才能在公网上以静态页面的形式展示。
  • 访问权限设为Public

生成SSH Keys

SSH Key(Secure Shell)是一个公私钥对,这里用于Git仓库和本地机器的绑定。使用SSH Key,就可以不用每次更新都需要输入令牌,方便很多。

  • 一个 SSH key 可以访问你的所有仓库,即使你有 1000000 个仓库,都没问题
  • 如果换了电脑,就在新电脑上重新生成一个 SSH key,把这个 key 也上传到 GitHub,它可以和之前的 key 共存在 GitHub 上
  • 如果你把 key 从电脑上删除了,重新生成一个 key 即可,替换之前的 key

SSH Key是针对机器而非特定目录的,所以在任意一个目录下打开Git Bash,输入ssh检查机器是否装有SSH。

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

接着,在本地生成SHH公私钥对,输入命令

ssh-keygen -t rsa -C "github的注册邮箱"

键入四个回车就行,用默认选项。完成后,该命令会在用户文件夹下生成一个.ssh目录,路径为:C:\Users\用户名\.ssh。目录下有两个文件,分别为:

  • id_rsa:SSH私钥
  • id_rsa.pub:SSH公钥

生成完毕后,将SSH公钥注册进Github中。在Settings->SSH and GPG keys->New SSh key中新建一个SSH公钥:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ce2r8eF1-1642260793942)(Hexo-github部署/fa156de2f4d32046.png)]

Titile可以随便取,但是Key一定要要原封不动的复制id_rsa.pub中的内容,空格和换行都不能动。注册成功后,SSH Keys中就可以看到该公钥:

最后,验证本地与仓库是否绑定成功,输入命令:

ssh -T git@github.com

会得到下面这句话:

Hi sakura-ysy! You've successfully authenticated, but GitHub does not provide shell access.

but后面的这里不用关注。

本地推送

在根_config.yml中进行部署配置,将deploy中的内容全部改为:

deploy:
  type: git
  repository: https://github.com/sakura-ysy/sakura-ysy.github.io.git
  branch: main

type是固定的,rep指仓库地址,branch可以自己选要用哪个分支部署。注意,github的主分支由原来的master变为了main。

然后,在博客根目录下打开Git Bash,安装Git部署工具:

npm install hexo-deployer-git --save

完后就可以在本地生成页面并推送。

在生成新的页面之前,先用 hexo clean 清除缓存文件与之前生成的静态文件目录public。清除完毕后,使用hexo g生成静态页面。

最后,即可开始推送并部署,使用命令hexo d ,全称为:

hexo deploy

在第一次推送时,要进行身份验证从2021.08.13开始, GitHub不再支持账号和密码的方式进行身份验证了,取而代之的是官方推出的Personal access tokens

在Github中的 Seqttings->Developer settings->Personal access tokens->Personal access tokens 生成一个新的令牌:

权限可以全部选上,没关系。完成后,即生成了一串序列号,它就是我们用于代替密码的令牌:

在第一次hexo d需要验证身份时,输入上述令牌即可。

上面工作全部完成后,即可通过公网访问博客,网址就是仓库名:http://sakura-ysy.github.io


图片插入

MarkDown中存储的是图片本地文件路径,要想在公网展示,必须将图片存储在云端并在md中使用该路径,有两个较好用的方法:

  • 图片存在Git仓库
  • 使用图床

图片存在Git仓库

首先安装插件hexo-renderer-marked:

npm install hexo-renderer-marked

安装完成后,在根_config.yml中新增如下配置 :

post_asset_folder: true
marked:
  prependRoot: true
  postAsset: true

这样以来,当我们使用 hexo new post '文章名' 时,在source/_post目录下除了生成对应的md文件,还会生成一个同名的目录。将所有图片存在该目录下,并使用相对路径引用该目录中的图片即可。

但是,上述插件只会生成一个空目录,并不会自动将图片放进去,所有操作需要手动执行,非常麻烦,那怎么让它自动执行?这里就要用到强大的Typora

打开Typora的偏好设置,使图片在插入时会复制到指定路径,由于目标目录名和文章名相同,因此复制到./${filename}处即可。

image.png

使用该配置后,插入到Typora中的图片,会直接复制该到文章资源文件夹,同时在md中自动更改路径。如复制网络路径的图片https://...../image.jpg粘贴到Typora中叫文章名的文章后,图片会自动变为![](文章名/image.jpg)

但是在部署后的路径和本地路径是不一样的,它会直接在文章的资源文件夹中找,因此路径中的文章名/ 需要删掉,即更改为[]image.jpg),这样虽然在本地md中路径错误,但是部署后即正确。

为了方便,可以在Typora编写完博客后,使用Ctrl+F全局搜索文章名/,然后将其替换成空串即可。

使用图床

将图片存在Git上有两个缺点,一是本地寻址不出来,二是图片加载很慢,为了解决这两个问题,可以使用图床来存储图片。

所谓图床,就是公网上的存储空间,将本地文件上传上去后会返回该图片在网络上的URL,使用该URL作为图片路径即可。

如果有已备案域名的话,推荐使用七牛云,因为它是国内服务商,速度快且稳定,不用担心被封,用户也有免费的10G空间可用。

如果没有的话,直接使用现成的公共图床也可,不同的图床速度和空间都不一样,根据需求选用,可以参考:https://zhuanlan.zhihu.com/p/58863378

比如使用sm.ms图床,上传后返回图片的网络地址和不同的引用格式,在md文件中引用就行。

image.png

建议使用具有CDN加速的图床,这样会很快。

不过公共图床毕竟是公共的,免不了被封的风险,且自己也没法管理上传的内容。所以如果想折腾的话,建议用自己的服务器搭图床。


绑定域名

.github.io这个域名后缀着实不好看,并且前面必须用git账户名,所以给它绑个域名最好。首先得租一个域名,可以直接去阿里万网那租。租完后,就需要将新域名和原域名进行绑定,这个操作在服务商端和Git端都要进行,可以理解为一种双向同意。

服务商端

以阿里万网为例,点击解析进入解析设置。

MAIJUE8AS_SJ2G1A_M90MZC.png

将记录类型设为CNAME,意为用该域名指向另一个域名。记录值填原域名,即sakura-ysy.github.io。其他值默认就行。

image.png

当然,记录类型也可以选择A,即直接让域名执行Git的IPv4,可以通过ping sakura-ysy.github.io 来获得该IP。

至于主机记录,其实就是域名前缀,常见用法有:

  • **www:**解析后的域名为www.aliyun.com。

  • **@:**直接解析主域名 aliyun.com。

  • ***:**泛解析,匹配其他所有域名 *.aliyun.com。

  • **mail:**将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。

  • **二级域名:**如:abc.aliyun.com,填写abc。

  • **手机网站:**如:m.aliyun.com,填写m。

  • **显性URL:**不支持泛解析(泛解析:将所有子域名解析到同一地址)

Git端

只需要在Git仓库中添加一个无后缀文件CNAME,内容只有一行,为绑定的域名,即yesiyuan.cn。当然,也可以直接在Settings->Pages中的Custom domain中绑定该域名。

image.png

两端都完成配置后,就可使用新域名来访问博客啦。

使用HTTPS

这个我还没弄

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值