node 框架 Nest.js + MongoDB 服务器部署超详细步骤

6,827 阅读7分钟

服务器部署

前言

之前在腾讯云买了个服务器一直没怎么用,最近重拾 Node 部署上面遇到了几个坑,记录一下方便日后查阅,有同样需求的老哥,也可以看下,觉得有用的老哥,辛苦点个赞哇嘻嘻(´∀`)


涉及内容

  • Node.js Nest.js 这里作者用的是 Nest 写的一个简单 Demo 正好学习到了这里用作部署测试。
  • MongoDB MongoDBCompass 数据库连接这里使用的是 MongoDB 至于为什么选择 mongo 只是感觉做简易项目 Demo 便捷些。
  • 腾讯云服务器 这里作者用的轻量级服务器,按需购买即可。
  • FinalShell(好用的连接服务器工具) 这款连接工具对于我一个前端开发来讲,足够人性化。性能监控,文件拖拽等操作,终端啥的一应俱全。
  • PM2 (服务器管理项目工具) 可多开集中管理项目,项目耗费资源,日志 logs,负载均衡等这里不做过多描述,感兴趣的小伙伴可以去看看具体介绍,好用就完事了。
  • PostMan 这个不多说了=。=嘿嘿嘿,

服务器配置

  • 项目部署前,先把用到的端口打开一下。我这里要配两个点,把宝塔控制的那里防火墙也给配置通行了。我看阿里云好像只用配置一个地方就可以。之后用 FinalShell 成功连接控制远程服务器

配置端口

  • image.png
  • 宝塔操作面板(我这里入口在轻量级服务器应用管理处:
  • image.png
  • 好了这里已经完成了端口配置。

远程连接服务器

  • 进入 FinalShell 首页

  • image.png

  • 这里输入服务器 ip 地址,账号密码,名称随便填即可

  • image.png

  • 连接成功可以看到该软件主要分为三个视图左侧为服务器性能监控,右上为终端控制区,右下可进行拖拽文件等操作。软件安利完啦,下面配置 mongodb

MongoDB 配置

  • MongoDB 配置这个花了不少时间,刚开始看别人的文章对着搞遇到了各种坑。报错提示也不明显,直挠头了。总结就是切记注意 版本 ⚠️

安装 MongoDB 数据库

  • MongoDB v5.0.6 这里使用当前的最新稳定版,在 config 中要配置访问ip,老版本的是不用配置。这个坑卡了我好久。 下载地址 MogoDB

  • 这里我使用的是 tgz 在服务器下载解压安装。

  • image.png

  • 选择 linux 版本 MongoDB 这里偶数为稳定版 包选择 tgz 点击下面的 copy 复制下载地址。

  • 回到服务器在 user/local 文件夹下进行下载解压

    cd /usr/local  // 跳转到 local 目录
    
    wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-amazon-5.0.6.tgz // 下载
    
    tar zxvf  mongodb-linux-x86_64-amazon-5.0.6.tgz  // 解压
    
  • 解压完成后把文件名称改成 “mongodb” 方便后面使用。

  • image.png

  • 至此 MongoDB 数据库在服务器已安装完成。接下来进行环境数据包等文件配置。

MongoDB 配置文件 && 日志数据文件

  • 创建用于 MongoDB 数据存储和日志存储夹。

  • 创建 MongoDB 配置文件 很重要,这里配错会留很多坑。老旧版本也会有些许出入,新版本切记要配置 开放访问 IP

    mkdir -p  /var/mongodb/data // 数据
    mkdir -p   /var/mongodb/logs/ // 日志
    touch /var/mongodb/logs/log.log
    touch /var/mongodb/mongodb.conf // 配置文件
    
  • 配置 mongodb.conf 文件

    vim /var/mongodb/mongodb.conf // 打开
    
  • 配置文件

    dbpath=/var/mongodb/data    // 数据存储
    logpath=/var/mongodb/logs/log.log  // 日志位置
    logappend = true    // 日志模式 true 为追加 默认为 false 覆盖
    port = 27017        // 当前数据库端口
    fork = true         // 是否后台运行,设置为true 启动 进程在后台运行的守护进程模式。默认falseauth = true         // 是否开启用户认证 开启后就要在admin下创建用户分配权限
    quiet = true        // 安静用户
    bind_ip = 0.0.0.0   // 绑定地址。默认为 127.0.0.1
    
  • 这是我这边的配置,具体内容这个博主有详细说明,感兴趣小伙伴可以看下 配置文件详解

MongoDB 实现开机自启

  • 配置数据库实现开机自启动。

  • 配置 rc.local 文件,添加 CentOS 开机启动项

    chmod +x /etc/rc.d/rc.local
    
    vi /etc/rc.d/rc.local
    
    /usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork
    
  • 图示

  • image.png

  • i 插入 esc 退出 wq 保存 完成开机自启配置。

MongoDB 配置 PATH

  • 实现全局快速使用 mongo

    vim ~/.bashrc  // 打开
    export PATH=$PATH:/usr/local/mongodb/bin  // 插入
    source ~/.bashrc // 保存执行
    

MongoDB 服务启动

  • 启动服务

    mongod --config /var/mongodb/mongodb.conf //启动服务
    

MongoDB 添加数据库权限账号

  • 启动 mongo

    mongo//启动服务
    
  • 添加账户密码权限

     use admin // 使用 admin 
     
     db.createUser({user:"root",pwd:"12345",roles:["root"]}) // 创建账号并分配一个 root 权限
    
  • 关闭服务 关闭重启服务是更新账户信息

    mongod -shutdown -dbpath=/var/mongodb/data // close
    
    mongod --config /var/mongodb/mongodb.conf  // open
    

MongoDB 创建库

  • 先在 linux 尝试连接

    mongo
    use admin
    db.auth("root","12345") // 输出1表示连接成功
    use mybase  // 创建 mybase 数据库
    show dbs // 查看所有数据库
    

MongoDB Compass 连接服务器的数据库

  • 这里我用的是 v1.30.1 注意下版本,会存在连接器与数据库版本兼容问题。

    mongodb://root:1235@0.0.0.0/mybase?authSource=admin 
    
  • 这里的 0.0.0.0 输入你自己的服务器 公网 iproot12345 则对应之前设置的数据库 账号密码。

  • image.png

  • 至此数据库已经部署完成,并连接成功。遇到问题的小伙伴,欢迎在评论沟通。

Nest 部署

  • 相比较 MongoDB 部署配置的繁琐,部署项目这里就相对简单很多,拖拖拽拽就完事了,
  • 下面我们来完成 Nest 的部署,并使用 Pm2 项目管理工具进行管理。

依赖

  • Node v17.6.0 Yarn 1.22.17 Npm 8.5.1

打包部署

  • 打包并把打包好的文件与需要依赖的文件扔到服务器中

  • 在服务器创建文件夹用于存储项目

      yarn run build  // 打包 nest 项目
      // 我这里是打包完把 dist package.json tsconfig.build.json 以上文件拖拽到服务器创建的文件夹中
    
  • 拖拽完后,在该目录下载项目需要的依赖

     yarn install  
    
  • image.png

  • 当前目录这里已经部署完成了,执行 yarn run start 是能运行起来的。当然我们不这样使用。

PM2 管理项目

  • pm2 这个在开头介绍了,是一个非常好用的项目管理工具。下面我用该工具完成项目启动

  • 全局安装

    npm install -g pm2
    
  • 安装完成后即可使用,我们去项目目录下执行 start 启动

     pm2 start main.js  --name nest-test1  // start 启动
    
  • 可以看到我们项目已经启动起来了,这时候就算我们关掉终端控制,也会在服务器运行。

  • image.png

  • 暂停

       pm2 stop nest-test1  // stop 暂停 这里也可以是pm2 项目列表 id号
       pm2 stop all         // stop 暂停 所有项目
    
  • 列表

       pm2 list // 查看所有管理项目
    
  • 重启

       pm2 restart nest-test1 // 重启项目
    
  • 日志

       pm2  monit  nest-test1 // 查看日志打印等
    

检验

  • 以上我们完成了 Nest + MongoDB 数据库的部署
  • 并使用 Pm2 来管理项目 现在我们用 Postman 来检验下效果如何,是否能满足基本需求

Pm2 目标项目开启日志监控

  • 先打开服务器中目标项目的 pm2 日志监控,方便我们看 log

    pm2  monit  nest-test1
    

Postman 检验部署效果

  • 使用 Postman 发出一个注册接口请求到服务器并现实效果

  • image.png

  • 左侧 Postman 本地发起请求,在右侧的数据库从 Pm2 工具中可以查看到项目打印的 log

  • 检验完成,这个 Pm2 工具确实香 。

总结

  • 至此我们使用腾讯云轻量数据库完成了对 Nest + MongoDB 的项目简易部署。在学习中遇到的服务器数据库与本地连接工具版本差异问题让我印象深刻,为以后的项目部署吸取了教训吧算是。

  • 还有幸认识到 FinalShellPm2 这种好用的工具。后面准备用 Nest 做一个有意思的平台,后面看看能否实现 CI/CD 自动化部署,一步步来 ^^;。


参考文献