@pfaffman 如果你查看我所做的更改,你会发现我并没有修改 discourse_docker 中 Web 模板的指令,只是将其分成了三个文件。实际上,我唯一的要求就是这一点:其中一个文件运行与环境无关的指令,例如安装 Ruby gems、Discourse 及插件仓库等;另一个文件执行一些验证;第三个文件则处理特定于环境的任务,例如数据库迁移和预编译资源。
我认为这带来的复杂性在于:当这些文件中有新增内容时,Discourse 团队需要判断该内容是否与环境相关(例如是否依赖数据库中的内容),并据此决定应将其包含在哪个文件中。
官方安装方式将保持与现在相同,只是会在 app.yml 文件中包含这三个模板(或者,如果可行的话,让 templates/web.template.yml 文件包含这三个模板,在这种情况下,从用户角度来看,不会有任何变化),而不是分多个步骤进行(虽然这样无法获得两步安装的优势,但会完全按照当前的方式运行,因此不会引入任何破坏性变更)。
我知道系统管理相关工作可能非常复杂,但我已尽量以最直接的方式实现,并参考当前的做法,以避免增加过多复杂性(这也是我没有提及 Kubernetes、在 docker-compose 文件中分离服务或类似方案的原因,因为这些需要较大的改动;相反,我基于官方安装的方式进行设计)。