文章主题: Galaxy 文档

默认基础镜像

概述



了解 Galaxy 默认基础镜像。

说明



大多数 Galaxy 用户使用默认基础镜像运行他们的应用程序。(要完全控制应用程序可用的系统库及其精确的运行时环境,您可以创建自定义基础镜像。)

基础镜像是一个Docker镜像。默认基础镜像存储在 Docker Hub 上的存储库`meteor/galaxy-app`中,并且本身基于存储库`meteor/ubuntu`。这些包的源代码可以在`galaxy-images` GitHub 存储库中找到。

基础镜像更新



2021年8月4日


从2021年8月4日开始,Galaxy 基础 Docker 镜像将在所有新部署中默认升级。

它包括删除依赖项以缩小尺寸并加快部署和扩展速度。

如果您无法更新您的应用程序,请查看下一节了解如何操作,但我们建议您尽快计划进行更新!

重大更改


如果您在代码中未使用以下库,则无需担心这些重大更改。

以下库已从默认基础镜像中删除

libcairo2-dev imagemagick xfonts-base xfonts-75dpi graphicsmagick libjpeg-dev poppler-utils wkhtmltox

如果您依赖于这些库,则有两个选项

通过使用以下内容更改 settings.json 文件,使用之前的固定基础镜像 (20210423T151822Z_93d0399)

"galaxy.meteor.com": {
        "baseImage": {
            "repository": "meteor/galaxy-app",
            "tag": "20210423T151822Z_93d0399"
        }
    }


创建一个包含所需依赖项的新自定义镜像。有关更多信息,请阅读此处的文档。

迁移步骤


我们建议您首先在 Galaxy 上的预发布环境中使用新基础镜像测试您的应用程序!只需更改您的 settings.json 以包含 baseImage (20210727T191118Z_088ba36)

"galaxy.meteor.com": {
        "baseImage": {
            "repository": "meteor/galaxy-app",
            "tag": "20210727T191118Z_088ba36"
        }
    }


2021年4月30日 - Ubuntu 升级


从2021年4月30日开始,Galaxy 基础 Docker 镜像将在所有新部署中默认升级。

它包括对 `Ubuntu 20.04 Focal` 的重大更新,其中包含大量安全补丁以及稳定性和性能方面的改进。

如果您无法更新您的应用程序,请查看下一节了解如何操作,但我们建议您尽快计划进行更新!

重大更改


如果您在代码中未使用以下库,则无需担心这些重大更改。

- wkhtmltox 已升级到 v0.12.6-1
- PhantomJSpoppler 均已从基础镜像中删除。如果您依赖于这些库,则有两个选项

通过使用以下内容更改 settings.json 文件,使用之前的固定基础镜像 (20180509T213223Z_b6ad5bc)

"galaxy.meteor.com": {
            "baseImage": {
                "repository": "meteor/galaxy-app",
                "tag": "20180509T213223Z_b6ad5bc"
            }
        }


请注意,您将选择退出新的更新!

创建一个包含所需依赖项的新自定义镜像。有关更多信息,请阅读此处的文档。

迁移步骤


- 我们建议您首先在 Galaxy 上的预发布环境中使用新基础镜像测试您的应用程序!只需更改您的 settings.json 以包含 baseImage (20210423T151822Z_93d0399)

"galaxy.meteor.com": {
        "baseImage": {
            "repository": "meteor/galaxy-app",
            "tag": "20210423T151822Z_93d0399"
        }
    }


部署后,您将使用与我们从2021年4月30日开始将作为默认值使用的相同的镜像。

- 不要使用 Galaxy 编辑设置 UI 更改您的 baseImage 属性,它不会有任何效果。它需要进行新的完整部署才能强制创建新镜像。

- 如果您没有部署应用程序的新版本,您将继续使用之前的基础镜像。

- 在预发布环境中测试后,您有两个选项可以将此更改应用于您的生产环境
保留您应用程序中的此设置,您就可以开始了,此基础镜像将始终使用。
从2021年4月30日开始,您可以删除 settings 中的这部分内容,因为此基础镜像将成为默认值。

已安装的软件包



当前的 Galaxy 默认基础镜像运行 Ubuntu 20.04 LTS,并预装了一组软件包。请注意,理论上软件包版本没有固定,可能会随时更新。但是,在实践中,我们知道许多用户可能会隐式依赖于默认基础镜像中(越来越过时的)软件包版本。截至目前,我们计划继续我们隐式的策略,即永远不会升级默认基础镜像上的 Ubuntu 软件包。希望使用这些软件包更新版本的用户应改为创建自定义基础镜像

构建过程中有用的软件包
- build-essential
- curl
- wget
- rsync
- git
- xz-utils
- ca-certificates
- libssl-dev

此外,默认基础镜像包含几个预安装在名称类似于 /node-v12.22.0-linux-x64 的目录中的流行 Node 版本。(包含这些版本可以使容器构建和启动过程更有效率。)Galaxy 使用 nodejs.org 上的 Node 官方二进制发行版,而不是 Ubuntu 软件包。

构建时行为



当您运行 meteor deploy 时,您的本地 meteor 命令行工具会构建您的应用程序,将其捆绑到一个tarball中,并将其上传到 Galaxy。然后,Galaxy 通过在镜像内部运行 /app/setup.sh 脚本,基于默认基础镜像构建应用程序的 Docker 镜像。本节详细介绍了默认基础镜像的 /app/setup.sh 脚本执行的操作。

首先,它将上传的 tarball 解压缩到 /app 目录中。tarball 的内容都嵌套在一个名为 bundle 的目录下,因此这会将您构建的应用程序放入 /app/bundle 目录中。

接下来,它确定您的应用程序使用哪个版本的 Node 构建。如果该版本尚不属于镜像的一部分,则会下载并安装它。在任何情况下,它都会设置 $PATH 环境变量,以确保在构建过程的其余部分中使用正确的 Node 版本。

接下来,它确定您的应用程序使用哪个版本的 npm 构建并安装该版本的 npm。

接下来,它在 /app/bundle/programs/server 内部运行 npm install --unsafe-perm。在构建您的应用程序时,meteor 工具会在 tarball 中包含大多数 npm 软件包的内容,但如果这些软件包包含二进制代码,则可能需要为 64 位 Linux 服务器环境重新构建它们,这就是此命令的作用。

最后,如果脚本 /app/bundle/programs/server/setup.sh/app/bundle/setup.sh 存在,则会执行它们。(当前版本的 Meteor 不易于将这些文件包含在您的捆绑包中。)

运行所有这些命令后,Galaxy 镜像构建器会将镜像的状态保存到内部 Docker 注册表中。

运行时行为



当 Galaxy 运行基于默认基础镜像的应用程序镜像时,它会执行一个名为 /app/run.sh 的脚本。

此脚本将正确的 Node 版本添加到 $PATH 中,就像在构建时一样。它还在 $NODE_VERSION 中提供 Node 版本。

如果脚本 /app/bundle/run.sh 存在,则使用 bash 执行此脚本。(当前版本的 Meteor 不易于将此文件包含在您的捆绑包中。)

否则,脚本在 /app/bundle 目录中运行 node $GALAXY_NODE_OPTIONS main.js。如果您需要对 Node 如何运行服务器进行细粒度控制(例如设置垃圾回收标志),则可以在settings.json 文件中$GALAXY_NODE_OPTIONS 设置为标志或以空格分隔的标志序列。

更新于:2024/05/07

这篇文章对您有帮助吗?

Share your feedback

Cancel

谢谢!