博客就是记录最近的工作,所以就把这个博客的搭建过程以及校外访问bt小工具的日志作为个人博客的第一篇。
博客搭建过程
调研
我在知乎上翻阅了大部分关于博客工具的回答,基本了解个人博客一般采用脚本语言搭建Web(比如Django等)和静态网页工具两种。由于不想增加额外的运维成本,基本定位到静态网页工具上。由于不想在前端模板方面投入太多精力,所以基本去找有比较稳定的主题的工具。参考准备自己建一个个人博客,有什么好的框架推荐? - 知乎和一些其他的文章,基本把调研内容锁定在jekyll和hexo两种工具上。
Jekyll是基于Ruby脚本实现的博客生成工具,是经常与Github Pages配合使用的工具。目前比较常用的主题是huxpro,我之前的同事王喆的博客也是基于这个主题构建的。但是,经过试验发现,主题代码已经更新较多,相关文档却没有对应更新,一些设置找不到对应文档只能去查看源码,所以测试了Hexo之后选取了Hexo。但是,毕竟Jekyll是Github配套工具,相关的主题也比较完整,所以想要自己折腾的可以多尝试尝试。
Hexo是基于Node.js脚本实现的博客生成类工具,如果你之前做过有关node的工作,相对接触Hexo也比较简单。Hexo比较流行的主题是Next,功能没有那么丰富,所以配置相对简单而且全面,文档十分详细,运维成本低。而且Hexo的官网还有对应的youtube视频可以看,懒得看的可以对着视频做也不会出错。
详细教程可以在Hexo官网查看,以下给出简单步骤。
步骤
安装Node.js,windows的可以下载,其余同学可以用Node Version Manager安装1
2
3
4# 安装nvm
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
# 安装Node.js
$ nvm install stable
安装git可以参考 git
准备工作
如果想要查看详细的说明可以查看 next
安装Hexo1
$ npm install -g hexo-cli
博客初始化1
2
3$ hexo init <folder>
$ cd <folder>
$ npm install
下载主题1
2$ cd <folder>
$ git clone https://github.com/iissnan/hexo-theme-next themes/next
启用主题,编辑_config.yml
,找到theme字段,改为next
1 | theme: next |
验证主题 hexo s –debug
,显示以下内容,访问http://localhost:4000
如果发现未生效,清除Hexo静态文件hexo clean
再执行,以后的步骤任意改动类似。
1 | INFO Hexo is running at http://0.0.0.0:4000/. Press Ctrl+C to stop. |
配置
选择设计效果Scheme,修改themes\next_config.yml
,我采用的主题版本实现了四种效果,选取了Gemini。1
2
3
4
5# Schemes
#scheme: Muse
#scheme: Mist
#scheme: Pisces
scheme: Gemini
设置中文_config.yml
1 | language: zh-Hans |
1 | menu: |
设置头像themes\next_config.yml
,可以选取互联网地址或者本地地址1
avatar: http://www.wuzequn.com/images/touxiang.png
设置代码高亮themes\next_config.yml
,next使用的是Tomorrow Theme,可以在链接中查看高亮效果。1
2
3
4
5# Code Highlight theme
# Available value:
# normal | night | night eighties | night blue | night bright
# https://github.com/chriskempson/tomorrow-theme
highlight_theme: night
设置侧边栏社交链接themes\next_config.yml
,图标的设置和菜单类似。1
2
3
4
5
6
7
8
9
10
11# Social Links.
# Usage: `Key: permalink || icon`
# Key is the link label showing to end users.
# Value before `||` delimeter is the target permalink.
# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, globe icon will be loaded.
social:
#GitHub: https://github.com/yourname || github
邮件: mailto:wuzqbupt@gmail.com || envelope
知乎: https://www.zhihu.com/people/wu-ze-qun || globe
微博: https://weibo.com/u/1922768971 || weibo
领英: https://www.linkedin.com/in/zequn-wu-038a5b133/ || linkedin
网页访问量统计themes\next_config.yml
,代码是基于不蒜子统计实现的。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# Show PV/UV of the website/page with busuanzi.
# Get more information on http://ibruce.info/2015/04/04/busuanzi/
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-file-o"></i>
page_pv_footer:
本地搜索
安装
hexo-generator-searchdb
,在站点的根目录下执行以下命令:1
$ npm install hexo-generator-searchdb --save
配置
_config.yml
,增加以下内容:1
2
3
4
5search:
path: search.xml
field: post
format: html
limit: 10000配置
themes\next_config.yml
,启用本地搜索功能1
2
3
4
5search:
path: search.xml
field: post
format: html
limit: 10000
其他类似于昵称和站点描述等信息可以在_config.yml
里修改。
内容编辑
Hexo的内容都可以用Markdown,具体的格式可以参考教程
about页面
首先生成about页面,首先在站点的根目录下执行以下命令:1
$ hexo new page About
然后会在source
目录下生成一个About文件夹,然后编辑source/About/index.md
介绍你自己。
tags页面
首先生成about页面,首先在站点的根目录下执行以下命令:1
$ hexo new page tags
然后会在source
目录下生成一个tags文件夹,然后编辑source/tags/index.md
,修改为:1
2
3
4
5
6---
title: tags
date: 20xx-xx-xx xx:xx:xx
type: "tags"
comments: false
---
categories页面
首先生成categories页面,首先在站点的根目录下执行以下命令:1
$ hexo new page categories
然后会在source
目录下生成一个categories文件夹,然后编辑source/categories/index.md
,修改为:1
2
3
4
5
6---
title: categories
date: 20xx-xx-xx xx:xx:xx
type: "categories"
comments: false
---
内容操作
hexo有三种内容类型,分别文page
,post
,draft
。可以用以下内容新建:1
$ hexo new [page|post|code] <file-name>
page
就是基础页面,你可以在http;//127.0.0.1/
后添加页面名称访问到对应文件夹下内容。
post
新建到source
目录下,名称就是文件名称。
如果不想发布未编辑完成的草稿,可以新建draft
,待编辑完成,发布草稿。1
$ hexo publish <draft-name>
发布网站
Hexo是用脚本将Markdown文件生成静态html页面的工具,用一下命令生成一个public
静态文件夹。1
$ hexo generate
同时,Hexo也提供了一个服务器用于显示内容。ye也可以加-p
选项配置http端口,默认为40001
$ hexo server
如果发现你的修改没有生效,可以执行以下命令清楚数据文件和public
文件夹,之后再重新生成。1
$ hexo clean
另外,hexo也提供了将静态文件夹部署的功能,我使用了码市作为git仓库网站,具体配置git方法可以参考,本地需要配置_config.yml
并安装hexo-deployer-git,更多部署方式可以参考1
2
3
4
5
6# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: https://<git-address>
branch: <branch-name>
执行以下命令,就可以将public
中的静态文件上传到git仓库。1
$ hexo deploy
如果你采用Github.io作为展示方案,参考教程,执行完部署步骤,就可以将静态文件部署到Github.io上。
其他修改操作
- hexo插入本地图片资源
- 插入公式:在博客的添加
mathjax: true
- 常用的Markdown数学公式
- Markdown插入Jupyter Notebook
vps
vps购买
由于之后还需要搭建科学上网小工具和ipv6工具,所以在选取vps运营商的时候看重有ipv6出口,所以根据同学建议选择了搬瓦工OpenVZ的云主机。
之后又调研了vps运营商,发现还有AplhaRacks的7美元方案,对于不注重运行速度的童鞋可以采用这个方案。
同时推荐直呼过瘾,查询性价比比较高的方案,但是要注意如果要搭建ipv6小工具,需要注意vps中有ipv6通道。
博客配置
环境:CentOS 7 64 bit
博客采用的是Nginx作为Web服务器,安装Nginx:1
2$ sudo yum install epel-release
$ sudo yum install nginx
从git拉取代码并授权1
2
3$ git clone https://<your-repo-address>
$ cd <git-dir>
$ sudo chmod -R 777 .
配置Nginx,将Nginx访问的根目录配置为本地仓库的根目录。修改/etc/nginx/nginx.conf
中的内容。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# root /usr/share/nginx/html;
root <your-repo-local-path>;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
index index.html;
autoindex on;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
https配置
CentOS可以参考DigitalOcean的解决方案。
但是,配置了HTTPS
之后,如果不购买CA证书,Chrome就会在网站显示Not Secure
。如果觉得不需要购买,可以取消HTTPS
。
1 | # 失效SSL |
此时,访问就会恢复HTTP
。如果发现未生效,清除Chrome缓存数据。
2018-09-24 更新
可以使用免费CA证书,我使用的是Let’s Encrypt,步骤如下:
1 | # 准备工作 python环境 |
上文DigitalOcean的解决方案中提到的nginx配置文件的秘钥路径:1
2
3#打开linux配置文件,找到HTTPS 443端口配置的server
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;
修改http配置,将http转成https服务:1
2
3
4
5server {
listen 80;
server_name 域名;
return 301 https://域名$request_uri;
}
此时,CA证书90天会过期,过期所以需要续签:1
./letsencrypt-auto renew --force-renewal
最后你可以通过以下网址检测https服务1
https://www.ssllabs.com/ssltest/analyze.html?d=域名
域名注册
域名注册商很多,国内需要实名注册,要求的内容较多且周期比较长。国外的注册商通常自己提供DNS服务器,对速度有一定的影响。
如果不是米商,个人博客通常还是选取性价比高的注册商。域名的购买需要注意两个要点:
- 注册价格,可以使用比价网站。
- 注意续租价格,一般
.com
的网站每年价格相同。
注册成功后将云主机ip绑定,绑定DNS可以参考百度经验。
校外访问bt ipv6小工具
服务器端
上网工具其实就是将本地无法访问的请求发送给可以访问的服务器,服务器取回数据后再转发给客户端。如上文,服务器采用的是搬瓦工的VPS,所以首先要在控制面板上开启ipv6地址。以root安装ss服务。1
2
3wget --no-check-certificate -O shadowsocks-go.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go.sh
chmod +x shadowsocks-go.sh
./shadowsocks-go.sh 2>&1 | tee shadowsocks-go.log
安装中会选择转发的端口和密码。
安装完成后,会提示:1
2
3
4
5
6
7
8Congratulations, Shadowsocks-go server install completed!
Your Server IP :your_server_ip
Your Server Port :your_server_port
Your Password :your_password
Your Encryption Method:your_encryption_method
Welcome to visit:https://teddysun.com/392.html
Enjoy it!
如果安装成功,ss服务会开机自动启动。
如果想卸载,可以执行:1
./shadowsocks-go.sh uninstall
如果想要为多用户并行服务,可配置多转发端口,编辑/etc/shadowsocks/config.json
:1
2
3
4
5
6
7
8
9
10
11
12{
"server":"0.0.0.0",
"port_password":{
"8989":"password0",
"9001":"password1",
"9002":"password2",
"9003":"password3",
"9004":"password4"
},
"method":"aes-256-cfb",
"timeout":600
}
配置成功之后重启服务1
2
3
4/etc/init.d/shadowsocks start
/etc/init.d/shadowsocks stop
/etc/init.d/shadowsocks restart
/etc/init.d/shadowsocks status
2019-04-28更新
另外,因为OVZ更新了,所以如果你使用的是KVM架构,也可以参考搬瓦工这篇文章用渠道技术搞定IPV6
客户端
下载客户端,然后根据服务器的配置,编辑端口和密码。同时,shadowsocks客户端可以设置PAC规则,节省转发流量,也可以在PAC文件中增加转发网址。设置好后可以访问ipv6和科学上网,可以北邮人bt测试。
设置utorrent
- 打开设置 -> 连接
- 代理服务选择socks5,代理127.0.0.1,端口1080,勾选通过代理服务器解析主机名和 对于点对点连接使用代理服务器
- 如果设置的系统代理方式为
PAC代理
,需要在PAC文件中加入.byr,cn
。
其余工具安装
因为关于环境的安装都属于服务器运维相关的工作,所以将链接放到下面,以备以后使用
docker-ce
因为使用的是搬瓦工,如果直接使用yum的docker版本会出现engine安装问题,所以使用搬瓦工官方的处理方法
ngrok内网穿透工具
当服务处于内网过程中,客户端无法直接访问接口,这时候需要使用NAT转换代理,除了使用Nginx做代理,还可以使用Ngrok