全栈前后端分离项目云服务器部署上线

不同的技术栈,部署上线的方案也不同,轩钰就以自个用的技术栈记录详细的部署笔记
轩钰使用的是 node + pm2 + 宝塔管理工具 部署自个前后端分离项目
写的不好处地方,还请多多谅解.
准备:

  1. 准备一台云服务器
  2. 服务器终端连接工具(我这里用的是vscode的一个插件:Remote - SSH)
  3. 安装Node环境
  4. 安装PM2工具包

云服务器购买

云服务器的大牌服务商有很多,可以选择阿里云,腾讯云,华为云等等都可以
以阿里云为例
阿里云官网网址

进入阿里云官网,选择产品分类,选择云服务器ECS,如图

云服务器

选择立即购买

立即购买

选择你想要配置和服务器地区

选择服务器

服务器系统的选择(推荐选择Linux系统CentOs)

服务器系统

购买成功之后进入个人控制台,查看自己已经购买成功的云服务器(ECS)

个人中心

点击查看实例

实例

配置服务器的安全组,配置安全组规则

安全组规则

配置开放的端口

端口

基本的购买和配置已经搞定
下面我们就可以使用工具连接我们服务器终端

连接服务器终端

连接工具我们以vscode插件:Remote - SSH为例
vscode工具的安装和使用就不多介绍
推荐看看慕课网一门vscode入门课程,可以去看看
vscode入门课程
我们直接在vscode安装插件中直接搜索Remote就能搜索的到此插件
ssh

安装完成之后,重启一下vscode,重启完之后我们可以看vscode左侧多了个这样的图标,说明已经安装成功
安装ssh

接下来我们就可以配置ssh连接文件
打开ssh配置文件

配置示例,如下图:
ssh配置示例

配置完成之后,我就可以连接我们的服务器了
连接服务器
连接时会重新打开一个新窗口的vscode,再弹出一个输入框,让我们输入自己服务器登录密码进行登录,如下图
输入密码
然后我们输入密码,回车键登录即可
登录成功之后我们就可以看到有这样的打开文件夹,说明已经登录成功了,我们就可以打开我们服务器任意目录
服务器连接成功

使用vscode打开我们的服务器终端
当我们使用ssh插件连接服务器成功之后,就可以vscode自带的工具打开我们服务器终端了,如下图
终端1
终端2

为什么要使用vscode插件连接服务器?

这里跟大家说一下使用的vscode插件连接服务器的好处.
1.在我们开发的时候我会把代码托管到github,或者码云上面,我们可以在服务器中直接把我们的代码拉下来然后直接就可以在vscode编辑修改一下内容,非常的方便.
2.本地的项目文件和服务器之间推荐拖拽上传,减少了我们使用ftp上传

接下来我们就可以进行我们的服务器的环境配置了

在服务器中Node环境安装

我们服务器系统使用的是 Linux CentOS
具体安装就介绍了,推荐去看看这里的安装教程
Node环境安装

PM2工具安装和使用

node本身是一个单线程应用。它的特点就是所有的方法都是串行一次执行,并且node没有能力像java一样去创建一个新的现成去实现异步,如果在执行I/O中遇到了阻塞,就会降低整个应用的执行效率。在应用和计算能力要求日益倍增的今天,单线程最大的弊端就是无法利用多核CPU带来的优势来提升运行效率

m2的主要特性

  • 内建负载均衡(使用node cluster集群模块,可以使用服务器上的所有cpu)
  • 后台运行(node app.js 这种命令是直接在前台运行的,不稳定,很容易断)
  • 0秒停机重载(应该是上线升级的时候 不需要停机)
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测

全局安装PM2

npm i pm2 -g

用法

pm2 start build/ecosystem.config.js --env test -i 4           #也可以把‘Max’传递给start,正确的进程数目依赖于cpu的核心数目
pm2 start build/ecosystem.config.js --name my-api  # 命名进程,后面的参数其实都可以在config.js中定义
pm2 deploy build/ecosystem.config.js test  # 执行deploy部署
pm2 list                        # 显示所有进程状态
pm2 monit                       # 监控所有进程
pm2 logs                        # 显示所有进程日志
pm2 log name/id                 # 显示单个进程日志(name为进程名称)
pm2 stop all                    # 停止所有的进程
pm2 stop name/id                # 停止指定的进程
pm2 reload all                  # 0秒停机重载所有的进程
pm2 reload name/id              # 0秒停机重载指定的进程
                                # 0秒停机重载:
                                # 这项功能允许你重新载入代码而不用失去请求连接。
