├── .gitignore ├── config.json ├── entrypoint.sh ├── Dockerfile ├── .travis.yml ├── docker-compose.yml ├── travis └── docker-compose.yml ├── LICENSE ├── README.md └── wait-for-it.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "port": "3000", 3 | "adminAccount": "admin@admin.com", 4 | "db": { 5 | "servername": "mongo", 6 | "DATABASE": "yapi", 7 | "port": "27017" 8 | } 9 | } -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | if [ ! -e "init.lock" ] 3 | then 4 | sed -i "s/3000/"${PORT}"/g" ${HOME}/config.json 5 | sed -i "s/admin@admin.com/"${ADMIN_EMAIL}"/g" ${HOME}/config.json 6 | sed -i "s/mongo/"${DB_SERVER}"/g" ${HOME}/config.json 7 | sed -i "s/yapi/"${DB_NAME}"/g" ${HOME}/config.json 8 | sed -i "s/27017/"${DB_PORT}"/g" ${HOME}/config.json 9 | yapi install -v ${VERSION} 10 | touch init.lock 11 | fi 12 | 13 | cd ${HOME} 14 | 15 | node vendors/server/app.js -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:12.22.11-stretch 2 | MAINTAINER mrjin 3 | ENV VERSION 1.10.2 4 | ENV HOME "/home" 5 | ENV PORT 3000 6 | ENV ADMIN_EMAIL "me@jinfeijie.cn" 7 | ENV DB_SERVER "mongo" 8 | ENV DB_NAME "yapi" 9 | ENV DB_PORT 27017 10 | 11 | WORKDIR ${HOME}/ 12 | 13 | COPY entrypoint.sh /bin 14 | COPY config.json ${HOME} 15 | COPY wait-for-it.sh / 16 | 17 | RUN npm config set registry https://registry.npmmirror.com && \ 18 | npm install -g yapi-cli && \ 19 | npm cache clean --force 20 | 21 | EXPOSE ${PORT} 22 | ENTRYPOINT ["entrypoint.sh"] 23 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: trusty 2 | env: 3 | - DOCKER_COMPOSE_VERSION=1.22.0 4 | services: 5 | - docker 6 | before_install: 7 | - sudo rm /usr/local/bin/docker-compose 8 | - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose 9 | - chmod +x docker-compose 10 | - sudo mv docker-compose /usr/local/bin 11 | install: 12 | - docker build -f Dockerfile -t yapi ./ 13 | - docker network create back-net 14 | - cd travis && docker-compose up -d 15 | - docker ps -a 16 | script: 17 | - docker images 18 | - docker ps 19 | - cd .. && bash ./wait-for-it.sh http://127.0.0.1:3000 -- curl http://127.0.0.1:3000 20 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2.1' 2 | services: 3 | yapi: 4 | image: mrjin/yapi:latest 5 | # build: ./ 6 | container_name: yapi 7 | environment: 8 | - VERSION=1.10.2 9 | - HOME=/home 10 | - PORT=3000 11 | - ADMIN_EMAIL=me@jinfeijie.cn 12 | - DB_SERVER=mongo 13 | - DB_NAME=yapi 14 | - DB_PORT=27017 15 | # restart: always 16 | ports: 17 | - 127.0.0.1:3000:3000 18 | volumes: 19 | - ~/data/yapi/log:/home/log # log dir 20 | depends_on: 21 | - mongo 22 | entrypoint: "bash /wait-for-it.sh mongo:27017 -- entrypoint.sh" 23 | networks: 24 | - back-net 25 | mongo: 26 | image: mongo 27 | container_name: mongo 28 | # restart: always 29 | ports: 30 | - 127.0.0.1:27017:27017 31 | volumes: 32 | - ~/data/yapi/mongodb:/data/db #db dir 33 | networks: 34 | - back-net 35 | networks: 36 | back-net: 37 | external: true 38 | -------------------------------------------------------------------------------- /travis/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2.1' 2 | services: 3 | yapi: 4 | image: yapi:latest 5 | # build: ../ 6 | container_name: yapi 7 | environment: 8 | - VERSION=1.10.2 9 | - HOME=/home 10 | - PORT=3000 11 | - ADMIN_EMAIL=me@jinfeijie.cn 12 | - DB_SERVER=mongo 13 | - DB_NAME=yapi 14 | - DB_PORT=27017 15 | # restart: always 16 | ports: 17 | - 127.0.0.1:3000:3000 18 | volumes: 19 | - ~/data/yapi/log:/home/log # log dir 20 | depends_on: 21 | - mongo 22 | entrypoint: "bash /wait-for-it.sh mongo:27017 -- entrypoint.sh" 23 | networks: 24 | - back-net 25 | mongo: 26 | image: mongo 27 | container_name: mongo 28 | # restart: always 29 | ports: 30 | - 127.0.0.1:27017:27017 31 | volumes: 32 | - ~/data/yapi/mongodb:/data/db #db dir 33 | networks: 34 | - back-net 35 | networks: 36 | back-net: 37 | external: true 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 mrjin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Docker for YApi

