strongloop slc 部署环境变量并发症
strongloop slc deploy env var complications
我一直在通过自定义 init.d/app.conf 脚本部署环回应用程序,使用 slc run --detach --cluster "cpu"
,但我想按照建议转为使用 strong-pm。
但我遇到了一些限制,正在寻找有关如何复制我目前熟悉的设置的任何指导。
目前我在 server/config.local.js
和 server/datasources.local.js
中设置了特定于应用程序的配置,最重要的是应用程序应该侦听连接的端口。这完美地使用 slc run
进行本地开发和远程部署进行暂存,我所做的就是为每个不同的应用程序设置不同的环境变量:
datasources.local.js:
module.exports = {
"mysqlDS": {
name: "mysqlDS",
connector: "mysql",
host: process.env.PROTEUS_MYSQL_HOST,
port: process.env.PROTEUS_MYSQL_PORT,
database: process.env.PROTEUS_MYSQL_DB,
username: process.env.PROTEUS_MYSQL_USER,
password: process.env.PROTEUS_MYSQL_PW
}
}
config.local.js:
module.exports = {
port: process.env.PROTEUS_API_PORT
}
当我使用 strong-pm 部署时,我无法控制这个端口,它总是被设置为 3000+N,其中 N 只是根据部署时分配给应用程序的服务 ID 递增。
所以即使我部署然后使用
设置环境
slc ctl -C http://localhost:8701 env-set proteus-demo PROTEUS_API_PORT=3033 PROTEUS_DB=demo APP_DOMAIN=demo.domain.com
我看到 strong-pm 在使用新的环境变量重新部署时完全忽略了 PROTEUS_API_PORT:
ENV has changed, restarting
Service "1" listening on 0.0.0.0:3001
Restarting next commit Runner: commit 1/deploy/default/demo-deploy
Start Runner: commit 1/deploy/default/demo-deploy
Request (status) of current Runner: child 20066 commit 1/deploy/default/demo-deploy
Request {"cmd":"status"} of Runner: child 20066 commit 1/deploy/default/demo-deploy
3001!不是我想要的 3033,并且在 config.local.js 中指定。有没有办法明确控制这个?我不想每次部署应用程序时都需要 运行 slc 检查命令来确定我的 nginx 上游块的端口。如果能够通过服务名称指定侦听端口,那就太棒了。
FWIW,这是一个 aws 实例,它将托管指向不同数据库和不同端口的演示和暂存应用程序。
strong-pm 只设置一个PORT
环境变量,应用负责兑现。
基于loopback-boot/lib/executor:109,似乎环回实际上更喜欢 PORT
环境变量而不是配置文件中的值。在那种情况下,您最好的选择似乎是:
- 将一个端口传入
app.listen()
你自己
- 设置优先级较高的环境变量之一,例如
npm_config_port
(通常通过 npm start --port 1234
设置)。
我一直在通过自定义 init.d/app.conf 脚本部署环回应用程序,使用 slc run --detach --cluster "cpu"
,但我想按照建议转为使用 strong-pm。
但我遇到了一些限制,正在寻找有关如何复制我目前熟悉的设置的任何指导。
目前我在 server/config.local.js
和 server/datasources.local.js
中设置了特定于应用程序的配置,最重要的是应用程序应该侦听连接的端口。这完美地使用 slc run
进行本地开发和远程部署进行暂存,我所做的就是为每个不同的应用程序设置不同的环境变量:
datasources.local.js:
module.exports = {
"mysqlDS": {
name: "mysqlDS",
connector: "mysql",
host: process.env.PROTEUS_MYSQL_HOST,
port: process.env.PROTEUS_MYSQL_PORT,
database: process.env.PROTEUS_MYSQL_DB,
username: process.env.PROTEUS_MYSQL_USER,
password: process.env.PROTEUS_MYSQL_PW
}
}
config.local.js:
module.exports = {
port: process.env.PROTEUS_API_PORT
}
当我使用 strong-pm 部署时,我无法控制这个端口,它总是被设置为 3000+N,其中 N 只是根据部署时分配给应用程序的服务 ID 递增。
所以即使我部署然后使用
设置环境slc ctl -C http://localhost:8701 env-set proteus-demo PROTEUS_API_PORT=3033 PROTEUS_DB=demo APP_DOMAIN=demo.domain.com
我看到 strong-pm 在使用新的环境变量重新部署时完全忽略了 PROTEUS_API_PORT:
ENV has changed, restarting
Service "1" listening on 0.0.0.0:3001
Restarting next commit Runner: commit 1/deploy/default/demo-deploy
Start Runner: commit 1/deploy/default/demo-deploy
Request (status) of current Runner: child 20066 commit 1/deploy/default/demo-deploy
Request {"cmd":"status"} of Runner: child 20066 commit 1/deploy/default/demo-deploy
3001!不是我想要的 3033,并且在 config.local.js 中指定。有没有办法明确控制这个?我不想每次部署应用程序时都需要 运行 slc 检查命令来确定我的 nginx 上游块的端口。如果能够通过服务名称指定侦听端口,那就太棒了。
FWIW,这是一个 aws 实例,它将托管指向不同数据库和不同端口的演示和暂存应用程序。
strong-pm 只设置一个PORT
环境变量,应用负责兑现。
基于loopback-boot/lib/executor:109,似乎环回实际上更喜欢 PORT
环境变量而不是配置文件中的值。在那种情况下,您最好的选择似乎是:
- 将一个端口传入
app.listen()
你自己 - 设置优先级较高的环境变量之一,例如
npm_config_port
(通常通过npm start --port 1234
设置)。