美文网首页
容器化乱码、host不解析、时区问题解决

容器化乱码、host不解析、时区问题解决

作者: Ronal丶 | 来源:发表于2019-10-29 17:16 被阅读0次

    迁移步骤

    1. 资源申请
      • 数据库
      • Redis等中间件资源
      • 集群使用权
    2. 代码迁移与部署(两个代码库同时使用期间bugfix应同时兼顾两个代码库)
      • 新建代码库
      • 新代码库增加DockerFile、gitlab-ci.yml、charts等容器化文件
      • 启动无定时任务单实例,实例配置网络、域名
    3. 测试(此步需尤其注意各种编码问题,已写在下方)
      • Postman测试后端服务
      • 前端代码打包部署,测试
      • 检测日志是否正常,测试业务流程,检验数据正常性
    4. 服务切换
      • 更换路由时间无缝迁移

    迁移前收集内网其他系统信息以及第三方API,进行网络联通

    这里主要使用到的是 ping 或者 telnet
    我这里有部分域名解析到外网去了,懒得找网管做DNS解析就直接操作容器了
    使用deployment.yaml直接写入hosts
    案例:

    • values.yaml中加入host映射
    hostAliases: []
      - ip: "127.0.0.1"
      hostnames:
        - "foo.local"
        - "bar.local"
    
    • deployment.yamlmetadata中加入
    volumes:
    - name: esdata  
    {{- if .Values.persistence.enabled }}
    persistentVolumeClaim:    
        claimName: {{ .Values.persistence.existingClaim | default ( 
    .Release.Name ) }}  
    {{- else }}  
    emptyDir: {}  
    {{- end }}
    

    容器字体以及各种编码的设置

    1. 程序连接数据库参数,例如jndi配置
    <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" 
             name="jdbc/test" type="javax.sql.DataSource" username="root" password="123456"/>
    
    1. 日志文件编码设置
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">    <!-- 记录debug以上的日志 -->    
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">                      
            <level>DEBUG</level>    
        </filter>    
        <encoder>        
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] %logger{20} - 
    %msg%n</pattern>        
            <charset>UTF-8</charset>     
        </encoder>   
    <!--<logger name="" level="WARN"/>-->
    </appender>
    
    
    1. 数据库编码格式
    show VARIABLES like 'CHARACTER%';
    

    [图片上传失败...(image-287b11-1572343472256)]

    image.png

    mysql要在配置文件my.ini/my.cnf[mysqld]里配置

    lower_case_table_names=1 
    character_set_server=utf8 
    max_connections=500
    
    1. 添加tomcat启动编码参数

    可以检查下是linux下所有乱码还是仅仅是tomcat乱码,输入date命令查看时间是否存在乱码, 如果,tomcat下乱码会存在全是问号的情况,可以修改下tomacat中catalina.sh文件 在文件中加入

    JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.language=zh_CN -Dsun.jnu.encoding=UTF-8"
    

    或者直接创建一个setenv.sh进行export JAVA_OPTS
    然后重启tomcat

    1. 看看容器的locale:

    docker exec -it id locale

    在Dockerfile中添加环境变量:

    ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
    

    前后端分离应用打包问题

    前端应用可以直接把编译后的静态文件打包发布
    省去在线打包的步骤
    可跨国多个子应用多语言设计打包障碍,提高效率

    相关文章

      网友评论

          本文标题:容器化乱码、host不解析、时区问题解决

          本文链接:https://www.haomeiwen.com/subject/meugvctx.html