使用 Docker 部署 YAPI
1、运行 MongoDB
# 创建存储卷
docker volume create mongo-data
# 启动 MongoDB
docker run -d \
--name mongo-yapi \
-v mongo-data:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=anoyi \
-e MONGO_INITDB_ROOT_PASSWORD=anoyi.com \
mongo
2、获取 YAPI 镜像,其他版本:阿里云镜像仓库
docker pull registry.cn-hangzhou.aliyuncs.com/anoyi/yapi
3、自定义配置文件
config.json
{
"port": "3000",
"adminAccount": "admin@anoyi.com",
"timeout":120000,
"db": {
"servername": "mongo",
"DATABASE": "yapi",
"port": 27017,
"user": "anoyi",
"pass": "anoyi.com",
"authSource": "admin"
}
}
4、初始化 YAPI 数据库索引及管理员账号
docker run -it --rm \
--link mongo-yapi:mongo \
--entrypoint npm \
--workdir /yapi/vendors \
-v $PWD/config.json:/yapi/config.json \
registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
run install-server
5、启动 Yapi 服务
docker run -d \
--name yapi \
--link mongo-yapi:mongo \
--workdir /yapi/vendors \
-p 3000:3000 \
-v $PWD/config.json:/yapi/config.json \
registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
server/app.js
使用 YAPI
访问: http://localhost:3000
登录账号:admin@anoyi.com
密码:ymfe.org
手动构建 YAPI 镜像
1、编辑 Dockerfile
FROM node:12-alpine as builder
WORKDIR /yapi
RUN apk add --no-cache wget python make
ENV VERSION=1.9.2
RUN wget https://github.com/YMFE/yapi/archive/v${VERSION}.zip
RUN unzip v${VERSION}.zip && mv yapi-${VERSION} vendors
RUN cd /yapi/vendors && cp config_example.json ../config.json && npm install --production --registry https://registry.npm.taobao.org
FROM node:12-alpine
MAINTAINER 545544032@qq.com
ENV TZ="Asia/Shanghai"
WORKDIR /yapi/vendors
COPY --from=builder /yapi/vendors /yapi/vendors
EXPOSE 3000
ENTRYPOINT ["node"]
注意将 Dockerfile
中的 VERSION
值修改为你需要构建的 YAPI 版本。
2、构建镜像
docker build -t yapi .
YAPI 升级
# 1、停止并删除旧版容器
docker rm -f yapi
# 2、获取最新镜像
docker pull registry.cn-hangzhou.aliyuncs.com/anoyi/yapi
# 3、启动新容器
docker run -d \
--name yapi \
--link mongo-yapi:mongo \
--workdir /yapi \
-p 3000:3000 \
-v $PWD/config.json:/config.json \
registry.cn-hangzhou.aliyuncs.com/anoyi/yapi \
server/app.js
制作本地的yapi docker镜像, docker-compose一键维护和部署.
YApi: Releases · YMFE/yapi · GitHub
制作本地的yapi docker镜像, docker-compose一键维护和部署.
- 初始化db, 开启自定义配置
git clone https://github.com/Ryan-Miao/docker-yapi.git
cd docker-yapi
docker-compose up
打开 localhost:9090
- 默认部署路径为
/my-yapi
(需要修改docker-compose.yml才可以更改) - 修改管理员邮箱
ryan.miao@demo.com
(随意, 修改为自己的邮箱) - 修改数据库地址为
mongo
或者修改为自己的mongo实例 (docker-compose配置的mongo服务名称叫mongo) - 打开数据库认证
- 输入数据库用户名:
yapi
(mongo配置的用户名, 见mongo-conf/init-mongo.js) - 输入密码:
yapi123456
(mongo配置的密码, 见mongo-conf/init-mongo.js)
docker-compose.yml文件内容
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo:4
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin123456
MONGO_INITDB_DATABASE: yapi
volumes:
- ./mongo-conf:/docker-entrypoint-initdb.d
- ./mongo/etc:/etc/mongo
- ./mongo/data/db:/data/db
ports:
- 27017:27017
healthcheck:
test: ["CMD", "netstat -anp | grep 27017"]
interval: 2m
timeout: 10s
retries: 3
yapi:
build:
context: ./
dockerfile: Dockerfile
image: yapi
# 第一次启动使用
command: "yapi server"
# 之后使用下面的命令
# command: "node /my-yapi/vendors/server/app.js"
volumes:
- ./my-yapi:/my-yapi
ports:
- 9090:9090
- 3000:3000
depends_on:
- mongo
init-mongo.js文件内容
db.createUser({ user: 'admin', pwd: 'admin123456', roles: [ { role: "root", db: "admin" } ] });
db.auth("admin", "admin123456");
db.createUser({
user: 'yapi',
pwd: 'yapi123456',
roles: [
{ role: "dbAdmin", db: "yapi" },
{ role: "readWrite", db: "yapi" }
]
});
点击开始部署.
- 部署完毕后, 修改docker-compose.yml 启用
yapi:
build:
context: ./
dockerfile: Dockerfile
image: yapi
# 第一次启动使用,第一次启动要把这个注释开起来
command: "yapi server"
# 之后使用下面的命令,把上面的command语句行注释,把下面的注释开启
#command: "node /my-yapi/vendors/server/app.js"
重启服务:
docker-compose up
访问 localhost:3000
- 输入用户名ryan.miao@demo.com(自己输入的管理员邮箱)
- 输入密码ymfe.org(默认的初始化密码, 之后可以修改)
然后可以导入一个swagger的接口数据试试:
前台启动确认没问题后, 直接转为 后台启动
docker-compose stop或者contrl+C
docker-compose up -d
数据备份
所有数据都在mongo中, 理论上建议使用自己搭建的mongo实例, 这里docker的mongo也可以使用, 只要备份本mongo数据即可.
可以使用mongodb的备份方式, 也可以直接备份mongo/data.
版本升级
可以看出, 只要重新找个机器部署一遍, 然后导入mongo数据即可.
一些配置
部署路径
容器采用的node:12-alpine
这个镜像, yapi部署目录默认为my-yapi
. 这里已经映射到本地磁盘, 也可以自己挂载想要的数据盘.
在docker-compose中配置了, 本地目录映射到容器目录my-yapi
volumes:
- ./my-yapi:/my-yapi
Mongo配置
本方案直接使用docker-compose的mongo. 定义了初始化脚本init-mongo.js. 修改即可修改账号和密码.
插件等配置
已经把yapi部署文件给映射到磁盘了, 该怎么安装就怎么安装.
注意yapi目前处于无人维护状态,源码有一些问题,直接下载安装插件可能失败,具体见 API可视化管理平台YApi - Ryan.Miao - 博客园
.
├── doc
│ ├── init-2.jpg
│ └── init.jpg
├── docker-compose.yml
├── Dockerfile
├── mongo
│ ├── data
│ │ └── db
│ └── etc
├── mongo-conf
│ └── init-mongo.js
├── my-yapi
│ ├── config.json
│ ├── init.lock
│ ├── log
│ │ └── 2020-6.log
│ └── vendors
│ ├── aa.js
│ ├── CHANGELOG.md
│ ├── client
│ ├── common
│ ├── config_example.json
│ ├── exts
│ ├── LICENSE
│ ├── node_modules
│ ├── nodemon.json
│ ├── npm-publish.js
│ ├── package.json
│ ├── package-lock.json
│ ├── plugin.json
│ ├── README.md
│ ├── server
│ ├── static
│ ├── webpack.alias.js
│ ├── yapi-base-flow.jpg
│ └── ykit.config.js
├── readme.md
└── repositories
一键部署YApi
注意:本仓库目前只支持安装,暂不支持升级,请知晓。如需升级请备份mongoDB内的数据。
默认密码是:ymfe.org
,安装成功后进入后台修改
可修改变量
环境变量 | 默认值 | 建议 |
---|---|---|
VERSION | 1.10.2 | 强烈建议升级 |
HOME | /home | 可修改 |
PORT | 3000 | 可修改 |
ADMIN_EMAIL | test@test.com | 建议修改 |
DB_SERVER | mongo(127.0.0.1) | 不建议修改 |
DB_NAME | yapi | 不建议修改 |
DB_PORT | 27017 | 不建议修改 |
VENDORS | ${HOME}/vendors | 不建议修改 |
获取本镜像
docker pull mrjin/yapi:latest
docker-compose 部署
version: '2.1'
services:
yapi:
image: mrjin/yapi:latest
# build: ./
container_name: yapi
environment:
- VERSION=1.10.2
- LOG_PATH=/tmp/yapi.log
- HOME=/home
- PORT=3000
- ADMIN_EMAIL=test@test.com
- DB_SERVER=mongo
- DB_NAME=yapi
- DB_PORT=27017
# restart: always
ports:
- 127.0.0.1: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:
- 127.0.0.1:27017:27017
volumes:
- ~/data/yapi/mongodb:/data/db #db dir
networks:
- back-net
networks:
back-net:
external: true
Nginx 配置
server {
listen 80;
server_name your.domain;
keepalive_timeout 70;
location / {
proxy_pass http://yapi:3000;
}
location ~ /\. {
deny all;
}
}
启动方法
-
修改
docker-compose.yml
文件里面相关参数 -
创建network:
docker network create back-net
-
启动服务:
docker-compose up -d
docker-YApi
要求
你得确保在你的设备上安装了不是太老版本的 Docker 和 Docker Compose。
安装
首先,克隆本项目:
git clone https://github.com/fjc0k/docker-YApi.git # 无法访问 github 的可使用国内镜像: git clone https://gitee.com/fjc0k/docker-YApi.git
接下来,修改 docker-compose.yml
中 yapi-web
下的环境变量 YAPI_ADMIN_ACCOUNT
为你的管理员邮箱,YAPI_ADMIN_PASSWORD
为你的管理员密码。
最后,执行 docker-compose up -d
启动服务。
然后,通过 http://localhost:40001
即可访问 YApi
。
如何配置
为了减少二次配置,docker-YApi
新增了 adminPassword
选项以设置管理员密码。
通过 config.json 或者 config.js 配置(不推荐)
config.json
是 YApi 官方支持的配置文件,config.js
是 docker-YApi
扩展支持的配置文件,其实就是将 JSON 数据写成了更简洁的 JavaScript 对象。
你可通过将外部的 config.json
或 config.js
配置文件映射进容器内部来使用它们:
./config.json:/yapi/config.json ./config.js:/yapi/config.js
通过环境变量配置(推荐)
通过环境变量配置的选项会覆盖通过 config.json
或者 config.js
配置的选项。
基础配置
环境变量名称 | 类型 | 说明 | 示例 |
---|---|---|---|
YAPI_ADMIN_ACCOUNT | string | 管理员账号(邮箱) | admin@foo.bar |
YAPI_ADMIN_PASSWORD | string | 管理员密码 | adm1n |
YAPI_CLOSE_REGISTER | boolean | 是否关闭注册,由于 docker-YApi 已内置相关插件,你可在关闭注册后在后台手动添加用户 | true |
YAPI_NPM_REGISTRY | string | npm 源,目前仅在安装插件时使用,默认官方源,国内可以设为淘宝源加速 | https://registry.npm.taobao.org |
数据库配置
环境变量名称 | 类型 | 说明 | 示例 |
---|---|---|---|
YAPI_DB_SERVERNAME | string | MongoDB 服务地址 | yapi-mongo |
YAPI_DB_PORT | number | MongoDB 服务端口 | 27017 |
YAPI_DB_DATABASE | string | 使用的 MongoDB 数据库 | yapi |
YAPI_DB_USER | string | 登录 MongoDB 服务的用户名 | root |
YAPI_DB_PASS | string | 登录 MongoDB 服务的用户密码 | r00t |
YAPI_DB_AUTH_SOURCE | string | MongoDB 身份认证所用库 | admin |
YAPI_DB_CONNECT_STRING | string | 使用 MongoDB 集群时配置 | mongodb://127.0.0.100:8418,127.0.0.101:8418/yapidb?slaveOk=true |
YAPI_DB_OPTIONS | json | Mongoose 连接 MongoDB 服务时的额外选项,一般不用设置。请参考: Mongoose.prototype.connect() | {} |
邮件配置
环境变量名称 | 类型 | 说明 | 示例 |
---|---|---|---|
YAPI_MAIL_ENABLE | boolean | 是否启用 | true |
YAPI_MAIL_HOST | string | 邮件服务地址 | smtp.163.com |
YAPI_MAIL_PORT | number | 邮件服务端口 | 465 |
YAPI_MAIL_FROM | string | 发送人邮箱 | foo@163.com |
YAPI_MAIL_AUTH_USER | string | 登录邮件服务的用户名 | bar@163.com |
YAPI_MAIL_AUTH_PASS | string | 登录邮件服务的用户密码 | f00bar |
YAPI_MAIL_OPTIONS | json | 传递给 Nodemailer 的额外选项,一般不用设置。请参考:Nodemailer > SMTP transport | {"tls":{"rejectUnauthorized":false}} |
LDAP 登录配置
点击查看 YApi 仓库下 LDAP 相关的 issues 👉
环境变量名称 | 类型 | 说明 | 示例 |
---|---|---|---|
YAPI_LDAP_LOGIN_ENABLE | boolean | 是否启用 | true |
YAPI_LDAP_LOGIN_SERVER | string | LDAP 服务地址 | ldap://ldap.foo.bar |
YAPI_LDAP_LOGIN_BASE_DN | string | 登录 LDAP 服务的用户名 | cn=admin,dc=foo,dc=bar |
YAPI_LDAP_LOGIN_BIND_PASSWORD | string | 登录 LDAP 服务的用户密码 | f00bar |
YAPI_LDAP_LOGIN_SEARCH_DN | string | 查询用户数据的路径 | ou=users,dc=foo,dc=bar |
YAPI_LDAP_LOGIN_SEARCH_STANDARD | string | 支持两种值: 1、前端登录账号对应的查询字段,如: mail 、uid 等;2、自定义查询条件,其中 %s 会被前端登录账号替换,如:&(objectClass=user)(cn=%s) | - |
YAPI_LDAP_LOGIN_EMAIL_POSTFIX | string | 登录邮箱后缀 | @163.com |
YAPI_LDAP_LOGIN_EMAIL_KEY | string | LDAP 数据库存储用户邮箱的字段 | |
YAPI_LDAP_LOGIN_USERNAME_KEY | string | LDAP 数据库存储用户名的字段 | name |
插件配置
环境变量名称 | 类型 | 说明 | 示例 |
---|---|---|---|
YAPI_PLUGINS | json | 要使用的插件列表。点击查看开源 YApi 插件列表 → 配置项数据格式: { "name": "插件名称,必须去除前缀 yapi-plugin-", "options": "插件配置,没有配置则不必设置" } 注意: 安装插件会运行 YApi 自带的打包命令,其内存消耗较大,因此,在安装插件时,物理机可用内存最好大于等于 4GB ,否则,易出现内存溢出错误,导致插件安装失败。 | [{"name":"gitlab","options":{}}] |
内置插件
为 YApi 安装插件是一件异常缓慢且易因服务器配置不够而出错的事情,因此 docker-YApi 内置了以下插件,希望能减少点不必要的麻烦:
- yapi-plugin-add-user: 支持管理员直接通过邮箱添加用户。 <作者: @congqiu>
如果你有其他希望内置的插件,欢迎提交 issue。
如何重启
若你修改了配置,务必重启应用才能生效:
docker-compose restart yapi-web
如何升级
若 YApi
有更新,本项目应会尽快跟进,之后,你可使用以下命令升级:
docker-compose pull yapi-web \ && docker-compose down \ && docker-compose up -d
升级不会对原有数据造成任何影响!
查看日志
如果出现意外情况,你可通过以下命令查看运行日志:
docker-compose logs yapi-web
如何迁移
直接打包整个目录去新的服务器即可。
play 版说明
本项目额外提供了一个开箱即用的 play 版本(内置了数据库),你可通过它对 YApi 作一个大概的了解:
# 纯粹的 docker run --rm -p 40001:3000 jayfong/yapi:play # 带插件的 docker run --rm -p 40001:3000 -e YAPI_PLUGINS='[{"name":"interface-oauth2-token"}]' jayfong/yapi:play
你可在本地或 Play with Docker 上运行上面的命令,然后打开 http://localhost:40001
体验 YApi。
默认的管理员账号:
admin@docker.yapi
,管理员密码:adm1n
。
YApi 相关资源推荐
-
YApi 二次开发版,进行了很多功能上的增强,原生支持 Docker 安装。
-
为 YApi-X 开发的浏览器跨域与文件上传插件,同时支持 YApi 官方版。
-
根据 YApi 的接口定义生成 TypeScript 的接口类型及其请求函数代码,同时支持生成 React Hooks 代码。