SuperAPI AI 工具集

meteor-deployment

部署与运维

查看项目

更新于 10-15 12:38

技能介绍

用途

该技能用于在部署 Meteor 3 应用时提供操作指引。适用触发场景包括 meteor build、meteor deploy、Galaxy Push to Deploy、Galaxy Mode、Repository Mode、DEPLOY_HOSTNAME 等。

meteor build 会生成一个自包含的 Node 运行包,可在匹配的 Node.js 版本环境中运行。Galaxy 是官方托管方;Docker / Kubernetes / SSH 到 Node 主机的方式同样可行。

若涉及 Android/iOS 产物和原生 HCP 兼容性,请参考 meteor-native。除兼容性哈希外,还要检查实际原生配置:权限或其他原生配置变更可能需要一个新二进制,即使哈希未变。

Node 版本匹配

需将运行环境的 Node 版本与打包的 Meteor Node 版本匹配:

Meteor Node 主版本
3.0 20
3.1 至 3.4 22
3.5.x 与 3.6-beta.0 24
3.6-beta.1 至 beta.3 26(26.8.2)
3.6-rc.0 26(26.10.0)

在目标应用中运行 meteor node -v 和 meteor npm -v 进行确认。Meteor 3.6-beta.1 至 beta.3 打包 npm 11.19.0,需将部署运行时和原生依赖构建环境与该版本匹配;部署这些 beta 版本前,需针对 Node 26 和生产架构重建并测试原生 npm 模块。Meteor 3.6-rc.0 打包 npm 11.19.1。解压后的 bundle 会在 bundle/.node_version.txt 中记录确切的 Node 版本;当源工具不可用时,可使用该元数据。主机安装程序的前置依赖不会选择打包的运行时。

部署决策流程

  • Galaxy:选择 Git Push to Deploy 或 Meteor CLI。可从 references/galaxy.md 配置 Galaxy 的设置来源、构建钩子、健康检查和域名。
  • Docker / Kubernetes:使用 meteor build --directory ./build --server-only 跳过平台相关的移动端产物。使用 --architecture os.linux.x86_64 进行交叉构建。
  • SSH 到 Node 主机:同样使用 meteor build,将 bundle 通过 scp 传输,在 bundle/programs/server 下安装生产依赖,运行 node main.js。
  • Vercel / Netlify / serverless:不支持。Meteor 需要长驻的 Node 进程和 WebSocket。

对于链接的工作区包,需将 bundle 移到检出目录之外,并在无源码访问的情况下测试用到的 .bin 命令和相邻资源读取。3.6-beta.3 修复了复制的命令链接;在依赖旧工具前需先验证。保留管理器/锁文件,不要修补生成的链接。关于 beta.3 的本地 MongoDB 8 与外部数据库,请参见数据库边界。

必需环境变量

