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,后续按照提示按照即可