搭建个人博客的方案选择

摘要:综合考虑了几种博客平台方案,最终确定了适合自己的个人博客平台

前言

作为一个程序员,养成写技术博客的习惯是很不错的。个人认为一个好的博客系统应该具备下列特性:

  • 支持 Markdown 语法
  • 服务稳定,访问速度不能太慢
  • 支持分类、搜索
  • 页面简洁,无广告,以内容为主

如果还能有下面的特性就更好了:

  • 支持代码块语法高亮
  • 代码块复制方便
  • 支持评论、回复

几种可选方案

在线博客/笔记/文档平台

如CSDN、语雀、有道云笔记等。这些平台是最简单省事的,注册个账号就能直接使用,而且可以随时随地在线写作、发布。但是他们的缺点也比较明显:

CSDN中间的文章主体部分太窄,两侧的元素太多,而且有时顶部有很大块的广告,而且有的文章需要关注后才能看全文。

语雀则是页面加载比较慢,已经到了没法忍受的程度。

有道云笔记没有尝试,不做评价。

最关键的一点,在这些平台写好的文章都是保存到平台内的,没办法直接将Markdown源文件保存到自己的位置。这样就导致切换平台的成本比较高。

考虑之后还是决定自己搭建博客平台。

自己搭建博客平台

自己搭建的平台优点:

  • 数据都掌握在自己手里,可随意使用、更改
  • 简洁无广告

缺点:

  • 需要自己动手折腾,搭建过程可能会遇到各种问题
  • 可能需要买服务器、带宽、域名等基础设施,需要花钱
  • 稳定性差。访问量少还可以,如果访问量很大,或是被黑客攻击,可能导致无法正常提供服务。

自己搭建的又可分为有后台和无后台的。

有后台的一般是把文章数据存到数据库中,通过web页面编辑文章、发布,对服务器性能有一定的要求。

无后台的一般是在本地编辑 Markdown 文件,再将 Markdown 文件生成静态 html 文件,再去部署静态网站即可。

我选择的是无后台的工具:Hexo

部署

由于最后生成的是纯静态页面,所以部署就有很多种可能性了,比如:

  • GitHub Pages服务(国内访问慢)
  • Gitee Pages服务(比较不错的方案,需要实名认证,正在尝试)
  • 七牛云、又拍云等对象存储服务(七牛云https花钱,又拍云免费但是有流量额度限制,而且站点文件更新不方便)
  • 购买云服务器进行部署(很好,灵活性足够,带宽可能不够)

最终我的部署方案是源Markdown文件提交到 GitHub ,利用 Github Actions 功能编写一个自动部署脚本。当master分支有内容提交时,触发脚本:

  1. 编译成html文件
  2. 将编译后的文件提交到gh-pages分支
  3. 再将gh-pages分支提交到 Gitee
  4. 触发一个webhook,通知我的服务器,从 Gitee 上拉取最新gh-pages分支内容

(如果不用自己的服务器,只是通过Gitee Pages提供服务,那么第4步可以不要。)

这样写完文章后,只需将源文件提交就可以自动部署更新了。

.github/workflows/deploy-pages.yml

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
name: Deploy to Github Pages and Gitee Pages
on:
push:
branches:
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Branch Master
uses: actions/checkout@master
- name: Use Node.js 18.x
uses: actions/setup-node@v2
with:
node-version: '18'
- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
- name: Deploy to Github Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
mirroring-gitee:
needs: build-and-deploy
runs-on: ubuntu-latest
steps:
- name: Checkout Branch gh-pages
uses: actions/checkout@v3
with:
ref: 'gh-pages'
fetch-depth: 0
- name: Push to Gitee
run: |
mkdir ~/.ssh
ssh-keyscan -H gitee.com >> ~/.ssh/known_hosts
echo "${{ secrets.GITEE_SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa_gitee
chmod 600 ~/.ssh/id_rsa_gitee
echo "Host gitee.com
HostName gitee.com
User git
IdentityFile ~/.ssh/id_rsa_gitee
IdentitiesOnly yes" >> ~/.ssh/config
git config --global user.name "Github Actions"
git config --global user.email "noreply@github.com"
git checkout --orphan e3a3bcbf11db4c5e9199e81e21e3d7cf
git add -A
git commit -m "deploy"
git branch -d gh-pages
git branch -m gh-pages
git remote add gitee git@gitee.com:dq07/blog.git
git push --force gitee gh-pages
- name: Post Webhook
run: |
curl https://blog.dqv5.com/deploy?token=e9e8038a09464231bd637fd6824d3d14

写作

部署的问题解决了,下面考虑写作的问题。由于没有在线编辑的功能,所有的文章都需要手动在本地编辑,编辑好之后提交到Github。

这样做的缺点就是:每到一个新的电脑上,就得重新clone代码仓库,npm install安装环境,还要打开Markdown编辑器进行编辑。能不能像CSDN等平台,随时随地在线编辑呢?

我找到了这个工具:code-server。这是一个在线的 VS Code 编辑器,再自己的服务器上部署好程序,就能在浏览器里写代码了。

我又添加了一个二级域名,用于在线编辑时随时预览博客效果,这样就可实现随时写作啦。

图床

图床使用的是又拍云的对象存储服务,使用的是另一个单独的域名。