发现一个基于 Node.js的高效的静态站点生成框架Hexo,使用 Markdown 编写文章,于是用来搭建自己的网站。
接下来介绍如何一步一步完成搭建的。
目录
准备
需要在电脑中安装以下:
node 安装后 自带 npm 包管理器。安装方式请参考官网。
git 用于创建hexo项目、更换主题、管理创建的hexo项目源码以及部署到github.io使用。安装方式请参考官网。
用于创建、管理、发布hexo项目。使用npm包管理器安装:
1 2 3
| npm install -g hexo-cli
|
构建
安装完 node 、git 以及hexo-cli 后,就可以开始构建hexo blog了。
创建
在源码目录下,命令行运行
就可以创建名为 youbsitename 的站点目录了。此过程会clone一些项目到本地站点目录,过程如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| INFO Cloning hexo-starter to D:\Temp\test Cloning into 'D:\Temp\test'... remote: Counting objects: 53, done. remote: Total 53 (delta 0), reused 0 (delta 0), pack-reused 53 Unpacking objects: 100% (53/53), done. Submodule 'themes/landscape' (https://github.com/hexojs/hexo-theme-landscape.git) registered for path 'themes/landscape' Cloning into 'D:/Temp/test/themes/landscape'... remote: Counting objects: 764, done. remote: Compressing objects: 100% (3/3), done. remote: Total 764 (delta 0), reused 0 (delta 0), pack-reused 761 Receiving objects: 100% (764/764), 2.53 MiB | 53.00 KiB/s, done. Resolving deltas: 100% (390/390), done. Submodule path 'themes/landscape': checked out 'decdc2d9956776cbe95420ae94bac87e22468d38' INFO Install dependencies npm WARN deprecated swig@1.4.2: This package is no longer maintained npm WARN deprecated minimatch@0.3.0: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN prefer global marked@0.3.6 should be installed with -g > dtrace-provider@0.8.0 install D:\Temp\test\node_modules\dtrace-provider > node scripts/install.js > hexo-util@0.6.0 postinstall D:\Temp\test\node_modules\hexo-util > npm run build:highlight > hexo-util@0.6.0 build:highlight D:\Temp\test\node_modules\hexo-util > node scripts/build_highlight_alias.js > highlight_alias.json
|
然后,进入blog目录,就可以对blog进行操作了。
blog 目录结构如下
1 2 3 4 5 6 7 8 9
| yousitename ├─package.json 项目package ├─_config.yml 站点配置文件 ├─public 发布文件夹 ├─scaffolds 模版文件夹 ├─source 原始文件,通过"hexo g"将本目录下的文件生成为html等到public文件夹 ├─themes 主题文件夹 ├─... └─...
|
配置
根目录下的站点配置文件 _config.yml 中的内容是对项目的一些配置,例如
主题
修改站点配置文件 _config.yml 中的内容:
1
| theme: next(你想要的主题,主题需要放在站点目录下的themes目录下)
|
官网有提供主题列表可以选择,当然你也可以做自己的主题
另外,主题也有自己的主题配置文件 _config.yml,存放主题自己的一些配置。主题配置文件位置在主题目录下。
插件
同样,hexo提供了插件功能,可以提供很多生成、发布和运行等的功能。
例如可以生成静态网站后,通过插件hexo-deployer-git将生成的内容发布到git.
利用这个插件搭配github.io,可以实现自动生成&部署自己的网站。
写作
1
| hexo new [layout] <title>
|
Hexo 有三种默认布局:post、page 和 draft,它们分别对应不同的路径,而您自定义的其他布局和 post 相同,都将储存到 source/_posts 文件夹。
如果不想文章被布局处理,可以将 Front-Matter 中的layout: 设为 false 。
布局 |
路径 |
post |
source/_posts |
page |
source |
draft |
source/_drafts |
更多的写作可以参考官网.
建议创建页面 : tags 和categories 页面,生成的时候可以自动生成分类和标签页面的内容。
1 2
| hexo new page tags hexo new page categories
|
生成
或者
默认将静态网站生成到 public 目录下,生成完成后就可以将 public 目录下的内容发布到静态网站服务器上。
运行
可以使用 hexo server 命令,本地启动服务器,运行网站
默认启动端口为 4000 的服务端,可以使用 http://localhost:4000 访问。
部署
代码托管
将创建的网站仓库托管到github,注册等过程不表。
配置自己的网站仓库,然后就可以git commit & git push ,将源码推送到github上。这样就可以随时编辑自己的网站了。
不必要的内容不需要提交,可以使用 .gitignore, 贴一下自己的 .gitignore 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| # Logs logs *.log npm-debug.log*
# Runtime data pids *.pid *.seed
# Directory for instrumented libs generated by jscoverage/JSCover lib-cov
# Coverage directory used by tools like istanbul coverage
# nyc test coverage .nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) .grunt
# node-waf configuration .lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html) build/Release
# Dependency directories node_modules jspm_packages
# Optional npm cache directory .npm
# Optional REPL history .node_repl_history
.DS_Store Thumbs.db db.json *.log public/ .deploy*/
|
自动部署云服务器
在云服务器(ubuntu 16.04)上安装 nodejs 、git 、hexo-cli
然后clone 到仓库本地:
1 2
| cd ~ git clone https://github.com/dp9u0/HexoBlog
|
创建周期执行的呼叫脚本:
1
| vi CallHexoBlogAutoUpdate.sh
|
CallHexoBlogAutoUpdate.sh脚本中,添加以下内容,呼叫仓库中的自动更新脚本:
1 2
| #!/bin/bash . ~/HexoBlog/AutoUpdate.sh
|
为什么要有两个脚本: CallHexoBlogAutoUpdate.sh 和 AutoUpdate.sh?
不知道怎么给 AutoUpdate.sh 添加权限 ,不同的操作系统clone后,权限依旧保留。
同时 . ~/HexoBlog/AutoUpdate.sh 如果直接配置在 crontab 环境变量好像有点问题。
因此将所以自动更新的逻辑放在 AutoUpdate.sh 并且在每个需要执行自动更新的机器上添加外壳程序 CallHexoBlogAutoUpdate.sh 用点符号执行脚本 AutoUpdate.sh。
并且外壳程序添加到定时任务中。
调用的自动更新脚本(该脚本加入到git仓库中,可以自更新):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/bin/bash LOG_FILE=~/HexoBlogAutoUpdate.log echo "========================================" >> $LOG_FILE echo $(date +%y_%m_%d_%H_%I_%T) >> $LOG_FILE echo "----------------------------------------" >> $LOG_FILE if [ $1 ] ; then echo "first argument is not empty : $1" >> $LOG_FILE TAR_DIR=$1 echo "use first argument as target dir : $TAR_DIR" >> $LOG_FILE else echo "first argument is empty" >> $LOG_FILE # use ~/HexoBlog as the default dir TAR_DIR=~/HexoBlog # 修改为你需要的默认路径 echo "use default dir as target dir : $TAR_DIR" >> $LOG_FILE fi echo "----------------------------------------" >> $LOG_FILE if [ -d $TAR_DIR ] ; then echo "$TAR_DIR is a dir,try update" >> $LOG_FILE cd $TAR_DIR echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE git pull >> $LOG_FILE # 同步git echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE killall hexo >> $LOG_FILE # 关闭 hexo server echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE hexo clean >> $LOG_FILE # 清理 echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE hexo g >> $LOG_FILE # 生成 echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE hexo server & # 启动 hexo server echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE hexo d >> $LOG_FILE # 自动 echo "++++++++++++++++++++++++++++++++++++++++" >> $LOG_FILE else echo "$TAR_DIR is not a dir,do nothing" >> $LOG_FILE fi echo "----------------------------------------" >> $LOG_FILE echo $(date +%y_%m_%d_%H_%I_%T) >> $LOG_FILE echo "========================================" >> $LOG_FILE
|
添加 CallHexoBlogAutoUpdate 脚本执行权限:
1
| chmod +x CallHexoBlogAutoUpdate.sh
|
添加定时任务
添加如下内容
1 2
| */5 * * * * ~/CallHexoBlogAutoUpdate.sh # 五分钟执行检查一次更新
|
github.io
hexo deploy 命令根据站点配置文件_config.yml中的配置,将生成的内容发布到站点中。
其中不同的type需要特殊的插件支持。
例如发布到git上,需要插件hexo-deployer-git
首先创建自己的github.io仓库
关于github.io:如果建立了 用户名.github.io 的仓库,github会定时将这个仓库的静态页面发布到 用户名.github.io 的站点上.
可以了解更多关于 github.io的内容
站点配置文件配置参考如下:
1 2 3 4
| deploy: type: git repo: git@github.com:dp9u0/dp9u0.github.io.git branch: master
|
部署到git,需要有你的github仓库的push权限,可以参考github文档中关于生成 SSH Key
以及添加SSH Key的部分,配置通过SSH免密码push代码到github。
然后,就可以运行生成部署命令了。
这些也可以添加到AutoUpdate.sh脚本中,这样我只需要在自己的个人电脑上hexo new ,编辑自己的网站,然后git commit 提交,再执行git push到推送到 将源码推送到github上。这样就可以随时编辑自己的网站了。
部署在云服务器上的网站 和github.io 上的内容,都会自动更新了!