我知道这并不容易。但容器的目的是实现一致且可移植的状态。因此,如果容器按预期使用,并且对你有效,那么对于所有使用该容器的人而言,它有效的可能性也相当高。
如果将引导过程(bootstrap)直接移入容器内部,而不是在主机上运行,你已经在实现可移植性方面取得了很大进展。等完成其他项目后,我可以查看一下。我也不是容器专家,但我构建过几个。不过,缺点是缺乏安装文档,对吧?目前只是“给你,运行这个脚本”。我可以尝试复现脚本的功能,但这几乎没有留下提出改进建议的空间。
因此,如果社区(尤其是那些深度参与并了解安装应如何运作的人员)愿意提供建议或帮助,我乐意发起这项倡议。否则,质量将无法达到预期。
基本目标大致如下:
- 一个 Dockerfile,实现设置的原子化构建(容器外部无本地引导过程)
- 无需以 root 身份运行容器,最佳方案是使用 fakeroot 并添加 capabilities(这些是命令行参数,用户仍可选择以 root 身份启动容器……)
- 创建一个可由环境变量影响的入口点脚本,这些变量必须清晰文档化
- 使用
podman-generate-systemd或类似工具创建 systemd 单元,以(重新)启动容器或在启动时自动运行容器(Podman 功能,Docker 可能有类似功能,但更侧重于集成化)
这适用于基本安装。对于可扩展方案,则需要 docker-compose 和 Kubernetes 解决方案。坦白说,我认为寻找“一刀切”的解决方案并非 Discourse 社区的责任。因为这些方案可以根据具体需求进行精细定制,尤其是在 Kubernetes 上。因此,我认为一个基础的 Compose 方案足以帮助人们快速上手。
这将提供一个可移植且更安全的解决方案,从而整体提高采用率和质量。在此期间,我会看看 Discourse 是否真的符合我社区的需求。如果需要,我目前将使用 Ubuntu LTS 系统。等我有更多时间后,我会投入精力构建这样的环境。