fundplatform/scripts/docker-build.sh
zhangjf 109ae29474 docs: 添加Docker构建脚本和部署指南
- scripts/docker-build.sh: Docker镜像构建脚本
  - 支持单模块构建、全部构建、docker-compose构建
  - 支持镜像源配置、镜像推送、清理功能
- doc/Docker部署指南.md: 完整部署文档
  - 环境要求、镜像源配置
  - 镜像构建方法、服务端口规划
  - 启动停止命令、故障排查
2026-02-19 19:15:56 +08:00

240 lines
5.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# ============================================================
# 资金服务平台 - Docker 镜像构建脚本
# ============================================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 项目根目录
PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$PROJECT_DIR"
# 版本号
VERSION="${VERSION:-0.0.1-SNAPSHOT}"
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 Docker 是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装,请先安装 Docker"
exit 1
fi
log_info "Docker 版本: $(docker --version)"
}
# 配置 Docker 镜像源(需要 sudo
configure_mirror() {
log_info "配置 Docker 镜像源..."
if [ -f /etc/docker/daemon.json ]; then
log_warn "/etc/docker/daemon.json 已存在,跳过配置"
return
fi
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerhub.icu",
"https://hub.rat.dev"
]
}
EOF
log_info "重启 Docker 服务..."
sudo systemctl restart docker
log_info "镜像源配置完成"
}
# 构建单个模块
build_module() {
local module=$1
local tag="${2:-latest}"
log_info "构建模块: $module"
docker build \
--build-arg MODULE="$module" \
--build-arg VERSION="$VERSION" \
-t "$module:$VERSION" \
-t "$module:$tag" \
-f Dockerfile \
.
if [ $? -eq 0 ]; then
log_info "$module 构建成功: $module:$tag"
else
log_error "$module 构建失败"
return 1
fi
}
# 构建所有模块
build_all() {
local modules=(
"fund-gateway"
"fund-sys"
"fund-cust"
"fund-proj"
"fund-req"
"fund-exp"
"fund-receipt"
"fund-report"
"fund-file"
)
log_info "开始构建所有模块..."
local success=0
local failed=0
for module in "${modules[@]}"; do
if build_module "$module"; then
((success++))
else
((failed++))
fi
done
echo ""
log_info "构建完成: 成功 $success, 失败 $failed"
if [ $failed -gt 0 ]; then
return 1
fi
}
# 使用 docker-compose 构建
build_with_compose() {
log_info "使用 docker-compose 构建所有服务..."
docker-compose build --no-cache
log_info "docker-compose 构建完成"
}
# 推送镜像到仓库
push_images() {
local registry="${1:-}"
if [ -z "$registry" ]; then
log_error "请指定镜像仓库地址,例如: push_images registry.example.com"
return 1
fi
local modules=(
"fund-gateway"
"fund-sys"
"fund-cust"
"fund-proj"
"fund-req"
"fund-exp"
"fund-receipt"
"fund-report"
"fund-file"
)
for module in "${modules[@]}"; do
log_info "推送 $module..."
docker tag "$module:$VERSION" "$registry/$module:$VERSION"
docker push "$registry/$module:$VERSION"
done
log_info "所有镜像推送完成"
}
# 清理镜像
clean_images() {
log_info "清理未使用的镜像..."
docker image prune -f
log_info "清理完成"
}
# 显示帮助
show_help() {
echo "资金服务平台 - Docker 镜像构建脚本"
echo ""
echo "用法: $0 [命令] [参数]"
echo ""
echo "命令:"
echo " check 检查 Docker 环境"
echo " mirror 配置 Docker 镜像源(需要 sudo"
echo " build <模块> 构建指定模块"
echo " build-all 构建所有模块"
echo " compose 使用 docker-compose 构建"
echo " push <仓库> 推送镜像到仓库"
echo " clean 清理未使用的镜像"
echo " help 显示帮助信息"
echo ""
echo "示例:"
echo " $0 build fund-sys # 构建 fund-sys 模块"
echo " $0 build-all # 构建所有模块"
echo " $0 compose # 使用 docker-compose 构建"
echo " $0 push registry.example.com # 推送到私有仓库"
echo ""
echo "环境变量:"
echo " VERSION 镜像版本号,默认: 0.0.1-SNAPSHOT"
}
# 主函数
main() {
local command="${1:-help}"
case "$command" in
check)
check_docker
;;
mirror)
configure_mirror
;;
build)
check_docker
if [ -z "$2" ]; then
log_error "请指定要构建的模块"
exit 1
fi
build_module "$2" "${3:-latest}"
;;
build-all)
check_docker
build_all
;;
compose)
check_docker
build_with_compose
;;
push)
push_images "$2"
;;
clean)
clean_images
;;
help|--help|-h)
show_help
;;
*)
log_error "未知命令: $command"
show_help
exit 1
;;
esac
}
main "$@"