#!/bin/bash # 资金服务平台部署脚本 set -e echo "========================================" echo " 资金服务平台 Docker 部署脚本" echo "========================================" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 函数:打印信息 print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查Docker if ! command -v docker &> /dev/null; then print_error "Docker 未安装,请先安装 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null; then print_error "Docker Compose 未安装,请先安装 Docker Compose" exit 1 fi # 创建必要的目录 print_info "创建必要的目录..." mkdir -p logs/fund-sys logs/fund-cust logs/fund-proj mkdir -p init mkdir -p redis # 创建Redis配置文件 if [ ! -f redis/redis.conf ]; then print_info "创建 Redis 配置文件..." cat > redis/redis.conf << 'EOF' bind 0.0.0.0 port 6379 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo no save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-ping-replica-period 10 repl-timeout 60 repl-disable-tcp-nodelay no replica-priority 100 maxmemory-policy allkeys-lru lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes EOF fi # 解析参数 ACTION=${1:-up} case $ACTION in up) print_info "启动所有服务..." docker-compose up -d print_info "服务启动完成!" echo "" echo "========================================" echo " 服务访问地址" echo "========================================" echo "" echo "【管理端 - PC浏览器访问】" echo " - Nacos控制台: http://localhost:8848/nacos (admin/admin)" echo " - Swagger文档: http://localhost:8080/swagger-ui.html" echo " - 应用服务: http://localhost:8080" echo " - Nginx网关: http://localhost" echo "" echo "【移动端 - UniApp】" echo " - H5访问: http://localhost:8080/mobile" echo " - 开发调试: cd fund-mobile && npm run dev:h5" echo "" echo "========================================" ;; down) print_info "停止所有服务..." docker-compose down print_info "服务已停止" ;; restart) print_info "重启服务..." docker-compose restart print_info "服务重启完成" ;; build) print_info "重新构建镜像..." docker-compose build --no-cache print_info "镜像构建完成" ;; logs) SERVICE=${2:-} if [ -z "$SERVICE" ]; then docker-compose logs -f else docker-compose logs -f $SERVICE fi ;; status) print_info "查看服务状态..." docker-compose ps ;; clean) print_warn "清理所有数据(包括数据库)..." read -p "确定要删除所有数据吗?这将删除数据库和日志! [y/N] " confirm if [[ $confirm == [yY] ]]; then docker-compose down -v rm -rf logs/* print_info "数据清理完成" else print_info "取消清理" fi ;; mobile) print_info "构建移动端应用..." cd ../../fund-mobile case ${2:-h5} in h5) print_info "构建H5版本..." npm run build:h5 print_info "H5构建完成,输出目录: dist/build/h5" ;; mp-weixin) print_info "构建微信小程序..." npm run build:mp-weixin print_info "微信小程序构建完成,输出目录: dist/build/mp-weixin" print_info "请使用微信开发者工具导入该目录" ;; app) print_info "构建App..." npm run build:app print_info "App构建完成,输出目录: dist/build/app" ;; dev) print_info "启动移动端开发服务器..." npm run dev:h5 ;; *) echo "用法: $0 mobile {h5|mp-weixin|app|dev}" echo "" echo "命令说明:" echo " h5 - 构建H5版本" echo " mp-weixin - 构建微信小程序" echo " app - 构建App" echo " dev - 启动开发服务器" exit 1 ;; esac ;; *) echo "用法: $0 {up|down|restart|build|logs|status|clean|mobile}" echo "" echo "命令说明:" echo " up - 启动所有服务" echo " down - 停止所有服务" echo " restart - 重启服务" echo " build - 重新构建镜像" echo " logs - 查看日志 [服务名]" echo " status - 查看服务状态" echo " clean - 清理所有数据(危险!)" echo " mobile - 移动端构建 {h5|mp-weixin|app|dev}" exit 1 ;; esac echo "" echo "========================================" echo " 部署脚本执行完成" echo "========================================"