shell脚本一键安装yapi

9 阅读2分钟

1.前置要求:docker 环境

2.安装的shell脚本

#!/bin/bash
# ==========================================================
#  YApi 部署与环境管理脚本 (install / uninstall / update)
#  作者: ChatGPT (GPT-5)
#  版本: 2.3
# ==========================================================

DEFAULT_PORT=3000
DEFAULT_ADMIN_EMAIL="admin@example.com"
DEFAULT_ADMIN_PASS="yapi123456"
DEFAULT_MONGO_USER="yapi"
DEFAULT_MONGO_PASS="yapi123456"

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
success() { echo -e "${GREEN}[OK]${NC} $1"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERR]${NC} $1"; }

confirm() {
    read -p "$1 [y/N]: " -n 1 -r; echo
    [[ $REPLY =~ ^[Yy]$ ]]
}

check_dir() {
    if [ -d "$1" ]; then
        warn "目录已存在: $1"
        if confirm "是否删除该目录重新安装?"; then
            rm -rf "$1"
        else
            exit 0
        fi
    fi
}

# ===== 创建 .env 文件 =====
create_mongo_env() {
cat > "$1" <<EOF
# ================================================
# MongoDB 环境变量配置
# ================================================

# MongoDB 管理员账号
MONGO_INITDB_ROOT_USERNAME=${DEFAULT_MONGO_USER}

# MongoDB 管理员密码
MONGO_INITDB_ROOT_PASSWORD=${DEFAULT_MONGO_PASS}
EOF
}

create_yapi_env() {
cat > "$1" <<EOF
# ================================================
# YApi 基础环境变量配置
# ================================================

# 管理员邮箱
YAPI_ADMIN_ACCOUNT=${ADMIN_EMAIL}

# 管理员密码
YAPI_ADMIN_PASSWORD=${ADMIN_PASS}

# 是否关闭注册功能
YAPI_CLOSE_REGISTER=true

# npm 镜像源
YAPI_NPM_REGISTRY=https://registry.npmmirror.com

# 启动端口
YAPI_PORT=${YAPI_PORT}

# ================================================
# 数据库连接配置
# ================================================

YAPI_DB_SERVERNAME=mongo-yapi
YAPI_DB_PORT=27017
YAPI_DB_DATABASE=yapi
YAPI_DB_USER=${DEFAULT_MONGO_USER}
YAPI_DB_PASS=${DEFAULT_MONGO_PASS}
YAPI_DB_AUTH_SOURCE=admin

# ================================================
# 邮件与插件配置
# ================================================

YAPI_MAIL_ENABLE=false
YAPI_PLUGINS=[]
EOF

if [ "$LDAP_ENABLED" = true ]; then
cat >> "$1" <<EOF

# ================================================
# LDAP 认证配置
# ================================================

YAPI_LDAP_LOGIN_ENABLE=true
YAPI_LDAP_LOGIN_SERVER=${ldap_server}
YAPI_LDAP_LOGIN_BASE_DN=${ldap_base_dn}
YAPI_LDAP_LOGIN_BIND_PASSWORD=${ldap_bind_password}
YAPI_LDAP_LOGIN_SEARCH_DN=${ldap_search_filter}
YAPI_LDAP_LOGIN_SEARCH_STANDARD=${ldap_login_standard}
YAPI_LDAP_LOGIN_USERNAME_KEY=${ldap_username_attribute}
YAPI_LDAP_LOGIN_EMAIL_KEY=${ldap_email_attribute}
YAPI_LDAP_LOGIN_EMAIL_POSTFIX=${ldap_email_postfix}
EOF
else
echo -e "\n# 是否启用 LDAP\nYAPI_LDAP_LOGIN_ENABLE=false" >> "$1"
fi
}

configure_ldap() {
    info "是否启用 LDAP 认证?"
    read -p "启用 LDAP? [y/N]: " enable
    if [[ $enable =~ ^[Yy]$ ]]; then
        read -p "LDAP 服务地址 (如 ldap://192.168.8.151:389): " ldap_server
        read -p "LDAP 登录基础DN (如 cn=admin,dc=example,dc=com): " ldap_base_dn
        read -s -p "LDAP 管理员密码: " ldap_bind_password; echo
        read -p "LDAP 搜索路径 (如  ou=users,dc=example,dc=com): " ldap_search_filter
        read -p "登录账号对应的查询字段 (如 mail 、uid 等或者自定义查询如 &(objectClass=user)(cn=%s)): " ldap_login_standard
        read -p "LDAP 用户名属性 (默认 uid): " ldap_username_attribute
        ldap_username_attribute=${ldap_username_attribute:-uid}
        read -p "LDAP 邮箱属性 (默认 mail): " ldap_email_attribute
        ldap_email_attribute=${ldap_email_attribute:-mail}
        read -p "LDAP 邮箱后缀 (如 @company.com): " ldap_email_postfix
        LDAP_ENABLED=true
    else
        LDAP_ENABLED=false
    fi
}

