之前写过关于博客从hexo搬迁到typecho的记录

只不过当时只有一台轻量云,配置感人。后面又买了一台腾讯轻量云,加上一台阿里云 ECS 算是有三台了吧。

虽然数量多了,但是质量不变啊,不过应付一下博客应该没啥问题啦。

加上最近学习了 Docker 才知道,原来 docker 是多么的香

所以就萌生了把博客搬进docker里面,使用traefik进行反代的想法

有了想法就有了第一次的尝试,只不过但是一直卡在ssl这一关卡,导致css无法展示。

就没咕咕了一段时间,知道最近发现解决的方法很简单,就是在配置文件加入一句话

/** 启用https **/
define('__TYPECHO_SECURE__', true);

这样typecho就会请求https链接,测试一下everything is ok

这样docker版本的typecho算是完成了,具体可以参考下面链接

小插曲

在我折腾 Docker 的时候有个小插曲,因为但是我对ingresshost分不清,就不小心把mongodb的端口暴露了出来

然后几天后,就发现了 mongodb 里面的数据没了,取而代之的是一条勒索记录)

mongo

不过好在里面只有一些爬虫数据,被删了也没啥损失的,就当作一个不痛不痒的教训吧。

Traefik 网关

由于有了多台机器,自然而然的就组成了一个swarm,为了便于管理又装上了portainer

所实话我对swarm模式下节点之前的连接有很多困惑,为了能让不通地区的机器组在一起,就用上了zerotier(这里也才有坑)。

关于traefik的介绍

这里说一下我选择的原因,最重要的原因是配置简单(最好能进行图形化配置,不想每次都要去修过 nginx 配置文件,因为修改完文件还需要 reload 配置文件不方便)。此外还要对 docker 友好,能直接用在swamr模式上。

总上traefik是最合适不过了,只不过可能因为我太菜了,看traefik的文档有点云里雾里的(不知是不是文档写的比较差劲)

关于 Traefik 的安装使用就不累述了,官方文档写的足够了。

只不过有一个想法没有实现,我已经有acme.sh申请的泛证书了,我想让 traefik 来使用这个证书,让acme.sh去自动更新,这样就不用每次开一个新的子域名都去重新申请了。

最后只能让traefik去自己申请证书了(也是挺方便的)

此外最新的traefik支持plugin

无需编译,使用 Go 源码

备份

我个人理解的备份是做容灾使用的,大如 Google 也在近期出现过全球服务不可用事故。
所以在多处进行备份还是很重要的。

其实备份还要一个很重要的作用就是,防止自己作死把数据弄没了

作死的原因有很多,比如说手贱,神经错乱,意外...

小提示,尽量开始rm的交互开关,
我曾经一不小心把自己写到一半的代码文件删掉了。

备份有很多种类型,因为我的数据不是很多,就直接全量备份即可。

思路很简单,定时任务,导出 sql,拷贝到其它存储地方。

这里我将阿里oss挂载到了/oss下面,备份的时候只需要拷贝进来即可

这里写了一个简单脚本用来备份 docker 中的数据库

#!/bin/bash

# container id for mysql
cid="$(docker container ls | grep mysql | cut -f1 -d ' ')"
time="$(date +%Y-%m-%d)"

db_user="root"  #用户名
db_pass="123456" #密码
db_name="typecho" #保存文件前缀

backup_dir="/oss/blog-sql-back/" #备份的目录
backup_file="typecho-$time.sql"

logfile="/var/log/mysql_backup.log"

mysqldump="docker exec ${cid} mysqldump"

logtime="date +%Y-%m-%d-%T"

echo -e "$($logtime) --- begin backup database $db_name" >> $logfile

$mysqldump -u$db_user -p$db_pass $db_name > $backup_dir$backup_file

echo -e "$($logtime) --- end backup database $db_name" >> $logfile

然后创建定时任务,每日执行一次即可。

如果不适用oss还可以考虑将数据备份到github, 不过也只是建议文本类型的数据。

反正方法有很多种。

图片

博客或多或少都会用到一些图片的,单纯的文字或许会显得有些单调。

然而服务器的带宽是很贵的,可以比机器贵多了(想一下百度网盘一年要交多少网费)

如果将图片资源放在博客同一个域名下面,客户端加载的时间会变得漫长。(这给本来就紧凑的带宽又增加了许多负担)

于是很自然的就接触到了图床,然而图床也不是靠爱发电的,你去用免费的会有许多的限制。比如说加载速度忙(甚至比你的服务器直接加载还慢),同时加载数量受限(比如说只能一次加载一张图片)反正是各种不爽就对了。

不过好在七牛云有免费的OSS服务(一个月10G足够使用了),只不过免费的只能是HTTP
没办法,这种事情只能用($$)来解决。 不过我随手套了一个cloudflare进行代理,这样图片就可以通过SSL进行访问了,Chrome也就不会提示不安全的信息了。

2021年2月15日
使用Cloudflare代理会导致七牛云CNAME无法正常配置,因此放弃了这个方案
转用,七牛云SSL服务。

只不过由于众所周知的原因,cloudflare的速度十分拖垮,不过好在图片还是可以打开的。就暂时这个样子吧。以后有空进行统一迁移。

END

其实很早就想写了,但是一直拖到现在才来写。好多东西也记不清楚了。

还要一点想说的就是关于docker节点之间的连接,初始化swarm mode后会有一个地址,节点想加入的化需要能和这个地址连得上,如果通过zerotier强行连上,会出现ingress网络无法联通的情况,相当于被隔绝了一样。

此外,这个最初的监听地址似乎不能更改,除非重新初始化swarm mode。

Last modification:August 9th, 2021 at 12:56 am
要饭啦~