嘿,Mike。基本上,你只需要运行 ./launcher bootstrap 来构建镜像,将其推送到仓库,然后使用 ./launcher start-cmd 查看需要传递给 Docker 哪些环境变量才能启动服务。
之所以没有这样的指南,是因为那些对底层组件缺乏最基本了解的人如果找到它,会看不懂,然后指望有人教他们 ingress 在他们以为的“唯一系统”上是如何工作的。
嘿,Mike。基本上,你只需要运行 ./launcher bootstrap 来构建镜像,将其推送到仓库,然后使用 ./launcher start-cmd 查看需要传递给 Docker 哪些环境变量才能启动服务。
之所以没有这样的指南,是因为那些对底层组件缺乏最基本了解的人如果找到它,会看不懂,然后指望有人教他们 ingress 在他们以为的“唯一系统”上是如何工作的。
别笑我,但也许你正是活生生的证据,证明“我们之所以这样做是有原因的”?![]()
谢谢 Jay——我大致弄明白了。我终于让它运行起来了。
我想部分问题在于,它与其他所有 Docker 镜像的做法背道而驰。它并不那么“即插即用”,而是需要“调试、连接,然后才能运行”。
正如我所说,启动器在它该做的事情上既出色又可靠。
还有一个非常积极的消息:仅 Web 版本的构建效果极佳,在我的 Swarm 集群上运行飞快,而且由于我拥有构建服务器,因此可以轻松更新。
等我有空时,我会在 Swarm 集群上搭建一个构建服务器,支持基于 Web 的 Docker 镜像构建。
我尝试过的一些方法效果并不理想……
好的,谢谢。
Mike。
我们算是得了个‘先发劣势’![]()
启动脚本是在 Docker Compose、Docker Swarm、Kubernetes 等工具出现之前编写的,而……它至今仍然有效。我们确实没有特别充分的理由去切换到其他方案。这些系统的所谓“优势”,对于 Discourse 自托管的最大用户群体——即在云 VPS 上部署的预算型安装——来说,其实算不上优势。
哦!我一直很好奇。上次我查看时,在 Ubuntu 上安装 docker-compose 还需要额外的步骤。这感觉像是他们不想让人们使用它,除非这些人使用 Windows(或 Mac?)
听到开发团队如此正式地回应,让人感到有些难过。这简直是在说,如果你不够聪明去搞懂这个未文档化的 Discourse 生产环境部署流程,那你或许就不该在生产环境中运行 Discourse。
唉,毕竟不是我们每个人都有丰富的 DevOps 经验。
@Mike_Sutton 我和你感同身受。过去几周我一直在阅读论坛,试图解开这个难题。你成功制作了一个视频来展示你是如何解决这个问题的吗?
这样可行吗?数据库迁移怎么办?
在这种情况下,您可以让 Bootstrap 在构建新容器镜像时执行迁移。
是的,你可以将 Discourse 的 Docker 镜像推送到仓库,并像下面的讨论中那样归档 /var/discourse 的其他部分,但这并不是一个高效的做法,且官方并不支持。我最近对此进行了全面测试:
但在这种情况下,bootstrap 步骤必须在生产机器上完成,这似乎违背了将基础镜像推送到容器镜像仓库的初衷(如果我没理解错的话),因为这样做的本意是避免在生产环境中进行镜像的 bootstrap 操作,最多只是执行数据库迁移之类的步骤。
在我托管的非 Discourse 站点中,我通常使用 Flyway 来执行数据库迁移,同时处理其他一些任务,比如清空 Redis 缓存,但不会运行其他密集型进程,尤其是那些依赖外部服务的进程,例如更新 HTTPS 证书(我通常会通过 cronjob 来完成,除了首次设置,这没问题),或者更改代码库(这部分应该是静态的,包含在镜像中,如软件包、库和其他依赖项)。Discourse 使用 Rake 本身没问题,但它还会执行其他操作,比如安装 gems、生成资源文件、更新 MaxMind 数据库,甚至可能涉及其他服务(如果这些服务不可用,或者它们的 API 发生变更——虽然这种情况很少见,但确实可能发生——这会导致重建步骤失败)。
我并不是说 Discourse 应该采用这种方式,当然。我的期望是:在 CI 环境中生成镜像,然后在 staging/production 服务器上仅执行数据库迁移步骤,并设置好环境变量。使用其他软件(如 WordPress、MediaWiki、Rocket.Chat 等)时,这种做法很容易实现。Discourse 在我看来是最好的论坛软件,他们采用当前方式可能有其合理的原因。但就目前而言,为了减少麻烦,我只会使用标准安装(或多容器安装),并祈祷重建过程不会出问题。
看起来 bootstrap 仍然应该在生产环境中执行,而不是在 CI 环境中生成一个基础镜像,以便在 staging 和生产环境中使用。此外,非标准安装是一个巨大的警示信号,随着软件不断更新,这可能会在未来带来麻烦。
嗨 Mike,
你最终记录了你的流程吗?能看到视频也很棒。
此致,