Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

常见问题

打包发布流程

前提确保ide中运行正常后,打jar(war)包

本地自检

本地按照部署文档目录结构部署jar(war)包,运行自检效果是否和ide中一致

  • 效果不一致

    请检查本地部署目录结构是否和文档一致,配置文件、模板文件等是否和ide中一致;此处一般是因为文件和ide中不一致

线上部署

本地部署运行正常后,按照本地的结构部署到线上

  • 启动失败

    一般是因为配置文件未同步导致;具体需要结合日志分析

  • 启动成功,但某些功能异常

    本地部署正常运行,一般说明jar(war)包是正常的;根据异常的功能和日志进行排查分析,可能触发的原因,如服务器环境、服务器文件读写权限、防火墙等等

部署后,模板编辑、自定义标签修改等功能异常

场景描述:本地修改模板、修改自定义标签数据都正常,但是部署到线上后发现功能异常;

问题体现:无法编辑保存,浏览器控制台有请求错误,但后台没有请求日志,没有接收到请求

Alt text

这种问题一般都是由于部署环境有waf之类的安全拦截,模板、标签的内容触发了服务器安全拦截,优先检查服务器配置

国产服务器部署登录失败

控制台提示vue3-sfc-loader资源相关错误

通常都是因为浏览器不支持新JS特性导致,处理方案

  1. 升级浏览器版本

  2. 降低资源版本

获取资源,将现在的资源覆盖

Alt text

docker网络故障导致系统无法访问

docker网络不通,优先尝试重启虚拟机。

Alt text Alt text

打包发布服务器依赖包里面的js文件404

采用nginx代理静态资源的时候通常会映射到具体的某个目录,需要手动将依赖包的js文件复制到静态目录文件夹下。或者单独的增加一条js映射例如:自定义包里面的 index.js 文件

   location ~ /(static/mdiy) {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        add_header Access-Control-Allow-Origin $http_origin;
        add_header Access-Control-Allow-Credentials true;
    }

如果没有采用nginx代理,可能是打包问题,必须要在父工程ms-parent进行打包

内网环境如何搭建多站点的站群环境

需要配合ng代理实现,利用ng监听不同端口,代理到服务的真实端口,例如:(详细配置参考发布部署-nginx代理配置)

    ···
    server {
        listen 8081;
        ···
        location / {
            # 根据实际系统启动等地址配置
            proxy_pass http://127.0.0.1:5108;
            # 注意:如果使用了堡垒机端口映射,例如:映射端口8989 -> nginx端口80 -> mcms端口8080,需要将mcms端口8080修改成8989,如果遇到访问地址不正确,可以将$host:$server_port直接填写外网ip或域名与端端口(必须与实际端口一致)
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Credentials true;
        }
        ···
    }
    server {
        listen 8082;

        ···

        location / {
            # 根据实际系统启动等地址配置
            proxy_pass http://127.0.0.1:5108;
            # 注意:如果使用了堡垒机端口映射,例如:映射端口8989 -> nginx端口80 -> mcms端口8080,需要将mcms端口8080修改成8989,如果遇到访问地址不正确,可以将$host:$server_port直接填写外网ip或域名与端端口(必须与实际端口一致)
            proxy_set_header Host $host:$server_port;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header Access-Control-Allow-Origin $http_origin;
            add_header Access-Control-Allow-Credentials true;
        }
        ···
    }
    ···

部署后,验证码问题

Tip

规范: 验证码请求路径使用需添加 .do,如/code?t=改成/code.do?t=

登录页面验证码不显示报java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

Alt text 安装fontconfig更新字体缓存 参考博文

验证码始终提示错误

  1. 部署没有将头信息进行代理导致
  2. 如果是分布式部署,需要自行二次开发增加会话共享机制,参考博文

(政务版本参考文档修改即可)

静态资源更新问题

修改css、js静态资源等静态资源后,访问发现静态资源没更新

  1. 清空访问的静态资源,重新访问,确定访问的资源路径正确

  2. 请求资源后,按住shift刷新

  3. 请求静态资源后拼接参数,让浏览器重新请求资源

  4. 如果使用了国产中间件,需要在中间件中修改配置,具体修改需要中间件厂商配合

Tip

如在金蝶中,需要修改domains/mydoamin/config下的apusic.conf,修改<ATTRIBUTENAME="ServletReloadcheckInterval"VALUE="-1"/>,value修改为需要生效的时间;生产上线后需要关闭,会占用服务器资源;

nginx部署,上传图片时提示Request Entity Too Large 状态码413

按需配置 client_max_body_size

通过nginx 配置后 css和js文件 403 无法访问

