#!/bin/bash # 资金服务平台 - Docker 部署脚本 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 打印带颜色的消息 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 显示帮助 show_help() { echo "资金服务平台 Docker 部署脚本" echo "" echo "用法: $0 <命令> [选项]" echo "" echo "命令:" echo " start 启动所有服务" echo " stop 停止所有服务" echo " restart 重启所有服务" echo " build 构建所有镜像" echo " rebuild 重新构建所有镜像(不使用缓存)" echo " logs 查看服务日志" echo " status 查看服务状态" echo " clean 清理未使用的镜像和容器" echo " init 初始化环境(首次部署)" echo "" echo "选项:" echo " --service 指定服务名称" echo " --no-cache 构建时不使用缓存" echo "" echo "示例:" echo " $0 start # 启动所有服务" echo " $0 build --no-cache # 重新构建所有镜像" echo " $0 logs --service fund-sys # 查看系统服务日志" } # 检查 Docker 环境 check_docker() { if ! command -v docker &> /dev/null; then log_error "Docker 未安装,请先安装 Docker" exit 1 fi if ! docker info &> /dev/null; then log_error "Docker 未运行,请先启动 Docker" exit 1 fi if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then log_error "Docker Compose 未安装" exit 1 fi log_info "Docker 环境检查通过" } # 使用 docker-compose 命令(兼容 v1 和 v2) compose_cmd() { if docker compose version &> /dev/null; then docker compose "$@" else docker-compose "$@" fi } # 初始化环境 init_env() { log_info "初始化部署环境..." # 复制环境配置 if [ ! -f .env ]; then cp docker/.env .env log_info "已创建 .env 文件" else log_warn ".env 文件已存在,跳过" fi # 创建必要的目录 mkdir -p docker/grafana/dashboards mkdir -p docker/grafana/provisioning/datasources mkdir -p docker/grafana/provisioning/dashboards mkdir -p docker/prometheus/rules # 设置权限 chmod +x deploy.sh 2>/dev/null || true log_info "环境初始化完成" } # 构建镜像 build_images() { local no_cache="" local service="" while [[ $# -gt 0 ]]; do case $1 in --no-cache) no_cache="--no-cache" shift ;; --service) service="$2" shift 2 ;; *) shift ;; esac done log_info "开始构建 Docker 镜像..." if [ -n "$service" ]; then compose_cmd build $no_cache "$service" else compose_cmd build $no_cache fi log_info "镜像构建完成" } # 启动服务 start_services() { log_info "启动服务..." compose_cmd up -d log_info "等待服务启动..." sleep 10 log_info "服务状态:" compose_cmd ps } # 停止服务 stop_services() { log_info "停止服务..." compose_cmd down log_info "服务已停止" } # 重启服务 restart_services() { stop_services sleep 3 start_services } # 查看日志 view_logs() { local service="" while [[ $# -gt 0 ]]; do case $1 in --service) service="$2" shift 2 ;; *) shift ;; esac done if [ -n "$service" ]; then compose_cmd logs -f "$service" else compose_cmd logs -f fi } # 查看状态 view_status() { log_info "服务状态:" compose_cmd ps echo "" log_info "健康检查:" compose_cmd ps --format "table {{.Name}}\t{{.Status}}" } # 清理 clean_up() { log_info "清理未使用的资源..." # 停止并删除所有容器 compose_cmd down -v --remove-orphans # 删除悬空镜像 docker image prune -f # 删除未使用的网络 docker network prune -f log_info "清理完成" } # 主函数 main() { if [ $# -eq 0 ]; then show_help exit 0 fi check_docker case $1 in start) shift start_services "$@" ;; stop) shift stop_services "$@" ;; restart) shift restart_services "$@" ;; build) shift build_images "$@" ;; rebuild) shift build_images --no-cache "$@" ;; logs) shift view_logs "$@" ;; status) view_status ;; clean) clean_up ;; init) init_env ;; -h|--help) show_help ;; *) log_error "未知命令: $1" show_help exit 1 ;; esac } main "$@"