关于 Nodejs 项目部署问题。
请教下大家,node 项目部署,使用 pm2 管理还是 docker 管理好?
关于 Nodejs 项目部署问题。
都行 反正守护进程是为了保活 ,docker 要保活的话不得搭配 k8 的探针吗? 或者自己写脚本
保活是指开机自启吗?
保活是指挂掉之后自动启动,和开机启动是两回事,Google 一下就能知道区别了。
docker 可以搭配 HEALTHCHECK
?你都不知道吗,不知道那就不建议用它
pm2 是一个带有负载均衡功能的 Node 应用的多进程管理器,虽然是为 node 开发的,但也能管理其他程序进程
当你要把你的独立代码利用全部的服务器上的所有 CPU ,并保证进程永远都活着,0 秒的重载,PM2 是完美的。
主要特性:
1 、多进程启动项目,内建负载均衡(使用 Node cluster 集群模块)
2 、可启动静态文件服务(类似 nginx 静态服务)
3 、可使用插件分割日志
4 、可通过重启策略配置条件重载(可以运行一些脚本,定时任务等)
5 、可以配置部署命令,轻量化一键部署项目(小项目可用,跟 devops 差得远)
6 、有 pm2 服务接口,可远程获取 pm2 集群数据
7 、具有 Ubuntu 和 CentOS 的启动脚本
保活是为了让你 node 因为各种意外死掉之后可以自动重启
pm2 很屌,我没用= =
你的目的是啥?单纯的想把 node 部署到服务器上吗?那直接 node xxx.js 不就行了
就是保持容器的活动状态,出现故障时自动重启,也可以用 docker compose, 设置 restart 为 always
我喜欢写 while 1==1 然后 里面不停的起来 并且 sleep(20)
pm2 的日志能看的东西比较多,也比较齐全,还有高亮
k8s + docker 化部署的
不应该是 docker 里面跑 pm2-runtime 吗[狗头]
docker ,还能顺便避免依赖问题
docker 比较好,因为 docker 还能保证实现线上版本控制, 而且后期如果上 K8s 也方便
要保活,不就 linux 自带的 systemd 加 1 行
Restart=always
就行了嘛。
花式根据 exit code 来保活 得看文档里这个 Restart 参数: http://www.freedesktop.org/software/systemd/man/systemd.service.html#Restart=
pm2 再加自带的多线程
#5 我的需求是无论是机器重启,还是因为什么原因进程挂了,都要常识启动,之前用了 docker compose 有个选项是 restart: always ,这个应该就是无论什么情况都会尝试重启。
你可以容器 restart always, 也可以在容器里面用 pm2, 不太确定是不是所有的 node 进程挂掉的时候容器也是挂掉的, 所以我建议容器里面跑 pm2.
如果是测试环境, 其实直接在容器里面跑 node ***.js 就好了, 反正问题不大.
什么情况下 node 进程挂掉了而容器没挂的?
nuxt 部分情况下出错导致整个服务 500 了, 但是容器还在 running…前端日常花式整活.
如果把 nuxt 作为 express 的中间件来使用 还会出现这种情况吗
这时候 node 没挂掉吧?
不知道, 我都懒得折腾这些…这应该是框架开发这关心的情况, 我们开发这哪有那个时间去整这些, 光是搞业务就忙得要命了, 遇到这种极端情况最好的方法就是直接重启
你跟我杠这个也没什么意思呀, 反正作为框架用户, 我用起来整个 node 本身还有响应 500, 但是服务本身进入了非预期的响应状态, 刷新页面 /重调 API 也无法跳过, 那我说它挂了也不过分吧
pm2 没啥用
你用 pm2 去管应用程序的死活,那 pm2 自己的死活谁来管呢?
要看你把项目部署到什么平台上。如果是直接部署到服务器,是推荐 pm2 .但是我一般都是封装成 docker 到 k8s 来运行,所以不需要 pm2
如果是自己的小项目,都不用,直接用 systemd 一切从简不好吗
正解,我现在就是这样做的
直接部署在系统上就用 pm2 ,或者使用 systemd ;已经有 docker 环境就用 docker 。没啥好不好的,看你具体情况。
我用 nuxt PM2 nginx 部署的话,重启会有 502 的情况,请问大佬您知道为啥吗
我萌新来的. 我们网站的用户量不大, 所以也没见过你说的这种问题.
关于Node.js项目部署问题,通常涉及几个关键步骤,包括环境准备、代码部署、依赖安装、进程管理以及反向代理设置。以下是一个简要的部署流程示例:
-
环境准备: 确保服务器上已安装Node.js和npm(Node包管理器)。可以使用如下命令检查版本:
node -v npm -v
-
代码部署: 将你的Node.js项目代码上传到服务器,可以使用
scp
、rsync
或Git等工具。例如,使用Git克隆仓库:git clone https://github.com/your-repo/your-project.git cd your-project
-
依赖安装: 在项目根目录下运行
npm install
安装所有依赖:npm install
-
进程管理: 使用
pm2
等进程管理工具来管理Node.js应用。首先全局安装pm2
:npm install -g pm2
然后启动应用:
pm2 start app.js --name "your-app-name"
-
反向代理设置: 使用Nginx等反向代理服务器来转发请求到Node.js应用。Nginx配置文件示例:
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:3000; # 假设Node.js应用在3000端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
完成以上步骤后,你的Node.js项目应该已经成功部署并可以通过域名访问了。