Docker-compose安装部署 Yapi
一:docker安装方式:
1、启动 MongoDB
docker run -d --name mongo-yapi mongo
2、获取 Yapi 镜像,版本信息可在 [阿里云镜像仓库]
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
3、初始化 Yapi 数据库索引及管理员账号
docker run -it --rm \
--link mongo-yapi:mongo \
--entrypoint npm \
--workdir /api/vendors \
registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
run install-server
自定义配置文件挂载到目录
/api/config.json
,官方自定义配置文件 -> [传送门]
4、启动 Yapi 服务
docker run -d \
--name yapi \
--link mongo-yapi:mongo \
--workdir /api/vendors \
-p 3000:3000 \
registry.cn-hangzhou.aliyuncs.com/anoy/yapi \
server/app.js
▶ 使用 Yapi
访问 http://localhost:3000 登录账号 admin@admin.com,密码 ymfe.org
链接:https://pan.baidu.com/s/1dzXdHYABkNNNGuUu16YadQ 密码:utf1
遇到的问题
WARNING: IPv4 forwarding is disabled. Networking will not work
$ vim /etc/sysctl.conf
# 添加如下内容
net.ipv4.ip_forward=1
# 重启网络
systemctl restart network
# 查看网络 输出为1说明网络正常
sysctl net.ipv4.ip_forward
二:docker-compose的安装方式
1.修改docker-compose.yml
文件里面相关参数
环境变量 | 默认值 | 建议 |
---|---|---|
VERSION | 1.5.6 | 可以修改成yapi已发布的版本 |
HOME | /home | 可修改 |
PORT | 3000 | 可修改 |
ADMIN_EMAIL | me@qq.com | 建议修改 |
DB_SERVER | mongo(127.0.0.1) | 不建议修改 |
DB_NAME | yapi | 不建议修改 |
DB_PORT | 27017 | 不建议修改 |
VENDORS | ${HOME}/vendors | 不建议修改 |
version: '2.1'
services:
yapi:
image: mrjin/yapi:latest
# build: ./
container_name: yapi
environment:
- VERSION=1.5.6
- LOG_PATH=/tmp/yapi.log
- HOME=/home
- PORT=3000
- ADMIN_EMAIL=me@qq.com
- DB_SERVER=mongo
- DB_NAME=yapi
- DB_PORT=27017
# restart: always
ports:
- 3000:3000
volumes:
- ~/data/yapi/log/yapi.log:/home/vendors/log # log dir
depends_on:
- mongo
entrypoint: "bash /wait-for-it.sh mongo:27017 -- entrypoint.sh"
networks:
- back-net
mongo:
image: mongo
container_name: mongo
# restart: always
ports:
- 27017:27017
volumes:
- ~/data/yapi/mongodb:/data/db #db dir
networks:
- back-net
networks:
back-net:
external: true
2.创建网络
# docker network create back-net
3.启动服务:
# docker-compose up -d
4.默认密码是:ymfe.org
,安装成功后进入后台修改
三:idea集成
在项目中的.idea文件中,找到misc.xml文件
一、单模块配置
- 在src/main/resources下面新建yapi.xml文件,内容如下:
<project version="4">
<component name="yapi">
<option name="projectToken">d22e8a1c3f586f0f423</option>
<option name="projectId">93</option>
<option name="yapiUrl">http://yapi.source3g.com</option>
<option name="projectType">api</option>
<option name="returnClass">com.source3g.common.Result</option>
<!--<option name="attachUploadUrl">http://localhost/fileupload</option>-->
</component>
</project>
二、多模块配置
<component name="yapi">
<option name="moduleList">zendai-finance-b-rest,zendai-finance-e-rest</option>
</component>
<component name="zendai-finance-b-rest">
<option name="zendai-finance-b-rest.projectToken">44d8230b1828a086a3f78451be2946116992ae90c7722b968e05022efad7ecd2</option>
<option name="zendai-finance-b-rest.projectId">53</option>
<option name="zendai-finance-b-rest.yapiUrl">http://10.51.211.109:3000</option>
<option name="zendai-finance-b-rest.projectType">api</option>
</component>
<component name="zendai-finance-e-rest">
<option name="zendai-finance-e-rest.projectToken">64c4913f333b8406f907ea580af1b0d8184e865861e8179f8314d522d4039728</option>
<option name="zendai-finance-e-rest.projectId">47</option>
<option name="zendai-finance-e-rest.yapiUrl">http://10.51.211.109:3000</option>
<option name="zendai-finance-e-rest.projectType">api</option>
</component>
三、参数获得
-
token获取方式: 打开yapi ->具体项目->设置->token 配置
-
项目id获取方式:打开yapi点击项目,查看url 中project 后面的数字为项目id,如下就是72
http://127.0.0.1:3000/project/72/interface/api
-
yapiUrl 获取方式:部署的yapi 地址
-
projectType 填写方式: 根据你要上传的接口类型决定,如果为dubbo 接口就填dubbo ,如果是api 接口就填api
-
returnClass 返回包装类:使用拦截器的项目,可指定包装类的位置。没有使用拦截器可不填
-
attachUploadUrl 填写方式:上传java 类zip 的url,可不填,如果要用请实现http://localhost/fileupload 接口 接口请求参数为 file 文件类型
-
moduleList 获取方式:模块名称,用 “,” 分割 ,不支持父节点和子模块名称一样的情况
上传
- 如果是dubbo 项目,选中dubbo interface 文件中的一个方法(要选中方法名称),右击YapiUpload(alt+u 快捷键)
- 如果是api 项目,选中controller 类中的方法名称或类名(要**选中方法名称,或类名,选中类名为当前类所有接口都上传),右击YapiUpload(alt+u快捷键)
四、支持的注解
重要的事情说三遍:
良好的java doc 注释能生成更好的文档
良好的java doc 注释能生成更好的文档
良好的java doc 注释能生成更好的文档
1:插件如何生成属性备注 ,通过获得字段备注中的注释
/**
* 年龄
*/
private Integer age;
2:插件如何生成接口名称,通过接口上的注释,或者引用上的 注释
/**
* 添加或更新课程数据
*
* @param courseOpt
* @return {@link CommonRes}
*/
@RequestMapping(value = "/test", method = RequestMethod.POST)
public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){
}
/**
* @description: 添加或更新课程数据 (@Description 也可)
* @param: [CourseParam]
* @return: Course
* @date: 2018/3/15
*/
@RequestMapping(value = "/test", method = RequestMethod.POST)
public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){
}
@RequestMapping(value = ICourse.ADD_OR_UPDATA_COURSE, method = RequestMethod.POST)
public Course addOrUpdateCourse(@RequestBody CourseParam courseParam){
}
public interface ICourse{
/**
* @description: 添加或更新课程数据 (@Description 也可)
* @param: [CourseParam]
*/
ADD_OR_UPDATA_COURSE="test";
}
3:@link 参数定义展示在字段备注中
第一种@link 方式
/**
* 状态 {@link com.xxx.constant.StatusConstant}
*/
private Integer status;
第二种@link 方式
import com.xxx.constant.StatusConstant;
/**
* 状态 {@link StatusConstant}
*/
private Integer status;
不支持方式
import com.xxx.constant.*;
/**
* 状态 {@link StatusConstant}
*/
private Integer status;
4:实现自定义分类
通过在方法或类注释中加 @menu 注释实现,优先级 方法>类>package 下面或者上面的@menu,如果没有自定义 默认为tool-tmp,支持多级分类(多级分类只能是crazy 分支的yapi)
package com.project.demo;
/**
* @menu 这里填写类分类名称
*/
import com......
/**
*@description: 用户控制器
*@menu 这里填写类分类名称
*/
@RestController
public class UserController {
/**
* @description: 新增用户
* @param: [User]
* @menu: 这里填写方法级别分类名称(比如 多级目录/menu/menu1/menu2)
* @return: Response<UserDTO>
* @date: 2018/3/15
*/
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public Response<UserDTO> addUser(@RequestBody User user){
}
}
5:支持注解
String RequestMapping="org.springframework.web.bind.annotation.RequestMapping";
String GetMapping="org.springframework.web.bind.annotation.GetMapping";
String PostMapping="org.springframework.web.bind.annotation.PostMapping";
String PutMapping="org.springframework.web.bind.annotation.PutMapping";
String DeleteMapping="org.springframework.web.bind.annotation.PutMapping.DeleteMapping";
String PatchMapping="org.springframework.web.bind.annotation.PutMapping.PatchMapping";
String RequestBody="org.springframework.web.bind.annotation.RequestBody";
String RequestParam="org.springframework.web.bind.annotation.RequestParam";
String RequestHeader="org.springframework.web.bind.annotation.RequestHeader";
String RequestAttribute="org.springframework.web.bind.annotation.RequestAttribute";
String PathVariable="org.springframework.web.bind.annotation.PathVariable";
String NotNull="javax.validation.constraints.NotNull";
String NotEmpty="javax.validation.constraints.NotEmpty";
支持Request Param 注解
生成的 uid 和bid 备注为 用户id(Integer),baby id(Integer) 如果没有备注,则只有(Integer)
/**
* 测试RequestHeader desc 规范的多个
* @param uid 用户id
* @param bid baby id
* @param request
* @param response
*/
@RequestMapping(value = "/testRequestDesc4")
public void testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){
}
支持@status注解
支持已发布(done),设计中(design),开发中(undone),已提测(testing),已过时(deprecated),暂停开发(stoping),支持中英文 (crazy 分支),新增接口默认 开发中,更新时如果没有写status情况下默认使用当前状态
/**
* 测试RequestHeader desc 规范的多个
* @param uid 用户id
* @status 开发中 (或者 undone)
* @param request
* @param response
*/
@RequestMapping(value = "/testRequestDesc4")
public void testRequestDesc4(@RequestHeader(name = "uid")Integer uid, @RequestParam(name = "bid")Integer bid, HttpServletRequest request, HttpServletResponse response){
}