# docs **Repository Path**: xiaolinlu/docs ## Basic Information - **Project Name**: docs - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-04-20 - **Last Updated**: 2024-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pm2-meteor 的介绍。 pm2-meteor 是一个命令行工具,用于将你的 Meteor 应用(可以从你的开发机器或 Git 仓库部署)作为 Node.js 包进行部署,并使用 PM2 来运行它。这个工具已经在 Ubuntu 和 FreeBSD 主机上进行了测试。 **功能特性** 1. 可以从 Git 仓库部署。 2. 可以部署到几乎任何服务器架构(包括 FreeBSD 的 jails)。 3. 使用 PM2 来运行你的 Meteor 应用。 4. 为你读取指定路径下的 Meteor 设置文件。 5. 你可以配置应用部署的目录。 6. 你可以使用一条命令实时扩展你的应用。 7. 通过 pm-meteor.js 文件设置通用的 pm2-meteor 配置,该文件通过 module.exports 导出配置。 **为什么选择 PM2?** PM2 是一个进程管理器,可以运行/重启 Node.js 应用,类似于 forever,但是: - PM2 内置了负载均衡和扩展功能。 - PM2 还可以运行 bash、python、ruby、coffee、php、perl 脚本。 - 我们已经用 PM2 测试过一些复杂的 Meteor 应用,表现良好(而 forever 在没有明显原因的情况下会使它们崩溃)。 - 更多信息可访问 [pm2.keymetrics.io](http://pm2.keymetrics.io/)。 **安装(在你的开发机器上)** 复制代码 | | \$ npm i -g pm2-meteor | |---|------------------------| 你需要在你的主机上安装 Node.js、npm 和 PM2。 pm2-meteor 不会在你的服务器上安装全局工具。 **使用** **1. 初始化一个 pm2-meteor.json 配置文件** 复制代码 | | \$ mkdir ninjaApp_deployment | |---|-------------------------------| | | \$ cd ninjaApp_deployment | | | \$ pm2-meteor init | (pm2-meteor 向导会询问你一些问题并预填充配置文件。) **2. 完善生成的 pm2-meteor.json 文件** **json**复制代码 | | { | |---|----------------------------------------------------------------------------------| | | // 你的应用名称 | | | "appName": "ninjaApp", | | | | | | // 你的应用所在位置 | | | "appLocation": { | | | "local": "\~/Workspace/ninjaApp" | | | | | | // 或者你也可以使用 Git 部署 | | | | | | // (使用 username:password@github.com/... 进行身份验证) | | | | | | // "git": "https://user:password@github.com/andruschka/ninjaApp", | | | | | | // "branch": "production" | | | }, | | | | | | // Meteor 设置文件的位置 | | | "meteorSettingsLocation": "\~/Workspace/ninjaApp/settings/production.json", | | | | | | "meteorSettingsInRepo": false, | | | | | | // 或者相对于应用根目录,如果设置文件位于 Git 仓库中(这样做不太好...) | | | | | | // "meteorSettingsLocation": "settings/production.json", | | | | | | // "meteorSettingsInRepo": true, | | | | | | // Meteor 的构建标志 | | | | | | "meteorBuildFlags": "--architecture os.linux.x86_64", | | | | | | // 在构建 Meteor 应用之前运行的命令 | | | | | | "prebuildScript": "", | | | | | | // 假设你仍然在使用 meteorite 并且想在部署前安装依赖: | | | | | | // "prebuildScript": "mrt install", | | | | | | // 环境变量 | | | | | | // (METEOR_SETTINGS 将从你的 Meteor 设置文件中生成) | | | | | | "env": { | | | "ROOT_URL": "http://ninja.my-host.com", | | | "PORT": 4004, | | | "MONGO_URL": "mongodb://localhost:27017/ninjaApp" | | | }, | | | | | | // 部署信息 | | | | | | "server": { | | | "host": "my-host.com", | | | "username": "nodejs", | | | "password": "trustno1", | | | | | | // 或者使用 pem 文件进行身份验证 | | | | | | // "pem":"\~/.ssh/id_rsa", | | | | | | // 可选 - 设置端口 | | | | | | // "port": "22", | | | | | | // 这个目录将包含你的应用 | | | | | | // (应用将被部署到 /opt/pm2-meteor/ninjaApp) | | | | | | "deploymentDir": "/opt/pm2-meteor", | | | | | | // 可选 - 在服务器上执行任务之前加载配置文件 | | | | | | // "loadProfile": "", | | | | | | // pm2 的执行模式 | | | | | | "exec_mode": "cluster_mode", | | | "instances": 2, | | | | | | // 你也可以设置另一个解释器(例如,使用另一个 node 版本 / nvm - 参见 pm2 文档) | | | | | | "interpreter": "" | | | } | | | } | ### 3. 部署你的应用 **bash**复制代码 | | \$ pm2-meteor deploy | |---|----------------------| 如果你之前已经部署过这个应用,旧的应用 tar 打包文件将被移动到 ./backup 目录中。 ##### 如果你只想重新配置设置或环境变量 **bash**复制代码 | | \$ pm2-meteor reconfig | |---|------------------------| 将会向服务器发送新的 pm2-env 文件并硬重启你的应用。 ##### 如果出现问题:回滚到之前的版本 **bash**复制代码 | | \$ pm2-meteor revert | |---|----------------------| 将会解压旧的 bundle.tar.gz 并重启应用。 ### 4. 控制你的应用 **bash**复制代码 | | \$ pm2-meteor start | |---|-----------------------| | | \$ pm2-meteor stop | | | \$ pm2-meteor status | | | \$ pm2-meteor logs | ### 5. 扩展你的应用 启动两个更多的实例: **bash**复制代码 | | \$ pm2-meteor scale +2 | |---|------------------------| 减少/降级到四个实例: **bash**复制代码 | | \$ pm2-meteor scale 4 | |---|-----------------------| ### 6. 取消部署你的应用(危险操作) 要从 PM2 守护进程删除你的应用并删除所有应用文件,请在 pm2-meteor 设置中添加 "allowUndeploy":true,然后: **bash**复制代码 | | \$ pm2-meteor undeploy | |---|------------------------| ## 如果你想手动部署打包文件 **bash**复制代码 | | \$ pm2-meteor generateBundle | |---|------------------------------| 然后将它传输到你的机器上,解压它,并运行: **bash**复制代码 | | \$ pm2 start pm2-env.json | |---|---------------------------| ## 示例配置 从私有 github 仓库部署并启动两个负载均衡的实例: **json**复制代码 | | { | |---|---------------------------------------------------------------------------| | | "appName": "todos", | | | "appLocation": { | | | "git": "https://andruschka:bestPass123@github.com/andruschka/todos.git", | | | "branch": "master" | | | }, | | | "meteorSettingsLocation": "settings/production.json", | | | "prebuildScript": "mrt install", | | | "meteorBuildFlags": "--architecture os.linux.x86_64", | | | "env": { | | | "PORT": 3000, | | | "MONGO_URL": "mongodb://localhost:27017/todos", | | | "ROOT_URL": "http://todos.my-host.co" | | | }, | | | "server": { | | | "host": "my-host.co", | | | "username": "nodejs", | | | "pem": "\~/.ssh/id_rsa", | | | "deploymentDir": "/home/nodejs/", | | | "exec_mode": "cluster_mode", | | | "instances": 2 | | | } | | | } | **4. 本地应用部署并在 fork 模式下运行** (使用 pm2-meteor.js 文件并通过 bash 环境变量传递 MONGO_URL,例如:MONGO_URL='mongodb://user:pw@host/db' pm2-meteor deploy) **json**复制代码 | | const appName = "todos"; | |---|---------------------------------------------------------------------------| | | | | | const mongoUrl = process.env.MONGO_URL; | | | | | | module.exports = { | | | appName, // \<\~ ES6 简写,等同于 appName: appName | | | | | | "appLocation": { | | | "local": "\~/Workspace/todos" | | | }, | | | | | | "meteorSettingsLocation": "\~/Workspace/todos/settings/production.json", | | | | | | "prebuildScript": "", | | | | | | "meteorBuildFlags": "--architecture os.linux.x86_64", | | | | | | "env": { | | | "PORT": 3000, | | | "MONGO_URL": mongoUrl, // \<\~ 从环境变量获取 | | | "ROOT_URL": "http://todos.my-host.co" | | | }, | | | | | | "server": { | | | "host": "my-host.co", | | | "username": "nodejs", | | | "pem": "\~/.ssh/id_rsa", | | | "deploymentDir": "/home/nodejs/", | | | "exec_mode": "fork_mode", | | | "instances": 1 | | | } | | | }; | **5. 本地应用部署并在 fork 模式下运行多个实例(用于手动管理负载均衡)** **json**复制代码 | | { | |---|---------------------------------------------------------------------------| | | "appName": "todos", | | | | | | "appLocation": { | | | "local": "\~/Workspace/todos" | | | }, | | | | | | "meteorSettingsLocation": "\~/Workspace/todos/settings/production.json", | | | | | | "prebuildScript": "", | | | | | | "meteorBuildFlags": "--architecture os.linux.x86_64", | | | | | | "env": { | | | "PORT": 3000, // 第一个 fork_mode 实例将使用这个端口... | | | "MONGO_URL": "mongodb://localhost:27017/todos", | | | "ROOT_URL": "http://todos.my-host.co" | | | }, | | | | | | "server": { | | | "host": "my-host.co", | | | "username": "nodejs", | | | "pem": "\~/.ssh/id_rsa", | | | "deploymentDir": "/home/nodejs/", | | | "exec_mode": "fork_mode", | | | "instances": 3, | | | "freePorts": [3002, 3003] // ...后续的 fork_mode 实例将使用这些端口 | | | } | | | } | 在这段配置中,我们定义了一个用于部署的本地应用位置,并指定了服务器设置,包括 SSH 登录的详情、部署目录、执行模式(fork_mode,即进程分叉模式)以及要运行的实例数量。我们还指定了环境变量,包括 MongoDB 的连接 URL 和应用的根 URL。在 fork_mode 下,每个实例将作为一个独立的进程运行,这里我们还指定了除了默认端口 3000 以外的其他可用端口,以便为额外的实例提供端口。