文档
- 快速开始
- Knife4j 4.0 迭代计划
- 如何贡献代码
- 序章
- 社区
- 增强特性
- 3.1 增强模式
- 3.2 i18n 国际化
- 3.3 接口添加作者
- 3.4 自定义文档
- 3.5 访问权限控制
- 3.6 接口排序
- 3.7 分组排序
- 3.8 请求参数缓存
- 3.9 动态请求参数
- 3.10 导出离线文档
- 3.11 过滤请求参数
- 3.12 包含请求参数
- 3.13 搜索API接口
- 3.14 清除缓存
- 3.15 动态请求参数添加文档注释
- 3.16 动态响应参数添加文档注释
- 3.17 自定义Host
- 3.18 afterScript
- 3.19 OAuth2
- 3.20 导出 Postman
- 3.21 全局参数
- 3.22 自定义 Swagger Models 名称
- 3.23 自定义主页内容
- 3.24 自定义 Footer
- 3.25 JSR303
- 3.26 禁用调试
- 3.27 禁用搜索框
- 3.28 禁用 OpenApi 结构显示
- 3.29 版本控制
- 生态中间件
- 升级
中间件
- 中间件介绍
- Aggregation 微服务聚合中间件
- Desktop 独立渲染组件
OAS 简介
- OAS 简介
- OpenAPI 规范
- Java 注解
实战指南
- 示例代码
- Spring 单体架构
- Spring 微服务架构
- OAuth 2.0
- 微服务聚合实战
- ASP.NET Core
- Springfox 源码系列
- Springfox 源码系列
- springfox 源码分析(一) 程序入口
- springfox 源码分析(二) 初探 mapstruct
- springfox 源码分析(三) 初探 Spring Plugin 插件系统
- springfox 源码分析(四) 配置类初始化
- springfox 源码分析(五) Web 配置类 Plugin 插件的使用
- springfox 源码分析(六) Web 配置类扫描包作用探索
- springfox 源码分析(七) 文档初始化
- springfox 源码分析(八) 遍历接口获取 Model 对象
- springfox 源码分析(九) 文档初始化分组
- springfox 源码分析(十) 遍历接口获取 Model 对象
- springfox 源码分析(十一) 自定义添加 Swagger Models 功能实现
- springfox 源码分析(十二) 遍历接口获取 ApiDescription 集合
- springfox 源码分析(十三) 自定义扩展实现接口的排序
- springfox 源码分析(十四) 归档得到 ApiListing 接口集合
- springfox 源码分析(十五) 归档得到 Documentation 文档对象
- springfox 源码分析(十六) 分组接口 swagger-resouces
- springfox 源码分析(十七) Swagger2 接口文档示例接口 api-docs
- springfox 源码分析(十八) 自定义扩展实现分组的排序
- springfox 源码分析(十九) guava 库学习
- springfox 源码分析(二十一) 忽略参数 Class 类型
4.5 基于 Knife4j 的 Docker 镜像快速聚合 OpenAPI
在前面的实战文章中,更多的是面向Java开发者,通过Spring Boot框架,快速聚合OpenAPI文档。
那么其他语言能否也能这么方便的使用Knife4j呢?
答案是肯定的,Knife4j为了让其他语言非常方便的使用Knife4j来渲染聚合OpenAPI文档,在DockerHub中推送了Knife4j的镜像,
镜像地址:https://hub.docker.com/repository/docker/xiaoymin/knife4j
如果你的本机或者服务器安装了Docker,那么利用Knife4j的镜像来聚合OpenAPI将会非常方便
首先需要将镜像从DockerHub拉到本地,命令如下:
docker pull xiaoymin/knife4j:latest
如果pull速度比较慢的话,开发者可以配置镜像源
/etc/docker/daemon.json{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://3laho3y3.mirror.aliyuncs.com",
"https://mirror.ccs.tencentyun.com"
]
}
镜像下载到本地机器后,下面将详细介绍如何通过Knife4j的镜像实现上面文章介绍的4中不同方式的聚合OpenAPI文档
镜像说明
Knife4j的镜像是一个基于Spring Boot框架开发的Web项目,对外默认端口 8888
源码地址:https://gitee.com/xiaoym/knife4j/tree/v2/knife4j-aggregation-docker
:::details Dockerfile文件
FROM openjdk:8-jdk-alpine
LABEL version="2.0"
LABEL released-date=2020/11/25
LABEL author="xiaoymin@foxmail.com"
LABEL description="Knife4jAggregation OpenAPI,RunAnyWhere!!!"
MAINTAINER xiaoymin
RUN mkdir /app
# Disk模式数据挂载目录
RUN mkdir /app/data
ADD src/main/resources/application.yml /app/app.yml
ADD target/knife4j-aggregation-docker-1.0.jar /app/app.jar
ENTRYPOINT ["java","-jar","-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=Asia/Shanghai","/app/app.jar","--spring.config.location=/app/app.yml"]
#EXPOSE 8888:
:::
从Knife4j的Dockerfile文件中,我们可以看到为Knife4j的应用创建了一个 /app
目录和 /app/data
目录,用来存放jar文件和yml配置文件,该目录是通过外部文件与Docker容器进行挂载关联的关键。
Disk模式
Disk模式主要是从本地聚合OpenAPI规范,那么如何利用Knife4j的容器进行渲染呢?这里就要用到我们刚刚上面说的文件挂载
第一步:在服务器(宿主机)上创建相关目录,例如: /home/openapi
我们在该目录下主要存放两种类型的文件目录,1种是Knife4j镜像文件需要的yml配置文件,第二种是存放OpenAPI的规范JSON,目录结构如下:
[root@izbpc3 openapi]# pwd
/home/openapi
[root@izbpc3 openapi]# ll
total 8
-rw-r--r-- 1 root root 241 Nov 25 19:42 app.yml
drwxr-xr-x 2 root root 4096 Nov 25 19:41 data
[root@izbpc3 openapi]# cd data
[root@izbpc3 data]# ll
total 256
-rw-r--r-- 1 root root 21448 Nov 25 19:41 open-api.json
-rw-r--r-- 1 root root 237303 Nov 25 19:41 openapi.json
Disk模式我们主要需要做的是修改app.yml配置文件中的配置,指定Knife4j的镜像从本地加载指定的openapi.json,通过界面显示
app.yml
配置修改如下:
server:
port: 8888
knife4j:
enableAggregation: true
disk:
enable: true
routes:
- name: 用户AAAAAAAAAAA
location: /app/data/open-api.json
- name: 用户BBBBBBBBBBBB
location: /app/data/openapi.json
这里需要注意的是
1、location我们使用的是容器的目录 /app
,我们最终创建容器的时候会将宿主机的目录( /home/openapi/data
)挂载给容器,达到文件共享的目的
2、在 app.yml
配置中指定的端口是容器的端口,Knife4j默认端口8888,如果开发者使用该配置并且修改了端口,那么需要在端口映射的时候也相应的进行修改
第二步:启动Knife4j容器查看效果
通过Docker命令创建容器,命令如下:
[root@izbx23 app]# docker run -itd --name myopenapi -p 18002:8888 -v /home/openapi/app.yml:/app/app.yml -v /home/openapi/data:/app/data xiaoymin/knife4j
3f0ed4cde46dd8a625e0338bc8cb1688059c7169447bda5681a34d93e2ba7c3e
[root@izbx23 app]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e678bccd4d66 xiaoymin/knife4j "java -jar -Djava.se…" 3 seconds ago Up 2 seconds 0.0.0.0:18002->8888/tcp myopenapi
- --name命令是指定一个别名
- -p代表端口映射 18002是宿主机端口号,8888是容器的端口号,
- -v参数则是将本地目录挂载和容器共享,此处主要挂载两个文件,一个是app.yml配置文件,一个是openapi.json文件
此时,我们通过端口号进行访问: http://localhost:18002/doc.html
效果图如下:
容器创建成功后,我们可以访问容器的文件系统,通过命令如下:
[root@izbx23 conf.d]# docker exec -it myopenapi sh
/ # ls
app bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var
/ # cd app
/app # ls
app.jar app.yml data
/app # cd data
/app/data # ls
open-api.json openapi.json
/app/data #
我们在容器中的文件系统中 /app/data
目录中,其实可以看到,这个目录中的文件和我们通过创建容器时-v参数挂载的目录文件是一致的。
Cloud模式
Cloud模式就相对简单多了,我们只需要修改当前的app.yml配置文件即可,然后创建容器时进行覆盖即可
任意取目前Knife4j的线上demo两个OpenAPI规范接口地址:
- http://knife4j.xiaominfo.com/v2/api-docs?group=2.X版本
- http://knife4j.xiaominfo.com/v2/api-docs?group=3.默认接口
配置yml配置文件,如下:
server:
port: 8888
knife4j:
enableAggregation: true
cloud:
enable: true
routes:
- name: cloud1
uri: knife4j.xiaominfo.com
location: /v2/api-docs?group=2.X版本
- name: cloud2
uri: knife4j.xiaominfo.com
location: /v2/api-docs?group=3.默认接口
通过Docker命令创建容器,命令如下:
[root@izbx23 openapi]# docker run -itd --name cloudapi -p 18002:8888 -v /home/openapi/app.yml:/app/app.yml xiaoymin/knife4j
6b81844e0c605704eef3ffcb207e090a1139a9fbc8dcf0a43efdcb60f41d327c
[root@izbx23 openapi]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b81844e0c60 xiaoymin/knife4j "java -jar -Djava.se…" 4 seconds ago Up 3 seconds 0.0.0.0:18002->8888/tcp cloudapi
- --name命令是指定一个别名(
cloudapi
) - -p代表端口映射 18002是宿主机端口号,8888是容器的端口号,
- -v参数则是将本地目录挂载和容器共享,此处只需要覆盖app.yml配置文件即可,因为我们的OpenAPI数据来源于HTTP接口
此时,我们通过端口号进行访问: http://localhost:18002/doc.html
效果图如下:
注册中心(Eureka && Nacos)
至于从注册中心(Eureka && Nacos)进行OpenAPI的聚合和Cloud模式下一样,开发者只需要修改app.yml配置文件,然后通过-v参数进行挂载覆盖文件即可。更多的配置需要参考聚合组件的文档参数详细介绍文档
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论