美文网首页
容器化乱码、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