2 |

一键部署YApi

3 | 4 |

5 | Build Status 6 | 7 | License 8 |

9 | 10 | ## ⚠️注意 11 | ⚠️注意:本仓库目前只支持安装,暂不支持升级,请知晓。如需升级请备份mongoDB内的数据。 12 | 13 | ## 使用 14 | 默认密码是:`ymfe.org`,安装成功后进入后台修改 15 | 16 | ## 可修改变量 17 | | 环境变量 | 默认值 | 建议 | 18 | | ------------- |:-------------:|:-----------:| 19 | | VERSION | 1.10.2 | *强烈建议升级* | 20 | | HOME | /home | 可修改 | 21 | | PORT | 3000 | 可修改 | 22 | | ADMIN_EMAIL | test@test.com | 建议修改 | 23 | | DB_SERVER | mongo(127.0.0.1) | 不建议修改 | 24 | | DB_NAME | yapi | 不建议修改 | 25 | | DB_PORT | 27017 | 不建议修改| 26 | | VENDORS | ${HOME}/vendors | 不建议修改 | 27 | 28 | 29 | ## 获取本镜像 30 | 🚘获取本镜像:`docker pull mrjin/yapi:latest` 31 | 32 | ## docker-compose 部署 33 | ``` 34 | version: '2.1' 35 | services: 36 | yapi: 37 | image: mrjin/yapi:latest 38 | # build: ./ 39 | container_name: yapi 40 | environment: 41 | - VERSION=1.10.2 42 | - LOG_PATH=/tmp/yapi.log 43 | - HOME=/home 44 | - PORT=3000 45 | - ADMIN_EMAIL=test@test.com 46 | - DB_SERVER=mongo 47 | - DB_NAME=yapi 48 | - DB_PORT=27017 49 | # restart: always 50 | ports: 51 | - 127.0.0.1:3000:3000 52 | volumes: 53 | - ~/data/yapi/log/yapi.log:/home/vendors/log # log dir 54 | depends_on: 55 | - mongo 56 | entrypoint: "bash /wait-for-it.sh mongo:27017 -- entrypoint.sh" 57 | networks: 58 | - back-net 59 | mongo: 60 | image: mongo 61 | container_name: mongo 62 | # restart: always 63 | ports: 64 | - 127.0.0.1:27017:27017 65 | volumes: 66 | - ~/data/yapi/mongodb:/data/db #db dir 67 | networks: 68 | - back-net 69 | networks: 70 | back-net: 71 | external: true 72 | ``` 73 | 74 | ## Nginx 配置 75 | ``` 76 | server { 77 | listen 80; 78 | server_name your.domain; 79 | keepalive_timeout 70; 80 | 81 | location / { 82 | proxy_pass http://yapi:3000; 83 | } 84 | location ~ /\. { 85 | deny all; 86 | } 87 | } 88 | ``` 89 | 90 | ## 启动方法 91 | 92 | 1. 修改`docker-compose.yml`文件里面相关参数 93 | 94 | 2. 创建network:`docker network create back-net` 95 | 96 | 3. 启动服务:`docker-compose up -d` 97 | 98 | ✨欢迎 Star && Fork 99 | -------------------------------------------------------------------------------- /wait-for-it.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Use this script to test if a given TCP host/port are available 3 | 4 | WAITFORIT_cmdname=${0##*/} 5 | 6 | echoerr() { if [[ $WAITFORIT_QUIET -ne 1 ]]; then echo "$@" 1>&2; fi } 7 | 8 | usage() 9 | { 10 | cat << USAGE >&2 11 | Usage: 12 | $WAITFORIT_cmdname host:port [-s] [-t timeout] [-- command args] 13 | -h HOST | --host=HOST Host or IP under test 14 | -p PORT | --port=PORT TCP port under test 15 | Alternatively, you specify the host and port as host:port 16 | -s | --strict Only execute subcommand if the test succeeds 17 | -q | --quiet Don't output any status messages 18 | -t TIMEOUT | --timeout=TIMEOUT 19 | Timeout in seconds, zero for no timeout 20 | -- COMMAND ARGS Execute command with args after the test finishes 21 | USAGE 22 | exit 1 23 | } 24 | 25 | wait_for() 26 | { 27 | if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then 28 | echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" 29 | else 30 | echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout" 31 | fi 32 | WAITFORIT_start_ts=$(date +%s) 33 | while : 34 | do 35 | if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then 36 | nc -z $WAITFORIT_HOST $WAITFORIT_PORT 37 | WAITFORIT_result=$? 38 | else 39 | (echo > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1 40 | WAITFORIT_result=$? 41 | fi 42 | if [[ $WAITFORIT_result -eq 0 ]]; then 43 | WAITFORIT_end_ts=$(date +%s) 44 | echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds" 45 | break 46 | fi 47 | sleep 1 48 | done 49 | return $WAITFORIT_result 50 | } 51 | 52 | wait_for_wrapper() 53 | { 54 | # In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692 55 | if [[ $WAITFORIT_QUIET -eq 1 ]]; then 56 | timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & 57 | else 58 | timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT & 59 | fi 60 | WAITFORIT_PID=$! 61 | trap "kill -INT -$WAITFORIT_PID" INT 62 | wait $WAITFORIT_PID 63 | WAITFORIT_RESULT=$? 64 | if [[ $WAITFORIT_RESULT -ne 0 ]]; then 65 | echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT" 66 | fi 67 | return $WAITFORIT_RESULT 68 | } 69 | 70 | # process arguments 71 | while [[ $# -gt 0 ]] 72 | do 73 | case "$1" in 74 | *:* ) 75 | WAITFORIT_hostport=(${1//:/ }) 76 | WAITFORIT_HOST=${WAITFORIT_hostport[0]} 77 | WAITFORIT_PORT=${WAITFORIT_hostport[1]} 78 | shift 1 79 | ;; 80 | --child) 81 | WAITFORIT_CHILD=1 82 | shift 1 83 | ;; 84 | -q | --quiet) 85 | WAITFORIT_QUIET=1 86 | shift 1 87 | ;; 88 | -s | --strict) 89 | WAITFORIT_STRICT=1 90 | shift 1 91 | ;; 92 | -h) 93 | WAITFORIT_HOST="$2" 94 | if [[ $WAITFORIT_HOST == "" ]]; then break; fi 95 | shift 2 96 | ;; 97 | --host=*) 98 | WAITFORIT_HOST="${1#*=}" 99 | shift 1 100 | ;; 101 | -p) 102 | WAITFORIT_PORT="$2" 103 | if [[ $WAITFORIT_PORT == "" ]]; then break; fi 104 | shift 2 105 | ;; 106 | --port=*) 107 | WAITFORIT_PORT="${1#*=}" 108 | shift 1 109 | ;; 110 | -t) 111 | WAITFORIT_TIMEOUT="$2" 112 | if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi 113 | shift 2 114 | ;; 115 | --timeout=*) 116 | WAITFORIT_TIMEOUT="${1#*=}" 117 | shift 1 118 | ;; 119 | --) 120 | shift 121 | WAITFORIT_CLI=("$@") 122 | break 123 | ;; 124 | --help) 125 | usage 126 | ;; 127 | *) 128 | echoerr "Unknown argument: $1" 129 | usage 130 | ;; 131 | esac 132 | done 133 | 134 | if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then 135 | echoerr "Error: you need to provide a host and port to test." 136 | usage 137 | fi 138 | 139 | WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-120} 140 | WAITFORIT_STRICT=${WAITFORIT_STRICT:-0} 141 | WAITFORIT_CHILD=${WAITFORIT_CHILD:-0} 142 | WAITFORIT_QUIET=${WAITFORIT_QUIET:-0} 143 | 144 | # check to see if timeout is from busybox? 145 | WAITFORIT_TIMEOUT_PATH=$(type -p timeout) 146 | WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlink -f $WAITFORIT_TIMEOUT_PATH) 147 | if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then 148 | WAITFORIT_ISBUSY=1 149 | WAITFORIT_BUSYTIMEFLAG="-t" 150 | 151 | else 152 | WAITFORIT_ISBUSY=0 153 | WAITFORIT_BUSYTIMEFLAG="" 154 | fi 155 | 156 | if [[ $WAITFORIT_CHILD -gt 0 ]]; then 157 | wait_for 158 | WAITFORIT_RESULT=$? 159 | exit $WAITFORIT_RESULT 160 | else 161 | if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then 162 | wait_for_wrapper 163 | WAITFORIT_RESULT=$? 164 | else 165 | wait_for 166 | WAITFORIT_RESULT=$? 167 | fi 168 | fi 169 | 170 | if [[ $WAITFORIT_CLI != "" ]]; then 171 | if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then 172 | echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess" 173 | exit $WAITFORIT_RESULT 174 | fi 175 | exec "${WAITFORIT_CLI[@]}" 176 | else 177 | exit $WAITFORIT_RESULT 178 | fi 179 | --------------------------------------------------------------------------------