为了更好的阅读体验,欢迎阅读原文。原文链接在此。
Part 1: Using Github Pages and Hexo to manage personal blogs.
Github recommends us to use Jekyll to manage static pages, which is based on Ruby and is difficult for us to install and configure. So we use Hexo instead. Hexo is a static blog framework similar to Jekyll ,which is based on Node.js and easier for use to use.
create a new repo in github, name by username
.github.io: kezunlin.github.io
Setting | Automatic Page Generator, choose a theame and deploy.
sudo apt-get -y install nodejs
sudo apt-get -y install nodejs-legacy
sudo apt-get -y install npm
node -v
npm -v
# download and compile
wget https://nodejs.org/dist/v8.9.3/node-v8.9.3.tar.gz
tar xzvf node-v8.9.3.tar.gz
cd node-v8.9.3
./configure
make -j8
sudo make install
# link to /usr/bin
sudo ln -s /usr/local/bin/node /usr/bin/node
sudo ln -s /usr/local/bin/npm /usr/bin/npm
# check version
node -v
npm -v
cat hello.js
console.log('Hello World');
node hello.js
Hello World
# install hexo globally
sudo npm install hexo-cli -g
#sudo npm install hexo --save
# use cnpm from taobao instead of offical npm, which is slow for chinese users.
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
use cnpm
instead of npm
(optional)
# cnpm install
sudo cnpm install hexo-cli -g
# check version
hexo -v
cd workspace
mkdir blog
cd blog
hexo init
#npm install
hexo generate
hexo server
now we can visit localhost:4000 and create posts.
vim blog/_config.yml
deploy:
type: git
repo: git@github.com:kezunlin/kezunlin.github.io.git
branch: master
generate ssh-key and copy to github
# generate ssh-key
cd ~
ssh-keygen
cat .ssh/id_rsa.pub
# copy content to github
# https://github.com/settings/keys
# install plungin and deploy to github
npm install hexo-deployer-git --save
hexo deploy
now we can visit https://kezunlin.github.io/
add README.md
to source folder
edit blog/_config.yml
to skip render README.md
skip_render:
- README.md
use hexo generate
to copy README.md
from source/ to public/
hexo new 'first post'
vim source/_posts/first-post.md
hexo generate
hexo server
hexo deploy
now we can visit https://kezunlin.github.io/ and see our first post.
Hexo common commands:
hexo new "postName" #new post
hexo new page "pageName" #new page
hexo generate #generate static files to public/
hexo server #start server on localhost:4000
hexo deploy #push .deploy_git/ to GitHub
hexo clean #clean files
Hexo short commands:
hexo n == hexo new
hexo g == hexo generate
hexo s == hexo server
hexo d == hexo deploy
Hexo composite commands:
hexo server -g
hexo deploy -g
---
title: Using Github Pages and Hexo to manage personal blogs
date: 2017-12-26 17:28:10
categories: tutorial
tags:
- github pages
- hexo
- nodejs
- npm
---
<!--more-->
Use static blog framework Hexo to manage site
-----------------------------------------------
cd blog
git clone https://github.com/iissnan/hexo-theme-next themes/next
vim blog/_config.yml
#theme: landscape
theme: next
edit blog\themes\next\_config.yml
avatar: /images/avatar.jpg
install plugin by
npm install <plugin-name> --save
cnpm install --save hexo-admin
now we can visit http://localhost:4000/admin/
npm install hexo-deployer-git --save
hexo deploy
npm install hexo-generator-feed --save
# visit http://localhost:4000/atom.xml
npm install hexo-generator-sitemap --save
vim blog/_config.yml
sitemap:
path: sitemap.xml
now we can visit http://localhost:4000/sitemap.xml
npm install hexo-generator-baidu-sitemap --save
vim blog/_config.yml
baidusitemap:
path: baidusitemap.xml
now we can visit http://localhost:4000/baidusitemap.xml
cnpm install hexo-abbrlink --save
edit blog\_config.yml
permalink: post/:abbrlink/
abbrlink:
alg: crc32 # crc16(default) and crc32
rep: hex # dec(default) and hex
will fill abbrlink
in your post.md
---
title: Hello World
categories:
- tutorial
tags:
- hexo
abbrlink: 4a17b156
date: 2017-12-26 17:20:10
---
npm install hexo-generator-index --save
npm install hexo-generator-archive --save
npm install hexo-generator-category --save
npm install hexo-generator-tag --save
hexo new page "tags"
# generate source/tags/index.md
edit source/tags/index.md
---
title: tags
date: 2017-12-27 15:46:09
type: "tags"
---
now we can visit http://localhost:4000/tags/
hexo new page "categories"
# generate source/categories/index.md
edit source/categories/index.md
---
title: categories
date: 2017-12-27 15:46:03
type: "categories"
---
now we can visit http://localhost:4000/categories/
install search plugin
cnpm install hexo-generator-search --save
cnpm install hexo-generator-searchdb --save
edit themes\next\_config.yml
local_search:
enable: true # create a new 'Search' button next to 'Archives'
# if auto, trigger search by changing input
# if manual, trigger search by pressing enter key or search button
trigger: auto
# show top n results per article, show all results by setting to -1
top_n_per_article: 1
edit `_config.yml`
search:
path: search.xml
field: post
format: html
limit: 10000
#!/bin/bash
cnpm install hexo-deployer-git --save
cnpm install hexo-generator-feed --save
cnpm install hexo-generator-sitemap --save
cnpm install hexo-generator-baidu-sitemap --save
cnpm install hexo-generator-index --save
cnpm install hexo-generator-archive --save
cnpm install hexo-generator-category --save
cnpm install hexo-generator-tag --save
cnpm install hexo-generator-search --save
cnpm install hexo-generator-searchdb --save
![image here](http://images2017.cnblogs.com/.../123.png)
username.github.io
username
vim blog/_config.yml
deploy:
type: git
repo:
github: git@github.com:<username>/<username>.github.io.git,master
coding: git@git.coding.net:<username>/<username>.git,master
get ips by
dig kezunlin.github.io +noall +answer
we get
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
steps:
kezunlin.me
from Godaddy.com
kezunlin.me
to github blog’s blog\source\CNAME
fileCloudFlare.com
and add A
record with github page IP 185.199.109.153
and get dns nameservers dina.ns.cloudflare.com
and paul.ns.cloudflare.com
dina.ns.cloudflare.com
and paul.ns.cloudflare.com
from herewait for some seconds and we get results from CloudFlare
kezunlin.me
Status: Active
This website is active on Cloudflare.
Universal SSL Status Active Certificate
Active
means nameservers take effect.
configure
Crypto | Always use HTTPS
Page Rules| 2 rules for Always use HTTPS
godaddy
: kezunlin.me
kezunlin.me
to dnspod and get dnspod nameservers.https://dcc.godaddy.com/manage/kezunlin.me/dns#divDnsManagement
to add dnspod nameservers.f1g1ns1.dnspod.net
f1g1ns2.dnspod.net
@ CNAME 207.97.227.245 # for github pages
blog/source/CNAME
kezunlin.me
get google-site-verification
from google search console and add to themes/next/layout/_partials/head.swig
<meta name="google-site-verification" content="***" />
get google_analytics
and edit themes\next\_config.yml
google_analytics: UA-***
grep -r Organization .
./themes/next/layout/_macro/post.swig: <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
add logo
for publisher
edit themes\next\_config.yml
and add
logo: /images/logo.png
edit ./themes/next/layout/_macro/post.swig
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="{{ config.title }}">
<img itemprop="logo" src="{{ url_for( theme.logo ) }}" />
#<img itemprop="logo" src="/images/logo.png" />
</span>
get baidu-site-verification
from https://ziyuan.baidu.com/
and add to themes/next/layout/_partials/head.swig
<meta name="baidu-site-verification" content="***" />
get 360-site-verification
from http://zhanzhang.so.com/sitetool/
and add to themes/next/layout/_partials/head.swig
<meta name="360-site-verification" content="***" />
We can use github repo to store blog site’s comments in issues
https://kezunlin.me
client ID
and client secret
gitment
in Github for storing comments in issuesblog\themes\next\_config.yml
gitment:
enable: true
mint: true # RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway
count: true # Show comments count in post meta area
lazy: true # Comments lazy loading with a button
cleanly: false # Hide 'Powered by ...' on footer, and more
language: zh-Hans # Force language, or auto switch by theme
github_user: kezunlin # MUST HAVE, Your Github ID
github_repo: gitment # MUST HAVE, The repo you use to store Gitment comments
client_id: <***> # MUST HAVE, Github client id for the Gitment
client_secret: <***> # EITHER this or proxy_gateway, Github access secret token for the Gitment
proxy_gateway: # Address of api proxy, See: https://github.com/aimingoo/intersect
redirect_protocol: # Protocol of redirect_uri with force_redirect_protocol when mint enabled
Notice
hexo deploy
to deploy blogsInitialize Comment
register jiathis and get uid
jiathis
and baidushare
do not support https
fix to support https
cd blog
git clone https://github.com/hrwhisper/baiduShare.git
mv baiduShare source
#rm -rf baiduShare
# make sure we can access localhost:4000/baiduShare/static/api/js/share.js
# edit baidushare.swig
grep -r 'bdimg.share.baidu.com' .
vim ./themes/next/layout/_partials/share/baidushare.swig
# change //bdimg.share.baidu.com/ to /baiduShare
<script>
with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='/baiduShare/static/api/js/share.js?cdnversion='+~(-new Date()/36e5)];
</script>
# there exists a bug in share.js
hexo generate
hexo server
edit blog\themes\next\_config.yml
busuanzi_count:
# count values only if the other configs are false
enable: true
# custom uv span for the whole site
site_uv: true
site_uv_header: <i class="fa fa-user"></i> 访问人数
site_uv_footer:
# custom pv span for the whole site
site_pv: true
site_pv_header: <i class="fa fa-eye"></i> 总访问量
site_pv_footer:
# custom pv span for one page only
page_pv: true
page_pv_header: <i class="fa fa-eye"></i> 阅读次数
page_pv_footer:
npm install hexo-all-minifier --save
edit blog\_config.yml
all_minifier: true
Tips: not enable minifier currently because not stable.
npm install hexo-neat --save
edit blog\_config.yml
# hexo-neat
neat_enable: true
neat_html:
enable: true
exclude:
neat_css:
enable: true
exclude:
- '*.min.css'
neat_js:
enable: true
mangle: true
output:
compress:
exclude:
- '*.min.js'
edit themes/next/layout/_partials/head.swig
<meta name="referrer" content="no-referrer" />
deploy to coding.net
.
vim themes/next/layout/_partials/footer.swig
<p>Hosted by <a href="https://pages.coding.me" style="font-weight: bold">Coding Pages</a></p>
use hexo-neat
or hexo-all-minifier
.
Tips: no use, it may cause longer time to load page.
NOTICE:
We can not use fourth level `####` for header,
otherwise post page will not display properly.
jquery
jquery: https://cdn.jsdelivr.net/jquery/2.1.3/jquery.min.js
gitmint
download gitmint files to themes\next\source\lib
tree gitmint/
gitmint/
├── dist
│ └── gitmint.browser.js
└── style
└── default.css
2 directories, 2 files
edit ./themes/next/layout/_third-party/comments/gitment.swig
#<link rel="stylesheet" href="/lib/gitmint/style/default.css">
#<script src="/lib/gitmint/dist/gitmint.browser.js"></script>
_config.yml
to skip gitmint file skip_render: # relative to source/ folder
- README.md
- lib/gitmint/dist/*.js
- lib/gitmint/style/*.css
errors:
hexo -v
ERROR Local hexo not found in /home/kezunlin/git/blog
solution:
cd blog
rm node_modules
cnpm install --save