Dreamer2q Blog
见到,不如不见
Dreamer2q

Code is cheap, talk is expensive

64日志

将Typecho搬迁到Docker里

创建于 2020-12-30 共 1708 字,阅读约 7 分钟 更新于 21-02-15 14:01
浏览 43评论 0

之前写过关于博客从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 里面的数据没了,取而代之的是一条勒索记录)


image


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


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。