新增广告计划、用户资产、B2B交易、合规规则等核心模型 实现爬虫工作器、贸易服务、现金流预测等业务服务 添加RBAC权限测试、压力测试等测试用例 完善扩展程序的消息处理与内容脚本功能 重构应用入口与文档生成器 更新项目规则与业务闭环分析文档
325 lines
7.3 KiB
Bash
325 lines
7.3 KiB
Bash
#!/bin/bash
|
|
|
|
# ============================================================================
|
|
# Crawlful Hub 环境配置脚本
|
|
# Task ID: OP-DE001
|
|
# Description: 环境变量配置与验证脚本
|
|
# ============================================================================
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 日志函数
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 环境变量配置模板
|
|
ENV_TEMPLATE="# ============================================================================
|
|
# Crawlful Hub 环境变量配置
|
|
# ============================================================================
|
|
|
|
# 应用配置
|
|
NODE_ENV=development
|
|
APP_PORT=3000
|
|
APP_NAME=crawlful-hub
|
|
|
|
# 数据库配置 (阿里云 RDS MySQL 8.0)
|
|
DB_HOST=localhost
|
|
DB_PORT=3306
|
|
DB_NAME=crawlful_hub
|
|
DB_USER=root
|
|
DB_PASSWORD=your_password_here
|
|
DB_POOL_MIN=5
|
|
DB_POOL_MAX=20
|
|
|
|
# Redis 配置 (本地 Redis 6379)
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
REDIS_PASSWORD=
|
|
REDIS_DB=0
|
|
|
|
# JWT 配置
|
|
JWT_SECRET=your_jwt_secret_here
|
|
JWT_EXPIRES_IN=7d
|
|
|
|
# 租户配置
|
|
DEFAULT_TENANT_ID=tenant_001
|
|
|
|
# 日志配置
|
|
LOG_LEVEL=info
|
|
LOG_FORMAT=json
|
|
|
|
# 五元组追踪
|
|
TRACE_ENABLED=true
|
|
TRACE_SAMPLE_RATE=1.0
|
|
|
|
# 利润红线配置
|
|
PROFIT_MARGIN_B2B_THRESHOLD=0.15
|
|
PROFIT_MARGIN_B2C_THRESHOLD=0.20
|
|
|
|
# 并发控制
|
|
WORKER_CONCURRENCY=10
|
|
API_RATE_LIMIT=100
|
|
|
|
# 内存限制 (MB)
|
|
NODE_MAX_OLD_SPACE_SIZE=4096
|
|
|
|
# 插件配置
|
|
PLUGIN_DATA_DIR=./data/plugins
|
|
PLUGIN_PROFILE_DIR=./data/profiles
|
|
|
|
# 安全配置
|
|
CORS_ORIGIN=http://localhost:8000
|
|
HELMET_ENABLED=true
|
|
"
|
|
|
|
# 创建 .env 文件
|
|
create_env_file() {
|
|
local env_file=".env"
|
|
|
|
if [ -f "$env_file" ]; then
|
|
log_warn ".env 文件已存在,跳过创建"
|
|
return 0
|
|
fi
|
|
|
|
log_info "创建 .env 文件..."
|
|
echo "$ENV_TEMPLATE" > "$env_file"
|
|
log_success ".env 文件创建成功"
|
|
}
|
|
|
|
# 创建 .env.example 文件
|
|
create_env_example() {
|
|
local env_example=".env.example"
|
|
|
|
log_info "创建 .env.example 文件..."
|
|
echo "$ENV_TEMPLATE" > "$env_example"
|
|
log_success ".env.example 文件创建成功"
|
|
}
|
|
|
|
# 验证环境变量
|
|
validate_env() {
|
|
log_info "验证环境变量..."
|
|
|
|
local missing_vars=()
|
|
local required_vars=(
|
|
"NODE_ENV"
|
|
"DB_HOST"
|
|
"DB_PORT"
|
|
"DB_NAME"
|
|
"DB_USER"
|
|
"REDIS_HOST"
|
|
"REDIS_PORT"
|
|
"JWT_SECRET"
|
|
)
|
|
|
|
for var in "${required_vars[@]}"; do
|
|
if [ -z "${!var}" ]; then
|
|
missing_vars+=("$var")
|
|
fi
|
|
done
|
|
|
|
if [ ${#missing_vars[@]} -gt 0 ]; then
|
|
log_error "缺少必要的环境变量: ${missing_vars[*]}"
|
|
return 1
|
|
fi
|
|
|
|
log_success "所有必要的环境变量已配置"
|
|
return 0
|
|
}
|
|
|
|
# 验证数据库连接
|
|
validate_db_connection() {
|
|
log_info "验证数据库连接..."
|
|
|
|
if command -v mysql &> /dev/null; then
|
|
if mysql -h"${DB_HOST}" -P"${DB_PORT}" -u"${DB_USER}" -p"${DB_PASSWORD}" -e "SELECT 1" &> /dev/null; then
|
|
log_success "数据库连接成功"
|
|
return 0
|
|
else
|
|
log_warn "数据库连接失败,请检查配置"
|
|
return 1
|
|
fi
|
|
else
|
|
log_warn "mysql 客户端未安装,跳过数据库连接验证"
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# 验证 Redis 连接
|
|
validate_redis_connection() {
|
|
log_info "验证 Redis 连接..."
|
|
|
|
if command -v redis-cli &> /dev/null; then
|
|
if redis-cli -h"${REDIS_HOST}" -p"${REDIS_PORT}" ping &> /dev/null; then
|
|
log_success "Redis 连接成功"
|
|
return 0
|
|
else
|
|
log_warn "Redis 连接失败,请检查配置"
|
|
return 1
|
|
fi
|
|
else
|
|
log_warn "redis-cli 未安装,跳过 Redis 连接验证"
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# 创建必要的目录
|
|
create_directories() {
|
|
log_info "创建必要的目录..."
|
|
|
|
local directories=(
|
|
"./logs"
|
|
"./data"
|
|
"./data/plugins"
|
|
"./data/profiles"
|
|
"./data/uploads"
|
|
"./data/backups"
|
|
"./tmp"
|
|
)
|
|
|
|
for dir in "${directories[@]}"; do
|
|
if [ ! -d "$dir" ]; then
|
|
mkdir -p "$dir"
|
|
log_success "创建目录: $dir"
|
|
else
|
|
log_info "目录已存在: $dir"
|
|
fi
|
|
done
|
|
}
|
|
|
|
# 设置文件权限
|
|
set_permissions() {
|
|
log_info "设置文件权限..."
|
|
|
|
chmod 700 ./data
|
|
chmod 700 ./data/plugins
|
|
chmod 700 ./data/profiles
|
|
chmod 600 .env 2>/dev/null || true
|
|
|
|
log_success "文件权限设置完成"
|
|
}
|
|
|
|
# 检查 Node.js 版本
|
|
check_node_version() {
|
|
log_info "检查 Node.js 版本..."
|
|
|
|
if command -v node &> /dev/null; then
|
|
local node_version=$(node -v | cut -d 'v' -f 2 | cut -d '.' -f 1)
|
|
if [ "$node_version" -ge 18 ]; then
|
|
log_success "Node.js 版本: $(node -v)"
|
|
else
|
|
log_error "Node.js 版本过低,需要 >= 18.x"
|
|
return 1
|
|
fi
|
|
else
|
|
log_error "Node.js 未安装"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# 检查依赖
|
|
check_dependencies() {
|
|
log_info "检查依赖..."
|
|
|
|
local missing_deps=()
|
|
local deps=("node" "npm")
|
|
|
|
for dep in "${deps[@]}"; do
|
|
if ! command -v "$dep" &> /dev/null; then
|
|
missing_deps+=("$dep")
|
|
fi
|
|
done
|
|
|
|
if [ ${#missing_deps[@]} -gt 0 ]; then
|
|
log_error "缺少依赖: ${missing_deps[*]}"
|
|
return 1
|
|
fi
|
|
|
|
log_success "所有依赖已安装"
|
|
return 0
|
|
}
|
|
|
|
# 显示配置摘要
|
|
show_summary() {
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " Crawlful Hub 环境配置摘要"
|
|
echo "=========================================="
|
|
echo ""
|
|
echo "应用配置:"
|
|
echo " - NODE_ENV: ${NODE_ENV:-未设置}"
|
|
echo " - APP_PORT: ${APP_PORT:-未设置}"
|
|
echo ""
|
|
echo "数据库配置:"
|
|
echo " - DB_HOST: ${DB_HOST:-未设置}"
|
|
echo " - DB_PORT: ${DB_PORT:-未设置}"
|
|
echo " - DB_NAME: ${DB_NAME:-未设置}"
|
|
echo ""
|
|
echo "Redis 配置:"
|
|
echo " - REDIS_HOST: ${REDIS_HOST:-未设置}"
|
|
echo " - REDIS_PORT: ${REDIS_PORT:-未设置}"
|
|
echo ""
|
|
echo "业务约束:"
|
|
echo " - B2B 利润红线: ${PROFIT_MARGIN_B2B_THRESHOLD:-15%}"
|
|
echo " - B2C 利润红线: ${PROFIT_MARGIN_B2C_THRESHOLD:-20%}"
|
|
echo " - Worker 并发数: ${WORKER_CONCURRENCY:-10}"
|
|
echo ""
|
|
echo "=========================================="
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " Crawlful Hub 环境配置脚本 v1.0"
|
|
echo "=========================================="
|
|
echo ""
|
|
|
|
# 加载环境变量
|
|
if [ -f ".env" ]; then
|
|
log_info "加载 .env 文件..."
|
|
export $(cat .env | grep -v '^#' | xargs)
|
|
fi
|
|
|
|
# 执行配置步骤
|
|
create_env_file
|
|
create_env_example
|
|
create_directories
|
|
set_permissions
|
|
check_node_version
|
|
check_dependencies
|
|
|
|
# 验证连接
|
|
if [ -f ".env" ]; then
|
|
validate_db_connection || true
|
|
validate_redis_connection || true
|
|
fi
|
|
|
|
# 显示摘要
|
|
show_summary
|
|
|
|
log_success "环境配置完成!"
|
|
}
|
|
|
|
# 运行主函数
|
|
main "$@"
|