ann_eav
(Ana)
2021 年2 月 8 日 11:55
1
大家好,
我又来请教一个奇怪的问题了:sparkles
我仍在研究如何为我的内部社区安装 Discourse。之前我曾询问过如何搭配外部 Redis 和外部 PostgreSQL 安装 Discourse,以及如何在 Kubernetes 集群中管理一切。相关细节请见此处 。
现在我有了新的疑问:有人告诉我,我还得自行构建容器镜像以配合 Helm 进行部署。因此,我将无法按照官方文档,利用云安装指南中提供的脚本来完成安装。
我尝试使用 bootstrap 命令构建自己的镜像,但无法自行启动该 Docker 镜像,因为它会查找 Ruby 模板并报错。
是否可以在不使用所提供脚本的情况下启动容器镜像?我觉得自己需要一些帮助,因为我尝试查看了 Bash 脚本,但似乎对我来说过于复杂了。我希望能有其他人遇到过类似情况,或许能给我一些建议。
再次感谢大家的一切帮助:revolving_hearts
ann_eav
(Ana)
2021 年2 月 8 日 12:26
2
为了提供更多背景信息和细节:
我使用了启动脚本配合 bootstrap 命令,根据我的配置创建了自定义镜像。
随后,文档指出需要运行启动脚本并配合 run 命令,从该镜像创建容器。
检查脚本代码后,我发现其中涉及的 Docker 指令如下:
$docker_path run --shm-size=512m $links $attach_on_run $restart_policy "${env[@]}" "${labels[@]}" -h "$hostname" \
-e DOCKER_HOST_IP="$docker_ip" --name $config -t "${ports[@]}" $volumes $mac_address $user_args \
$run_image $boot_command
但我无法将所有变量转换为一条可以独立运行的命令。也许我一开始尝试的路径就是错误的,但我希望在提问前先自行测试,看看能否在不打扰他人的情况下解决这个问题。
当我尝试自行运行 Docker 镜像时,容器退出了。查看日志,我看到以下内容:
Already up to date.
INFO -- : Loading --stdin
/pups/lib/pups/config.rb:23:in `initialize': undefined method `[]' for nil:NilClass (NoMethodError)
from /pups/lib/pups/cli.rb:27:in `new'
from /pups/lib/pups/cli.rb:27:in `run'
from /pups/bin/pups:8:in `<main>'
Falco
(Falco)
2021 年2 月 8 日 13:21
3
尝试运行 ./launcher start-cmd app
3 个赞
ann_eav
(Ana)
2021 年2 月 9 日 09:12
4
感谢,这非常有帮助
这个命令在文档里有吗?如果是的话,抱歉问了,我没看到。
非常感谢你一直帮助我
2 个赞
neounix
(Dark Matter)
2021 年2 月 9 日 10:10
5
Discourse 依赖于在共享卷中运行的 PostgreSQL;此外,许多其他重要文件(如图片、上传的文件、备份、日志等)也位于该共享卷中。
如果你按照 Discourse 配置标准维护 /shared 卷的文件系统完整性,那么你可以轻松地启动和停止 Discourse Docker 镜像及容器应用;然而(据我所知),如果没有 Discourse 脚本,你是无法构建该应用的(除非你对脚本进行完整的逆向工程,并基于这些完美运行且受支持的脚本编写自己的脚本)。因为这些脚本负责在 Ruby on Rails(一种服务器端技术)之上构建复杂的 EmberJS SPA(客户端技术),更不用说管理核心应用及所有插件的配置了。说实话,这是一个相当复杂的应用。
ann_eav:
是否可以在不使用提供的脚本的情况下启动容器镜像?
可以,如果你已经构建了一个完全符合 Discourse 配置标准(包括数据库、图片、上传文件、备份、日志文件等的持久化存储要求)的 Discourse Docker 镜像,那么你可以不使用任何脚本直接启动 Discourse 容器,或基于该镜像创建 Discourse 容器。共享卷中包含许多 Discourse 运行所必需的重要文件;因此,你不能仅仅“拿一个普通的 Discourse Docker 镜像”就直接运行,而不具备上述所有必要前提条件(而且上述内容并未涵盖全部要求!)
希望这能帮到你。
ann_eav
(Ana)
2021 年2 月 9 日 10:24
6
谢谢你的回复,这非常有帮助 我昨天阅读了关于为什么需要这些脚本的相关 主题 以及其他几个讨论。
再次感谢你的深入解释,所有这些资料都帮助我理解了如何建立自己的工作流程,以符合所需的规范
1 个赞
neounix
(Dark Matter)
2021 年2 月 9 日 10:34
7
不客气。
对于既不是 Ruby on Rails 开发者,又不是 EmberJS 开发者的人来说,这可能会非常令人困惑。
基本上,您正在构建一个容器化的生产级 Ruby on Rails 应用(服务端技术),它是世界级 EmberJS 单页应用(主用户应用)的基础;在此基础上,您还能获得一套完整的开源配置管理系统,用于管理所有源代码,该系统由一群才华横溢、经验丰富的网络专业人士维护,他们长期在此环境中进行开发。此外,您还可以在 Discourse 商业生态系统内获得专业的托管服务和定制开发。
这难道不酷吗?
2 个赞
刚偶然看到这个。你的意思是,我无法将应用程序和数据库部署在物理上完全独立、不共享任何资源的服务器上吗?
如果确实如此,那对我来说将是一个无法逾越的障碍……
Falco
(Falco)
2021 年3 月 15 日 15:47
9
不,情况并非如此。使用独立的外部数据库运行 Discourse 是一种受支持且有文档说明 的使用场景。
4 个赞