博客已经开了20年了. 期间搬家了无数次, 好在数据没丢. 最早是用国内的所谓Blog service provider, 那个时候网络管理还不是那么严格. 有很多博客大巴, blogcn之类的网站可以让你开个账号就写文章. 但是这些网站都是免费的, 也不知道什么时候就会关门, 我最早用的博客大巴就关门了. 好在博客搬家功能不错, 数据都没丢.

后来我就开始自己搭建博客. 最早的时候是用的是Wordpress, 需要花钱买个域名和虚拟主机. 所谓的虚拟主机, 就是在一台服务器上划分出来的一块空间, 你可以在上面安装自己的wordpress博客. 后来我才知道wordpress简直是维护的噩梦, Bug超多, 经常被攻击. 而且早期的wordpress还不支持Unicode, 所有写到wordpress里面的文章都成了乱码. 而且由于是共享IP, 你不知道什么时候你的网站就被GFW墙了, 不一定是你发的文章有问题, 也可能是你的邻居(同一个虚拟主机上的其它用户)发的文章有问题, 你就跟着一起倒霉了.

后来我就把wordpress的数据库导出来, 写了个程序把文章都导出成纯文本格式. 放到了Pelican里面. Pelican是一个Python写的静态博客生成器, 你可以把文章写成markdown格式, 然后用Pelican生成静态HTML网页. 这样就不用担心wordpress被攻击了. 因为是纯粹静态HTML. 但是Pelican也有一个问题, 就是你需要自己找个地方放静态网页. 好在国外免费放静态网页的服务有的是, 随便找.

最早我把静态网页放在Github上, 但发现Github速度比较慢, 而且还被GFW干扰, 而且GitHub有自己的静态网页生成工具Jeklyll, 也是用markdown写文章, 生成静态网页. 但是Jeklyll的缺点是, 你需要用Ruby写一些模板, 生成静态网页. 我又不会Ruby, 所以就放弃了Jeklyll. 好在国外很多云服务商都会提供免费的虚拟机, 像谷歌的Google Cloud, 可以给你提供一个免费的Linux虚拟机, 2 vCPUs, 1GB RAM. 用来放博客什么的足够了. 你可以把静态网页放在虚拟机上, 速度很快, 而且独立IP, 只要你自己不发反动消息, 一般不会被GFW干扰. 在免费虚拟机上装个Ubuntu和Nginx, 把静态网页放在Nginx的目录里面, 然后就可以了. Github后来还出了个Actions, 你可以把Blog代码放在Github上, 然后用Actions自动运行Pelican生成静态网页, 然后生成出来之后可以自动scp部署到你的虚拟机上. 这样就不用自己手动把静态网页部署到虚拟机器上了. 很方便.

之后我还用过oracle提供的免费虚拟机, 它比谷歌要慷慨. 最多提供4台虚拟机, 而且可以自己选数据中心 (谷歌那个似乎只能在美国). 而且提供ARM的虚拟机, 有12GB内存, 基本运行啥都够了. 我在上面搭建了一个流媒体播放器, 跟Minecraft的服务器, 让儿子和朋友们打游戏, 都毫无问题.

后来我还尝试过用docker和kubernetes, 就是用github actions自动编译docker image, 上传到docker hub上, 然后自动部署到kubernetes上. 但是这个太复杂了, 关键是kubernetes的维护简直是个噩梦. 他一年更新2次版本. 你得跟着不断的升级. 如果有个全托管的k8s服务估计还好点, 如果没有的话, 那就惨了. 我后来就放弃了k8s, 直接用docker部署到虚拟机上.

还有就是HTTPS的问题. 早些年没什么人在意, 但是这几年不用HTTPS你的网站基本就打不开了. 我一直用Lets encyrpt的免费3个月无限续的证书. 用了将近5年了, 没什么大篓子.