一般是文件权限与nginx的启动用户权限不一致导致,最简单的方法是直接将nginx 启动用户修改为 root 启动

多服务共享模板和静态文件

使用rsync或者做共享,文件服务能达到共享就行 如nfs、fastdfs

jar包部署好模板无法上传、百度编辑器显示配置错误

  1. 执行指令需要在jar的当前目录执行
  2. 确保yml中ms.upload.enable-web的配置为true
  3. 确保部署的资源(static、upload、template)与jar在同一级,可参考部署文档的资源结构
  4. nginx 配置
location / {
  proxy_pass http://localhost:8080;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location ~ .*\.(do|jsp|index)$ {
  proxy_pass http://localhost:8080;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#静态资源、生成的页面、上传的文件、模板目录
location ~ /(static|html|upload|templets){
  #缓存时间 7天
  expires 7d;
  #项目部署位置,当前项目部署在/home/mcms
  root /home/mcms;
}

打包jar包运行时百度编辑器错误

将static目录复制到jar包同级目录

缓慢http拒绝服务攻击

参考: https://www.cnblogs.com/wsx2019/p/17611226.html

CORS跨域问题

参考: https://zhuanlan.zhihu.com/p/661237362

html/1伪静态处理

1、配置nginx ,将所有的.html 映射到 项目/html/1文件夹

2、将模版里面所有链接去掉{ms:global.url/}标签

https访问问题

使用springboot加证书的方式访问没有问题,如果用nginx代理访问时,{ms:global.host/}标签解析后还是http的形式,可以将模版资源采用//的方式,例如:

<script src="//mingsoft.net/xxx.js"/>

${field.hit}失效

需要将field.hit的请求进行代理,/cms/content/文章id/hit.do

登录验证码输入错误,报文件找不到

资源文件读取报错,Linux默认读取en的资源文件,导致未找到该文件,可以在java启动的指令配置服务cn 的资源文件

docker run --name mcms -d -v /home/mcms:/home -p 8080:8080 -w /home  \ 
--restart=always --privileged=true  store/oracle/serverjre:8 java  \ 
-Duser.timezone=GMT+08 -Duser.language=zh \ 
-Duser.region=CN \ 
-Dspring.config.location=/home/application.yml,/home/application-dev.yml \ 
-jar mcms.jar

数据库的时间对不上,少了8个小时

java 启动配置时区-Duser.timezone=GMT+08

docker run --name mcms -d -v /home/mcms:/home -p 8080:8080 -w /home \ 
--restart=always --privileged=true  store/oracle/serverjre:8 java \ 
-Duser.timezone=GMT+08 -Duser.language=zh -Duser.region=CN \ 
-Dspring.config.location=/home/application.yml,/home/application-dev.yml \
-jar mcms.jar

管理页面WEB-INF/manger单独配置在jar外面,修改部分ftl避免重新jar打包

修改: application.yml template-loader-path

template-loader-path: file:WEB-INF/,file:WEB-INF/manager,classpath:/,classpath:/WEB-INF/manager,classpath:/WEB-INF

Tomcat部署路径问题

  1. tomcat部署会多一层路径,默认多的路径为war包名称

  2. tomcat可以放到root下,避免多一层路径

Tomcat部署驱动加载问题

如果遇到tomcat启动不加载驱动问题,可以手动把驱动放到lib包下

Tomcat启动war包没有看到日志信息

默认在Tomcat启动脚本目录,application.yml中logging.file.name参数可按需配置

宝兰德部署启动解不开war包

检查war包中是否包含web.xml文件,如果有需要手动解压到部署目录并且删除web.xml文件,在打包时需排除tomcat依赖。

Tip

部署后出现部分页面404,若tomcat下运行没有问题本质上也是大概率这些原因

log 打印文件未找到

1.war包使用Tomcat启动,默认log文件在(当前执行指令目录)bin目录

可修改log文件路径

2.jar包log文件在当前执行java指令目录,避免全部在jar同级目录可自行配置目录

东方通部署

编码问题

需要在 HTTP通道管理 中设置URL编码格式为UTF-8

页面访问404

需要把项目中的WEB-INF/web.xml删除掉

金蝶部署

  1. 打包方式修改为war
  2. 排除spring-boot-start-web自带的tomcat依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!--移除内嵌tomcat-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  1. 添加Servlet依赖
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
  1. 修改入口方法
@SpringBootApplication
public class MSApplication extends SpringBootServletInitializer {
	public static void main(String[] args) {
		SpringApplication.run(MSApplication.class, args);
	}

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
		return builder.sources(MSApplication.class);
	}
}