浅谈我对discourse的理解
discourse实在是太复杂了,人家那么多年的心血让我一个菜鸡两三天看完也不现实,总之在研究discourse的时候我发现了一些很有意思的设计:
首先谈谈的discourse底层,它官方推荐且唯一推荐的运行方式是跑在一个docker上,瞠目结舌了多多少少属于是,但只要你被草习惯了,你就会发现discourse这套东西还蛮有意思的,它实际上是这样的;
论坛核心数据实际上是在/var/discourse/shared这个路径,对,核心数据是完全暴露在docker外,实际存储在服务器上的,docker只是做了一个软link让docker里面可以访问外部的资源,这么做的好处是你至少觉得放外面出事了抢救的概率比里面高一点。。。整个docker炸了也没啥关系(
底层是数据,那么上一层就是docker的image了。
discourse有一个launcher的bash,经常你在containers/app.yml改动了啥就需要rebuild,所谓rebuild,实际上就是执行一次重新生成镜像,rebuild时我看它里面大概做了这么几件事:
- 把discourse对应的版本(默认为main,即最不稳定的版本)从github上pull下来
- 把你自己自定义的plugin也从对应的github上pull下来
- 压缩(brolti)js/css
- 把数据库开起来
总之image就是新的一个运行环境了。
最上面则是containers,也就是docker的参数传递,这时候它会把你app.yml规定好的参数穿进去docker,比如volume路径,SMTP服务器参数之类的。。。(这个真的太阴间了,SMTP服务器每次变好像都要rebuild一次,不能很方便地在管理页面更改)
总结一下就是,最底下是放在外面的数据(sql/用户上传文件什么的),中间是运行环境(Nginx,Ruby,SQL服务器之类的),最上层是参数(SMTP服务器)
理解了它们怎么运作,才能更好地维护和魔改discourse。