后来我发现自己维护虚拟机也是个大问题. 网上的script boys太多了. 不断的攻击你的虚拟机. 我用了fail2ban来屏蔽一些攻击, 看我随便抓的一段日志: 3千多个攻击, 78个IP被ban掉了. 你得不断的升级系统, 升级软件, 不然就会被攻击. 有时候你升级了系统, 但是软件没升级, 也会被攻击. 虽然我很有信心自己的虚拟机不会被攻破, 但是还是很烦的. 你得不断的维护. 而且时不时爆出各种漏洞, 你就得打补丁, 然后虚拟机本身也得经常升级系统. 哪怕是用Ubuntu LTS, 也得2年升级一个. 平时就不断的apt update, apt upgrade, 虽然我用puppet自动化了, 但是还是很烦.

webhost$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 3278
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 78
   |- Total banned: 988
   `- Banned IP list:   103.84.236.242 43.153.184.188 14.225.7.212 173.17.41.253 43.156.106.29 43.136.62.243 185.239.106.91 82.67.7.178 43.136.93.53 91.144.158.231 202.61.105.2 203.106.164.74 128.199.148.185 95.156.96.46 118.89.184.28 183.57.73.125 80.91.223.137 58.186.161.180 51.75.23.93 93.149.14.173 51.158.243.73 185.167.113.175 175.178.41.64 139.59.0.113 43.138.177.42 115.159.34.88 101.32.141.93 34.126.73.205 124.221.115.122 170.106.188.104 101.43.175.46 45.225.195.250 139.59.7.115 222.120.176.4 27.157.128.34 103.147.242.68 45.55.195.28 165.232.173.196 167.172.69.107 1.117.107.83 186.251.224.98 68.183.34.138 141.94.106.15 107.182.19.250 158.160.97.93 43.153.60.169 51.68.121.67 223.240.209.32 43.155.71.148 150.109.255.128 51.79.251.48 181.115.207.244 137.255.9.34 193.35.18.32 101.42.169.64 43.156.31.54 43.156.160.3 43.134.202.163 90.144.94.63 68.183.229.18 138.197.66.68 190.99.219.202 122.3.253.233 43.134.172.211 143.244.162.174 142.93.141.127 200.16.132.42 37.120.222.85 134.209.127.189 82.212.147.26 62.99.74.172 103.115.104.38 124.220.205.18 176.192.89.222 201.217.143.51 43.134.132.76 15.235.202.83 14.51.236.218

后来我就想不用虚拟机了, 直接找个HTML的免费存放空间, 就少了维护的痛苦了. 我最早找到的是Google的FireBase, 它提供静态网页Host, 然后你可以用github action自己运行pelican, 然后把生成的静态网页通过firebase的API上传到谷歌空间. 但是谷歌我一直不太放心, 毕竟在国内被干掉了. 说不定firebase跟着哪天就没了.

后来我就找到了CloudFlare的Pages. CloudFlare是一个CDN服务商, 你可以把你的网站放在CloudFlare上, 他会帮你做CDN, 你的网站会变得很快. 他们最近推出了Pages, 你可以把静态网页放在CloudFlare上, 他们会帮你做CDN. 而且CloudFlare的Pages是免费的, 你可以放无限量的静态网页. 只是单个文件有大小限制 (25MB, 还好). 而且, CloudFlare可以自动连接到你的GitHub上, 设置一个hook, 如果你的代码仓库有更新, 它自动下载代码, 自动编译, 自动部署到CloudFlare. 支持绝大多数的静态网站生成工具, 连自己写GitHub Actions的代码都省了.

其次呢, CloudFlare的Pages还支持自定义域名, 你可以把你的域名绑定到CloudFlare的Pages上. 这样就不用担心CloudFlare的Pages会关门了. 而且国外很多服务都用CloudFlare, 除非GFW把CloudFlare的IP全部墙掉, 或者搞成白名单. 不然CloudFlare的Pages应该是比较安全的.

先这样用着吧, 看看CloudFlare的Pages能不能长久. 如果不行, 我就再搬家吧.