1.0.0 • Published 2 months ago

pm2-deploy-xxjss v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
2 months ago

webpack 的 dist 包 自动化部署 插件

本插件 是-只用 服务部署插件,
基于 centOS 7 + pm2  用于部署 webpack 生成的dist 包,
自动化部署到远程服务器,并实现自动重启 服务

该插件 主要有三个 功能

    1.  初始化服务器 可以自动联网 安装 node 环境;
        上传服务 配置文件;

    2. 远程服务器,自动创建 环境依赖文件-所需存放文件夹、自动创建 项目所需文件夹;
    
    3.  build 项目 为dist 文件 并压缩 为 dist.zip 文件 并上传到 远程服务器 指定目录下  /data/www/dist.zip ;
        远程服务器 解压 dist.zip 文件 到 /data/www/dist 目录下;
        重启 nginx 服务;
        删除 远程服务器 指定目录下的30天以前的(自定义源码可改过期时间,默认30天) dist.zip 文件; 
        删除 本地 dist.zip 文件; 
    

安装

npm i pm2-deploy-xxjss

使用

插件初始化 会在 项目根路径 生成一个配置文件;
    /ssDeploy/deployConfig.js -> 服务器基本信息 和文件存放路径
    /ssDeploy/server.js -> pm2 运行 配置文件 默认只有 '/api'
    /ssDeploy/prod.config.js -> pm2 运行 配置文件 配置服务器 运行后台信息

命令解析

    带有 ‘init’  的命令 表示 该项目初始化命令,主要用于,创建 nginx 运行环境 和项目 存放路径;
    已有 pm2 运行环境 和项目 存放路径 的项目 无需 执行 init 命令;

配置 远程服务器

// =============================================== deploy.js==============================
// 配置远程服务器目录
let remoteDirectory = '/data/competition/web';
// 服务地址配置
let serverConfig;
switch (args[0]) {
    case 'production':
        serverConfig = {
            host: '**.***.***.***',
            port: 22,
            username: 'root',
            password: '**************',
        };
        break;
    case 'test':
        serverConfig = {
            host: '**.***.***.***',
            port: 22,
            username: 'root',
            password: '**************',
        };
        break;
    case 'development':
        serverConfig = {
            host: '**.***.***.***',
            port: 22,
            username: 'root',
            password: '**************',
        };
        break;
    default:
        console.error('连接异常:请重新执行dev:deploy、test:deploy、production:deploy');
        process.exit(1);
}
// =============================================== server.js ==============================
    const path = require('path');
    const compression = require('compression');
    const express = require('express');
    const app = express();
    const { createProxyMiddleware } = require('http-proxy-middleware');
    const ejs = require('ejs');
    const indexRouter = require('./indexRouter');
    const config = require('./prod.config');
    app.use(compression());
    // 模板配置
    // eslint-disable-next-line no-underscore-dangle
    app.engine('html', ejs.__express);
    app.set('view engine', 'html');
    app.set('views', path.join(__dirname, '../dist')); // 项目文件 位置
    
    // 静态资源配置
    app.use('/', express.static(path.join(__dirname, '../dist')));
    
    // api代理配置
    app.use('/api', createProxyMiddleware(config.proxy['/api']));

    <!-- 
        多个 代理 依次累加 就行  只需修改 '/api' -> '/pro' 
        // pro代理配置
        app.use('/pro', createProxyMiddleware(config.proxy['/pro']));
    -->
    // 路由配置
    app.use('/', indexRouter);
    // 监听端口
    app.listen(config.port);
  
// =============================================== prod.config.js ==============================

    module.exports = {
      // proxy: 'http://***.***.***.***:8888',
      proxy: {
        '/api': {
          target: 'http://***.***.***.***:8888',
          changeOrigin: true,
          pathRewrite: { '^/api': '' },
        },
      },
      port: 8080,
    };