部署nodejs项目到服务器的一些总结

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云防火墙,500元 1000GB
简介: 安装nodejs首先在服务器上安装nodejs并配置环境,这个可以参考官方的文档,就不细说了

安装nodejs


首先在服务器上安装nodejs并配置环境,这个可以参考官方的文档,就不细说了


拷贝项目到服务器上


这里其实可以通过git直接clone在服务器上。当然正常发版一般是将代码打包上传到服务器上部署,可以通过pcsp传送文件到服务器上:

(1)确保服务器(linux)已经准备好,开通了相应接口。(具体做法直接百度)

(2)将项目打包压缩gz文件(windows下可以使用7-zip,先压缩成tar,再压缩成gz)

(3)打开电脑终端,进入pscp的目录,输入命令:


pscp [项目压缩包的路径] [username]@192.168.1.1:/home/[username]
复制代码


然后输入服务器的用户密码,即可将压缩包传送到服务器的/home/[username]下。

注意:用户一定要有该文件夹的写权限,否则无法传送。

(4)解压到指定目录即可。


部署项目


我们使用pm2来进行项目部署,通过终端登上服务器,安装pm2。


npm install -g pm2
复制代码


然后进入项目目录,通过下面的命令进行部署:


pm2 start bin/www
复制代码


nodejs的入口js文件默认是bin/www,所以我们启动这个文件。

启动完成后就可以通过ip和端口访问这个服务了。如果我们为这个端口绑定了域名,也可以直接通过域名进行访问。


防火墙


如果在外网无法访问这个接口,那么很可能是防火墙引起的。我们需要关闭防火墙或将这个端口加入白名单。


下面是防火墙的一些常用指令:

启动: systemctl start firewalld

关闭: systemctl stop firewalld

查看状态: systemctl status firewalld

开机禁用  : systemctl disable firewalld

开机启用  : systemctl enable firewalld


下面是端口相关的一些指令:

添加: firewall-cmd --zone=public --add-port=80/tcp --permanent  

(--permanent永久生效,没有此参数重启后失效)

重新载入: firewall-cmd --reload

查看: firewall-cmd --zone= public --query-port=80/tcp

删除: firewall-cmd --zone= public --remove-port=80/tcp --permanent


pm2命令


下面是一些常用的pm2命令:

安装:npm install -g pm2

启动并命名进程:pm2 start bin/www --name

启动命名进程,设置cpu数为x:pm2 start bin/www -i x --name

启动程序:pm2 start

列举进程:pm2 list

退出程序:pm2 stop

重起应用:pm2 restart

程序信息:pm2 describe id|all

监控:pm2 monit

实时集中log处理: pm2 logs

查看错误日志: pm2 logs

API:pm2 web (端口:9615 )


日志


如果启动失败或服务异常退出,可以通过日志进行排查。

pm2的错误日志位于/root/.pm2/logs/目录下,日志文件以进程名命名。

在终端执行pm2 logs,可以实时的看到nodejs的console信息了。


多环境


可以使用json配置来启动项目,这样就可以启动不同的环境(开发/生产)


pm2 start xxx.json
复制代码


可以在nodejs项目下配置不同环境的配置文件,尤其是使开发和生产环境使用不用的端口和名称

配置文件的简单示例:

dev.json


{
  "apps": [
    {
      "name": "custom-dev",
      "script": "./bin/www",
      "env": {
        "PORT": "10008",
      }
    }
  ]
}
复制代码


release.json


{
  "apps": [
    {
      "name": "custom",
      "script": "./bin/www",
      "env": {
        "PORT": "8000",
      }
    }
  ]
}
复制代码


在nodejs默认生成的入口文件bin/www中,端口会默认获取进程env的配置,如下


var port = normalizePort(process.env.PORT || '8000');
复制代码


所以通过上面的方式进行启动,不同的环境就会使用不同的端口。


调试


有时我们需要在服务端进行简单的调试,虽然我们可以用pm2 logs查看实时console信息,但是如果服务器上同时运行多个项目,那么就会有很多无效信息。我们可以直接使用node命令来启动


node ./bin/www
复制代码


但是这样启动的话会直接使用我们在www里设置好的接口,而这个接口很可能是生产环境的接口,所以我们要避免使用这个接口,加上端口即可,如下:


PORT=1234 node ./bin/www
复制代码


这样就是以1234接口启动了


目录
相关文章
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
|
2天前
|
敏捷开发 弹性计算 负载均衡
阿里云云效产品使用问题之如何将应用部署到部署组的某一台特定服务器上
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2天前
|
敏捷开发 缓存 测试技术
阿里云云效产品使用问题之构建Vue3项目,怎么让node_modules缓存下来
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2天前
|
人工智能 安全 网络协议
如何保护应用?可快速部署的WAF服务器分享
技术分享:分布式数据库DNS服务器的架构思路
4 0
|
2天前
|
人工智能 网络安全 开发工具
视觉智能开放平台操作报错合集之服务部署在pdd的服务器,调用报错:The SSL connection could not be established,该如何解决
在使用视觉智能开放平台时,可能会遇到各种错误和问题。虽然具体的错误代码和消息会因平台而异,但以下是一些常见错误类型及其可能的原因和解决策略的概述,包括但不限于:1. 认证错误、2. 请求参数错误、3. 资源超限、4. 图像质量问题、5. 服务不可用、6. 模型不支持的场景、7. 网络连接问题,这有助于快速定位和解决问题。
|
3天前
|
关系型数据库 应用服务中间件 nginx
Docker + node(koa) + nginx + mysql 线上环境部署
Docker + node(koa) + nginx + mysql 线上环境部署
|
3天前
|
JavaScript 前端开发 网络协议
如何快速搭建一个 Node.JS 项目并进入开发?
如何快速搭建一个 Node.JS 项目并进入开发?
|
4天前
|
JavaScript Java 应用服务中间件
打包前后端程序并在阿里云服务器上部署,只需几步就能实现!
打包前后端程序并在阿里云服务器上部署,只需几步就能实现!
|
5天前
|
安全 关系型数据库 MySQL
本地项目无法连接阿里云服务器MYSQL---轻量应用服务器篇
本地项目无法连接阿里云服务器MYSQL---轻量应用服务器篇
14 0
|
5天前
|
弹性计算 缓存 监控
云效将项目代码部署到云服务器ECS
云效支持一键和手动部署,一键部署因其高效、一致性和可重复性而受青睐,但也存在灵活性不足和初期设置复杂的挑战。优化方向包括简化脚本、提供选项、完善文档、集成监控和回滚机制。一键部署步骤概括为:准备云效项目和ECS,配置项目和环境,编写部署脚本,设置一键部署,测试脚本,审核发布,监控结果,及后续维护。实际操作应参照云效最新文档。
16 0