# 竞价系统-运维说明

# 高校部署

# 独立端版本更新

# 前端程序

前端程序可以删除原文件夹,再解压(建议此种方式,防止文件夹越来越大,无用的旧文件占用空间), 也可以直接覆盖。目前程序处理是先删除再解压的。

# 独立端版本管理

  1. 数据库SQL版本 数据库SQL版本记录在pt_param表中,param_code = UPDATE_SQL_VERSION的记录的param_value

# 独立端运维接口

# 准备工作

  1. 自动导出建表SQL

    #查询数据表
       SELECT
        TABLE_NAME,
        `ENGINE`,
        TABLE_COLLATION,
        TABLE_COMMENT,
        ROW_FORMAT 
       FROM
        information_schema.`TABLES` 
       WHERE
        table_schema = 'china_jjw';
        
       #查询主键及主外键 UNIQUE INDEX,INDEX
       SELECT
        CONSTRAINT_NAME,
        TABLE_NAME,
        COLUMN_NAME 
       FROM
        information_schema.`KEY_COLUMN_USAGE` 
       WHERE
        table_schema = 'china_jjw';
       ORDER BY
        TABLE_NAME;
        
       #查询索引	
       SELECT
        TABLE_NAME,
        INDEX_NAME,
        COLUMN_NAME,
        INDEX_TYPE 
       FROM
        information_schema.STATISTICS 
       WHERE
        table_schema = 'china_jjw';
       ORDER BY
        TABLE_NAME,
        INDEX_NAME;
    
  2. 数据库配置文件密码加密 由于程序常常需要安装到高校提供的服务器上,为了加强对数据库密码的保护, 因此需要对配置文件bootstrap.yml中的数据库连接密码加密 对项目文件中的数据库密码进行加密 这就需要在bootstrap.yml中设置spring.datasource.druid.filters为config, 并通过参数指定解密密钥:

    1. 开发环境(其实也可以用于独立端,但把解密密钥和加密后的数据库密码放在一起不太安全)
      在bootstrap.yml中设置spring.datasource.druid.connection-properties为
      config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPNnKi+xldXFtUpoR79/r5I46mg36GGl5CzBshQHCUPA3bPCIydVO5GNk3twoLTDMdr41md7ajcCguErWnKjJtECAwEAAQ==
      
    2. 生产环境独立端
      将参数在服务(TOMCAT_HOME/bin/Tomcat9w.exe //ES//Tomcat9Jjw)的Java选项-Java Options 进行配置
      -Ddruid.connectProperties=config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPNnKi+xldXFtUpoR79/r5I46mg36GGl5CzBshQHCUPA3bPCIydVO5GNk3twoLTDMdr41md7ajcCguErWnKjJtECAwEAAQ==
      

# 独立端运维后门

在CollegeMaintainServiceImpl.java中定义了几个常量方法,可以用于比较复杂的运维情况。

  • 当tomcat已经无法启动时,其实是无法通过管理端的升级模板来完成升级,此时可以利用PHP运维接口
  • 比较常用的功能是:
    • phpUpdateFrontEnd:更新前端程序
    • phpUpdateBackEnd:更新后端程序
    • phpRestartService:重启windows服务
    • phpRestartTomcat: 重启Tomcat服务(即net stop Tomcat9Jjw,net start Tomcat9Jjw)
    • phpKillTomcat:杀死Tomcat进程(主要是利用taskkill /f /t /im tomcat9.exe)
  • 如果以后有需要可以在管理端做相应的功能。
    /**
     * 使用PHP接口更新前端
     * @param collegeUrl 高校首页地址
     */
    public static String phpUpdateFrontEnd(String collegeUrl){
        Map<String, Object> map = new HashMap<String, Object>(2){{
            put("code", "frontEnd");
            put("url", "http://oss.easyjcx.com/yunwei/deploy-file/soeasycenter-college-ui.zip?Expires=316894404694&OSSAccessKeyId=LTAIbOsi2W8XJVoJ&Signature=Jk%2FGL4MFKJ5qZ%2BunSVtvu%2FFUci8%3D");
        }};
        return HttpUtil.post(collegeUrl + "/yunwei/remoteUpdate.php", encryptByYunweiPrivateKeySimple(JacksonUtil.writeValueAsString(map)));
    }

    /**
     * 使用PHP接口更新后端程序
     * @param collegeUrl 高校首页地址
     */
    public static String phpUpdateBackEnd(String collegeUrl){
        Map<String, Object> map = new HashMap<String, Object>(2){{
            put("code", "backEnd");
            put("url", "http://oss.easyjcx.com/yunwei/deploy-file/college.zip?Expires=316894404694&OSSAccessKeyId=LTAIbOsi2W8XJVoJ&Signature=GOb%2FraIqLBj01G7nFAxa5l%2F9qBc%3D");
        }};
        return HttpUtil.post(collegeUrl + "/yunwei/remoteUpdate.php", encryptByYunweiPrivateKeySimple(JacksonUtil.writeValueAsString(map)));
    }

    /**
     * 使用PHP接口重启service(服务名称会覆盖代码)
     * @param collegeUrl 高校访问地址
     * @param code 代码(tomcat、apache、mysql)(程序会自动重启这些应用对应的默认服务名)
     * @param serviceName 服务名称
     * @return 返回结果
     */
    public static String phpRestartService(String collegeUrl, String code, String serviceName){
        Map<String, Object> map = new HashMap<String, Object>(2){{
            put("code", code);
            put("serviceName", serviceName);
        }};
        return HttpUtil.post(collegeUrl + "/yunwei/remoteRestart.php", encryptByYunweiPrivateKeySimple(JacksonUtil.writeValueAsString(map)));
    }

    /**
     * 使用PHP接口重启TOMCAT
     * @param collegeUrl 高校访问地址
     * @return 返回结果
     */
    public static String phpRestartTomcat(String collegeUrl){
        return phpRestartService(collegeUrl, "tomcat", "Tomcat9Jjw");
    }

    /**
     * 使用PHP接口强制关闭Tomcat(适用于Tomcat假死的情况)
     * @param collegeUrl 高校访问地址
     * @return 返回结果
     */
    public static String phpKillTomcat(String collegeUrl){
        return phpRestartService(collegeUrl, "tomcat", "Tomcat9Jjw | taskkill /f /t /im tomcat9.exe");
    }

    public static void main(String[] args) {
        System.out.println(phpKillTomcat("http://localhost"));
    }

# ECS服务器

  1. 设置centos 7的初始化硬盘分区、挂载、重启自动挂载 https://www.cnblogs.com/wangbaihan/p/10731369.html [注]/etc/fstab 只读无法修改的解决办法 mount -o remount,rw /

# 特殊情况

  1. 重庆理工大学
    该校使用了防爬技术,因此直接用程序或者POSTMAN去调用(除了交换/data/batchSend)接口,都会返回乱码
Last Updated: 3/13/2020, 5:00:38 PM