install_yapi() {
    info "=== 开始安装 YApi ==="
    read -p "管理员邮箱 (默认: $DEFAULT_ADMIN_EMAIL): " ADMIN_EMAIL
    ADMIN_EMAIL=${ADMIN_EMAIL:-$DEFAULT_ADMIN_EMAIL}
    read -s -p "管理员密码 (默认: $DEFAULT_ADMIN_PASS): " ADMIN_PASS; echo
    ADMIN_PASS=${ADMIN_PASS:-$DEFAULT_ADMIN_PASS}
    read -p "端口 (默认: $DEFAULT_PORT): " YAPI_PORT
    YAPI_PORT=${YAPI_PORT:-$DEFAULT_PORT}
    read -p "安装路径 (默认: /data/yapi): " INSTALL_DIR
    INSTALL_DIR=${INSTALL_DIR:-/data/yapi}

    check_dir "$INSTALL_DIR"
    mkdir -p "$INSTALL_DIR/mongo-data"

    configure_ldap

    create_mongo_env "$INSTALL_DIR/mongo.env"
    create_yapi_env "$INSTALL_DIR/yapi.env"

    info "启动 MongoDB..."
    docker run -d --name mongo-yapi --restart always \
      --env-file "$INSTALL_DIR/mongo.env" \
      -v "$INSTALL_DIR/mongo-data:/data/db" \
      -p 27017:27017 mongo:4.4 --bind_ip_all

    info "等待 MongoDB 启动..."
    sleep 8

    info "启动 YApi..."
    docker run -d --name yapi --restart always \
      --link mongo-yapi:mongo-yapi \
      --env-file "$INSTALL_DIR/yapi.env" \
      -p ${YAPI_PORT}:3000 \
      jayfong/yapi:latest

    success "部署完成!"
    echo "访问地址: http://localhost:${YAPI_PORT}"
    echo "管理员: ${ADMIN_EMAIL}"
    echo "密码: ${ADMIN_PASS}"
    echo "配置路径: $INSTALL_DIR"
}

uninstall_yapi() {
    warn "即将卸载 YApi 与 Mongo 容器..."
    if confirm "确认删除?"; then
        docker rm -f yapi mongo-yapi 2>/dev/null || true
        rm -rf /data/yapi
        success "已卸载所有组件。"
    fi
}

# ===== 重建容器 =====
update_env() {
    info "=== 更新 YApi 容器环境变量 ==="

    read -p "请输入 YApi 容器使用的环境变量文件路径: " ENV_FILE
    if [ ! -f "$ENV_FILE" ]; then
        error "指定的文件不存在: $ENV_FILE"
        exit 1
    fi

    # 从 env 文件读取 YAPI_PORT
    NEW_PORT=$(grep -E '^YAPI_PORT=' "$ENV_FILE" | cut -d '=' -f2)
    if [ -z "$NEW_PORT" ]; then
        warn "未在环境变量文件中找到 YAPI_PORT,使用默认端口 3000"
        NEW_PORT=3000
    fi

    if ! confirm "确定使用 $ENV_FILE 重建 YApi 容器并映射端口 $NEW_PORT?"; then
        info "操作取消。"
        exit 0
    fi

    info "停止并删除旧 YApi 容器..."
    docker rm -f yapi 2>/dev/null || true

    info "使用新的环境变量文件重建 YApi 容器..."
    docker run -d --name yapi --restart always \
        --link mongo-yapi:mongo-yapi \
        --env-file "$ENV_FILE" \
        -p ${NEW_PORT}:3000 \
        jayfong/yapi:latest

    success "YApi 容器已使用新环境变量重建完成,端口映射: $NEW_PORT -> 3000"
}

# ===== 主逻辑入口 =====
case "$1" in
    install) install_yapi ;;
    uninstall) uninstall_yapi ;;
    update) update_env ;;
    *)
        echo "用法: $0 {install|uninstall|update}"
        ;;
esac

3.脚本保存为 yapi-install.sh

4.添加脚本执行权限 chmon 777 yapi-install.sh

5.开始执行安装 ./yapi-install.sh install,后续按照提示按照即可