【发布时间】:2023-10-01 00:28:01
【问题描述】:
一些上下文:
- 我有一个用于部署到多个应用程序/域的存储库(nuxt 应用程序)
- 所有应用都在同一台服务器上
- 每个应用程序都位于一个单独的文件夹中,其中包含一个 repo 的克隆,每个文件夹都在其自己的域 (nginx) 上提供服务
- 每个应用都有不同的 env 文件,最重要的区别是域 id(例如:
DOMAIN_ID=1等) - 在构建之前,我有一个节点脚本,它基于此
DOMAIN_ID进行一些设置工作
我想用 PM2 来:
- 为我的所有域使用带有 repo 的单个目录
- 在运行 pm2 deploy production 时,我希望能够部署所有域,每个域都应该在构建之前运行它的设置脚本
- 每个域都应构建在一个子文件夹中,以便我可以配置 nginx 以从其文件夹中为特定域提供应用程序
我尝试像这样创建一个生态系统文件:
module.exports = {
apps: [
{
name: 'Demo1',
exec_mode: 'cluster',
instances: 'max',
script: './node_modules/nuxt/bin/nuxt.js',
args: 'start',
env: {
DOMAIN_ID: 1,
},
},
{
name: 'Demo2',
exec_mode: 'cluster',
instances: 'max',
script: './node_modules/nuxt/bin/nuxt.js',
args: 'start',
env: {
DOMAIN_ID: 2,
},
},
],
deploy: {
production: {
host: 'localhost',
user: 'root',
ref: 'origin/master',
repo: 'my_repo',
path: 'path_to_repo',
'post-setup': 'npm install && node setup.js',
'post-deploy': 'npm run build:setup && pm2 startOrRestart ecosystem.config.js --env production',
},
},
}
但它似乎不起作用。
使用上述生态系统文件创建了进程,但是当我访问 Demo1 的域时,pm2 从 Demo1 或 Demo2 进程中随机提供服务。
某处应该有 2 个 dist 文件夹,每个应用一个。
我想知道上面的配置是否很好,我只是遇到了一个 nginx 问题,或者 pm2 无法真正处理我的用例。
【问题讨论】:
-
这些应用是静态应用还是 SSR?
-
嗨尼克。这些应用是 SSR。
-
嘿 Catalin,我已经准备了一个答案,但我不确定它是否能解决您的问题,因为您还没有真正说明它是什么不起作用。您能否更详细地更新您的问题?你的目标很明确,但你只是说“但它似乎不起作用”。
-
谢谢尼克。我试图在问题中加入更多相关信息。对不起,但我不知道 nginx(其他人正在研究这部分)。不确定我想要实现的目标是否可以用 pm2 完成。
-
我发布了一个答案,它应该可以帮助您指出正确的方向。如果您需要帮助将事情弯曲到您的确切用例,只需发表评论,我会看看是否可以提供帮助。其他人可能会在我无法提供帮助的地方提供帮助。