Docker-SpringBoot
1 | #基础镜像选择alpine 小巧安全流行方便 |
1 | HEALTHCHECK --start-period=40s --interval=30s --timeout=5s --retries=5 CMD (wget http://localhost:9303/actuator/health -q -O -) | grep UP || exit 1 |
1 | #基础镜像选择alpine 小巧安全流行方便 |
1 | HEALTHCHECK --start-period=40s --interval=30s --timeout=5s --retries=5 CMD (wget http://localhost:9303/actuator/health -q -O -) | grep UP || exit 1 |
官方设置Protect the Docker daemon socket
tls(https)安全连接是通过证书进行验证,因为连接协议是https,所以连接的时候端口变成了2376
阿里云开放端口: 2376
1 | #服务端需要的文件 |
1 | mkdir /docker_data/cert/ |
修改vim /etc/docker/daemon.json文件
1 | { |
配置完成后重启docker
1 | systemctl daemon-reload |
1 | #服务端测试 |
拷贝ca.pem 、cert.pem、key.pem 三个文件到cert目录,然后idea指向cert目录,url用https://ip:2376
下面简单解释下名词的含义,后面会详细介绍:
docker swarm服务关系
docker编排部署流程
容器是打包代码及其所有依赖项的软件的标准单元,因此应用程序可以从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像是一个轻量级的,独立的,可执行的软件软件包,其中包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。
容器虚化的是操作系统而不是硬件,容器更加便携和高效
1 | sudo yum install -y yum-utils |
1 | # 镜像编排命令 |
dockerfile常见命令说明
1 | #基础镜像选择alpine 小巧安全流行方便 |
springboot 支持系统环境变量
docker 支持容器环境变量设置
设计原理,不改变基础镜像的情况下,适应不同的环境
1 | 优先级由高到低 |
在改配置文件 vim ~/.pip/pip.conf添加如下内容,没有该文件创建该文件及目录
1 | [global] |
常用命令commands
常见问题issues
1 | #更新安装 |
包管理工具是指类似maven/gradle的管理工具,和maven包管理不同的是,python还要考虑虚拟环境,有了虚拟环境,才能在不同的虚拟环境安装不同版本的包,就相当于一个项目对应一个虚拟环境,一个虚拟环境安装不同的包
pip包管理
virtualenv虚拟环境
pip+virtualenv包依赖管理文件requirements.txt
问题:在pycharm中莫名其妙的找不到已经安装的包(eg:pandas_bokeh)
pipenv包依赖管理文件Pipfile
问题:网上说依赖慢,依赖乱
1 | brew install pipenv |
问题:放弃有各种bug,对PyCharm兼容差,安装依赖经常失败,pycharm不能自动识别poetry
包依赖管理文件pyproject.toml
1 | # mac zsh安装步骤,注意后面用python3安装 |
PyCharm安装插件Poetry
poetry虚拟环境目录~/Library/Caches/pypoetry/virtualenvs
1 | #查看虚拟环境 |
1 | [tool.poetry] |
1 | import pymongo |
1 | #返回为'列标'的那列数据 |
Pandas支持的可视化后端:matplotlib、bokeh、plotly等
老版绘图工具,不支持交互,但是资料较多,支持图表多,pandas的默认绘图后端
1 | import matplotlib.pyplot as plt |
首先安装pip install pandas-bokeh
1 | import matplotlib.pyplot as plt |
hvPlot提供了基于HoloViews和Bokeh的高级绘图API
支持交互,基于Echarts,运行后会生成个html在项目目录,要在浏览器打开就可以看到图标了
1 | import pyecharts.options as opts |
1 | #一定要使用http代理,不能用socke5代理,错误详细信息见常见错误1 |
1 | #dcy1.wmv视频日语(ja-jp)生成中文(zh-cn)字幕 |
1 | ERROR: Could not install packages due to an EnvironmentError: Missing dependencies for SOCKS support. |
解决:原因是安装包不支持socks代理,两种解决方法,一是让它支持,二是采用http代理,这里用第二种方法解决,执行export all_proxy=http://127.0.0.1:58591
1 | return value.encode(encoding or "ascii") |
解决:原因环境变量编码的问题,执行
1 | export LANG=en_US.UTF-8 |
上述还无法解决见https://github.com/BingLingGroup/autosub/issues/127上面解决是在dev分支2020.07.02提交的当时还没修复到alpha分支
1 | #升级dev分支 |
视频转换
1 | #查看视频信息 |
1 | #基础格式 |
1 | #mac |
可以发现logback在spring-boot-starter依赖里面,所以引入了springboot都自带logback
graph LR logback-->spring-boot-starter-logging-->spring-boot-starter
1 | +--- org.springframework.boot:spring-boot-starter -> 2.2.2.RELEASE |
logback-spring.xml介绍1 | <?xml version="1.0" encoding="UTF-8"?> |
application.properties
1 | spring.application.name=testDemo |
因为日志里面含有大量的base64的图片数据,各处都有打印,导致日志过大,日志不美观排查问题不方便
spring自带,所以不需要添加任何依赖
在resources目录添加
1 | #创建message.properties文件并添加 |
spring配置文件添加配置spring.messages.basename=message其中message为国际化的文件,就是上面添加的文件名,如果有文件夹包裹,从resources带上文件相对路径
添加测试类,关键类MessageSource是读取国际化文件
1 | import org.slf4j.Logger; |
测试,使用postman请求该接口,然后请求headers里面添加Accept-Language:ch或Accept-Language:en就能返回对应的翻译了
出现No message found under code 'user.name' for locale 'ch'.错误
解决:在配置文件application.properties配置#spring.messages.basename=<你的国际化文件>,或者检查国际化文件是否存在和配置的文件是否匹配
客户需要git自动化部署,但是又不能提供源码,所以打包成jar包,然后在套壳,依赖jar进行部署
graph LR A(springboot源项目)-->G(打包发布成jar,含main class)--做为依赖-->L[springboot套壳项目]-->E[自动部署]
删除源项目pom.xml里面的<build></build>标签及里面的内容
如果项目里面有公共项目本地依赖(common等),都要上传,因为打包jar不会打包依赖到jar包里面,上传需要在pom.xml里面添加,然后执行mave lifecycle 里面的 deploy
1 | <distributionManagement> |
注意:
上传报错的话,检查依赖包是否设置<version>0.0.1-SNAPSHOT</version>需要改成<version>0.0.1</version>因为SNAPSHOT上传需要特殊权限
上传没有权限,需要添加nexus中仓库的角色权限nx-repository-view-*-*-edit
检查maven的设置文件setting.xml
1 | <servers> |
如果是多项目结构,外面的父项目框架,不需要deploy,在pom.xml添加下面这个设置
1 | <properties> |
新建个maven空项目,其中pom.xml如下
1 | <?xml version="1.0" encoding="UTF-8"?> |
在壳项目pom.xml添加如下配置
1 | ....... |
把maven本地库里面的原项目的依赖放到壳项目的lib目录里面
1 | ├── README.md |
更新时将jar更新到lib目录时,如果只更新了jar,需要注意清除maven本地库(lib 加载到 maven本地库,本地库在打包进jar),否则就更新lib里面的其他文件,这样就能识别出来lib发生了更新
graph LR a[lib]-->b[maven本地库]-->c[jar]
改造壳项目pom.xml,修改依赖为本地依赖
1 | <dependencies> |
把原项目jar包放到项目src目录
改造壳项目pom.xml,修改打包参数,不修改,不会把lib打包进jar包
1 | <plugin> |