pm2 restart all                 # 重启所有的进程
pm2 restart name/id             # 重启指定的进程
pm2 delete all                  # 杀死所有的进程
pm2 delete name/id              # 杀死指定的进程

查看已经运行中项目列表

pm2 list

列表

监视每个node进程的CPU和内存的使用情况

监视进程

app.js 解析(对应的地方会有注释)

const origin = typeof process.argv[2] != 'undefined' ? process.argv[2] : 'origin/dev';

module.exports = {
  /**
   * Application configuration section
   * http://pm2.keymetrics.io/docs/usage/application-declaration/
   * start 时会根据--env 后面的参数,决定注入不同的环境变量
   * pm2 start 的时候会执行apps里面的配置
   */
  apps: [
    {
      name: '进程的名字',
      script: 'server.js',  # 注入了环境变量后,执行的脚本
      log:  '/var/log/xm.log',
      error: '/var/log/xm-err.log',
      output: '/var/log/xm-out.log',
      instances: 4,  # 实例数
      exec_mode: 'cluster',
      env: {
        COMMON_VARIABLE: 'true',
      },
      env_test: {
        NODE_ENV: 'test',
        port: 4003,
      },
      env_development: {
        NODE_ENV: 'development',
        port: 4003,
      },
      env_production: {
        NODE_ENV: 'production',
        port: 3862,
      },
    },
  ],

  /**
   * Deployment section
   * http://pm2.keymetrics.io/docs/usage/deployment/
   * pm2 deploy的时候会执行deploy中的配置,会使用ssh的方式去登录到服务器上
   * post-deploy 为拉取代码之后 要执行的命令,若是不设置post-deploy字段的话,执行deploy命令就只是登录到服务器上拉取对应分支的代码
   */
  deploy: {
    test: {
      user: 'root',
      host: 'x.x.x.x',
      ref: origin,
      key: 'build/key',
      repo: 'git仓库地址',
      path: '代码在服务器上的路径',
      'post-deploy': 'npm run test_build && npm run test_start', 
      env: {
        NODE_ENV: 'test',
      },
    },
  },
};

宝塔管理工具安装和使用

可能有些朋友不了解宝塔是啥工具,宝塔面板是一个简单好用的Linux/Windows服务器运维管理面板,如果对于服务器运维方面不熟悉的,宝塔是个不错的选择.聚成了多种服务环境配置,一键操作非常的方便.
宝塔官方网址:www.bt.cn
具体的安装官方都有详细的说明,都是傻瓜式安装教程,

注意:

默认安装会自动配置一个8888端口号,如果你的服务器安全组没配置该端口开放的话,安装成功后地址是打不开的,需要我们开放次端口号才能使用,前面有讲到服务器安全组配置,可以往上翻翻看

这是我们安装成功登录后后台管理面板
宝塔

Nginx安装和使用

如果你是使用了宝塔面板管理工具那么,这个安装Nginx就非常简单,如果不使用宝塔面板管理工具,需要自行手动安装.
具体手动安装教程可以参考这里
Nginx安装和配置
我们这里讲讲宝塔怎么安装Nginx
宝塔安装Nginx
一般宝塔面板在初始安装的时候,都会提示你一键安装配置环境,直接选择Nginx一键安装即可.

项目部署

那么我们如果部署我们的项目呢?
如果部署的是静态页面,那就非常简单了,我们可以在宝塔中添加一个网站站点即可.例下图:
添加新站点
域名的购买和解析,就不多做介绍了,我们在各大服务商中购买即可,例如,新网,腾讯云,阿里云,华为云,等等
添加站点是添加的域名端口默认是80端口
例如我们部署一个静态页面,需要绑定的域名地址是test.zhouxuanyu.com ,那么我们就可以添加test.zhouxuanyu.com(注意必须要把相对应的域名地址解析到服务器)

未写完....

Last modification:April 11, 2020
如果觉得我的文章对你有用,请随意赞赏