变量 用途
ROOT_URL 绝对外部 URL(如 https://app.example.com)
MONGO_URL mongodb://... 连接字符串
MONGO_OPLOG_URL 可选的 Mongo 副本集 oplog URL
PORT 监听端口,默认 3000
BIND_IP 网络接口,默认 0.0.0.0
METEOR_SETTINGS JSON;填充 Meteor.settings
MAIL_URL 用于 Email.send 和账户邮件的 SMTP

ROOT_URL 是浏览器看到的外部 URL,而非集群内部服务 URL。OAuth 重定向、Meteor.absoluteUrl 和 CSP 都依赖它。

在 Meteor 3.0 至 3.4 上,需配置 MONGO_OPLOG_URL 以使用基于 oplog 的响应式;若没有它,Meteor 会轮询。Meteor 3.5+ 可在不使用该变量的情况下使用核心 change streams,并在需要时回退到 oplog 或轮询。仅托管在 Atlas 并不会为较旧的 Meteor 应用增加核心 change-stream 支持。

settings.json

示例:

{
  "public": { "appName": "My App", "stripePublishableKey": "pk_live_..." },
  "stripeSecretKey": "sk_live_...",
  "oauthSecretKey": "16-byte-base64==",
  "mailgun": { "apiKey": "..." }
}

顶层键:仅服务端。public 子树:会发送到客户端。

加载方式:

# dev
meteor run --settings settings.json

# production
METEOR_SETTINGS=$(cat settings.json) node bundle/main.js

Galaxy

选择一种部署路径:

路径 适用情况 触发方式
Push to Deploy Galaxy 应构建连接的 GitHub 或 Bitbucket 分支 每次推送到所选分支
Meteor CLI 由人员或 CI 流水线控制每次上传 meteor deploy <app-name>

对于 Free 应用,传入简单应用名,而非自定义域名:

meteor login
meteor deploy myapp --free --settings settings.json

DEPLOY_HOSTNAME=eu-west-1.galaxy-deploy.meteor.com \
  meteor deploy myapp --plan essentials --settings settings.json

Galaxy 在 Free 上分配 myapp.sandbox.galaxycloud.app 主机名,在付费方案上分配区域性的 myapp.<region>.galaxycloud.app 主机名。可在仪表盘添加自定义域名。活动的主域名控制 ROOT_URL。

Galaxy 会注入 PORT、ROOT_URL 和 METEOR_SETTINGS。将 MONGO_URL、MAIL_URL 及其他服务端环境值放在 Galaxy 设置 JSON 中的 galaxy.meteor.com.env 下。不要假设 CLI --settings 文件会覆盖 Repository Mode。

关于设置模式、Push to Deploy 构建、零停机发布与回滚、代理、Mongo TLS、内存和自定义基础镜像,请参见 references/galaxy.md。

Docker

关于可用的多阶段 Dockerfile,请参见 references/docker.md。在一个阶段构建 bundle,在更小的阶段安装服务端依赖并运行。--server-only 跳过平台相关的移动应用构建,但不会省略浏览器客户端,也不会创建仅 API 的 bundle。Meteor 仍会构建用于热代码推送的 web.cordova 客户端目标。

热代码推送

autoupdate 提供生产环境热代码推送。它通过 DDP 检测新的客户端版本,尽可能在不重载的情况下应用仅样式表变更,否则执行完整的浏览器重载。要从 .meteor/packages 中移除 autoupdate 以禁用 HCP。

hot-module-replacement 不同。它在开发期间替换被接受的 JavaScript 模块,当模块无法接受更新时回退到 HCP。HMR 在生产环境和不支持的 Web 架构上被禁用。当前公开 API 中没有 Meteor.disableClientResourceFetch 开关。

反模式

  • 将含生产机密的 settings.json 提交到仓库。应使用 CI 机密存储或环境变量;启动时用 METEOR_SETTINGS=$(cat ...) 加载。
  • 将 ROOT_URL 设为内部 Kubernetes 服务 URL。应使用外部 HTTPS URL,否则 OAuth 重定向和 Meteor.absoluteUrl 会出错。
  • 运行与打包的 Meteor Node 不匹配的 Node 版本。始终检查 meteor node -v。
  • 在错误的架构上构建。M 系列 Mac 开发者为 x86_64 Linux 构建时必须传入 --architecture os.linux.x86_64。
  • 提交含凭据的 Galaxy 设置,或期望 Repository Mode 读取 CLI --settings 文件。应将机密保留在 Galaxy Mode 或机密存储中。
  • 硬编码 Galaxy 的端口、负载均衡器 IP 或区域 DNS 目标。应读取 $PORT,并从应用仪表盘复制当前网络值。
  • 将源码树与构建后的 bundle 一起打包进 Docker 镜像。应使用多阶段;运行时镜像只保留 bundle/。

参见

  • references/settings-and-env.md
  • references/galaxy.md
  • references/docker.md
  • references/eval-cases.md