之前写过关于博客从hexo
搬迁到typecho
的记录
只不过当时只有一台轻量云,配置感人。后面又买了一台腾讯轻量云,加上一台阿里云 ECS 算是有三台了吧。
虽然数量多了,但是质量不变啊,不过应付一下博客应该没啥问题啦。
加上最近学习了 Docker 才知道,原来 docker 是多么的香
所以就萌生了把博客搬进docker
里面,使用traefik
进行反代的想法
有了想法就有了第一次的尝试,只不过但是一直卡在ssl
这一关卡,导致css
无法展示。
就没咕咕了一段时间,知道最近发现解决的方法很简单,就是在配置文件加入一句话
/** 启用https **/
define('__TYPECHO_SECURE__', true);
这样typecho
就会请求https
链接,测试一下everything is ok
这样docker
版本的typecho
算是完成了,具体可以参考下面链接
- Docker 版本typecho
小插曲
在我折腾 Docker 的时候有个小插曲,因为但是我对ingress
和host
分不清,就不小心把mongodb
的端口暴露了出来
然后几天后,就发现了 mongodb 里面的数据没了,取而代之的是一条勒索记录)
不过好在里面只有一些爬虫数据,被删了也没啥损失的,就当作一个不痛不痒的教训吧。
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也就不会提示不安全的信息了。
只不过由于众所周知的原因,cloudflare
的速度十分拖垮,不过好在图片还是可以打开的。就暂时这个样子吧。以后有空进行统一迁移。
END
其实很早就想写了,但是一直拖到现在才来写。好多东西也记不清楚了。
还要一点想说的就是关于docker节点之间的连接,初始化swarm mode后会有一个地址,节点想加入的化需要能和这个地址连得上,如果通过zerotier
强行连上,会出现ingress
网络无法联通的情况,相当于被隔绝了一样。
此外,这个最初的监听地址似乎不能更改,除非重新初始化swarm mode。