far*_*oft 2 deployment symlink node.js pm2 server
我正在使用飞行计划来部署我构建的 Web 服务Node.js
我的部署脚本将新版本上传到一个新目录,该目录的名称中包含时间戳或一些随机字符。我将所有版本都保存在我的服务器中,因此我只需更改指向任何特定版本的链接即可轻松回滚,并实现零停机部署。
主目录,以服务名称命名,它只是一个符号链接,上传后会更改为新版本的目录。
ln -snf ~/tmpDir ~/appName
Run Code Online (Sandbox Code Playgroud)
我的问题是,当pm2重新启动我的服务器时,它使用以前版本的原始路径,它不与符号链接绑定并跟随链接指向该链接指向的新目录。
有没有办法重新启动或重新加载pm2并让它知道那个符号链接?
小智 6
简短回答- 您不应在更改的符号链接中运行 pm2。除非您使用 pm2 kill 命令,否则 pm2 将始终选择符号链接指向的旧路径。
解决方案- 创建一个新目录并将其设为 smylink 和您的代码目录(mohmal-144 等)的父目录。为了便于理解,我们称之为部署。
现在你应该有以下结构 /home/deploy /home/deploy/mohmal -> home/deploy/mohmal-144。
如果您使用 pm2,则应使用生态系统.json(用于启动应用程序的 pm2 配置)文件。尽管您可以将此文件命名为您想要的任何名称。为了便于理解,我们将这个文件称为生态系统.json 文件。
在这个 ecossystem.json 文件中的 apps 部分,添加 cwd 目录并且 cwd 应该指向符号链接的路径(而不是它指向的符号链接的路径)。见下面的例子。
{
"apps": [
{
"name": "mohmal",
"script": "src/bin/server.js",
"exec_mode": "cluster",
"instances" : "0",
"cwd": "/home/deploy/mohmal",
"error_file": "/var/log/mohmal/error.log",
"out_file" : "/var/log/mohmal/out.log",
"merge_logs": true
}
]
}
Run Code Online (Sandbox Code Playgroud)
将此文件放在本示例中名为 deploy 的父目录中。
现在只从这个目录运行/使用 pm2 start, pm2 restart 命令。如果您已经在系统中运行 pm2,只需运行一次 pm2 kill 即可清除旧进程。
然后使用建议的更改,您将永远不必 pm2 终止进程。符号链接的变化也会反映出来。
| 归档时间: |
|
| 查看次数: |
1216 次 |
| 最近记录: |