# 竞价系统-运维说明
# 高校部署
# 独立端版本更新
# 前端程序
前端程序可以删除原文件夹,再解压(建议此种方式,防止文件夹越来越大,无用的旧文件占用空间), 也可以直接覆盖。目前程序处理是先删除再解压的。
# 独立端版本管理
- 数据库SQL版本 数据库SQL版本记录在pt_param表中,param_code = UPDATE_SQL_VERSION的记录的param_value
# 独立端运维接口
# 准备工作
自动导出建表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;
数据库配置文件密码加密 由于程序常常需要安装到高校提供的服务器上,为了加强对数据库密码的保护, 因此需要对配置文件bootstrap.yml中的数据库连接密码加密 对项目文件中的数据库密码进行加密 这就需要在bootstrap.yml中设置spring.datasource.druid.filters为config, 并通过参数指定解密密钥:
- 开发环境(其实也可以用于独立端,但把解密密钥和加密后的数据库密码放在一起不太安全)
在bootstrap.yml中设置spring.datasource.druid.connection-properties为config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAPNnKi+xldXFtUpoR79/r5I46mg36GGl5CzBshQHCUPA3bPCIydVO5GNk3twoLTDMdr41md7ajcCguErWnKjJtECAwEAAQ==
- 生产环境独立端
将参数在服务(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服务器
- 设置centos 7的初始化硬盘分区、挂载、重启自动挂载 https://www.cnblogs.com/wangbaihan/p/10731369.html [注]/etc/fstab 只读无法修改的解决办法 mount -o remount,rw /
# 特殊情况
- 重庆理工大学
该校使用了防爬技术,因此直接用程序或者POSTMAN去调用(除了交换/data/batchSend)接口,都会返回乱码