From 109ae29474ff0238304eb1172397c1711b41411d Mon Sep 17 00:00:00 2001 From: zhangjf Date: Thu, 19 Feb 2026 19:15:56 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0Docker=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E8=84=9A=E6=9C=AC=E5=92=8C=E9=83=A8=E7=BD=B2=E6=8C=87?= =?UTF-8?q?=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scripts/docker-build.sh: Docker镜像构建脚本 - 支持单模块构建、全部构建、docker-compose构建 - 支持镜像源配置、镜像推送、清理功能 - doc/Docker部署指南.md: 完整部署文档 - 环境要求、镜像源配置 - 镜像构建方法、服务端口规划 - 启动停止命令、故障排查 --- doc/Docker部署指南.md | 340 ++++++++++++++++++++++++++++++++++++++++ scripts/docker-build.sh | 239 ++++++++++++++++++++++++++++ 2 files changed, 579 insertions(+) create mode 100644 doc/Docker部署指南.md create mode 100755 scripts/docker-build.sh diff --git a/doc/Docker部署指南.md b/doc/Docker部署指南.md new file mode 100644 index 0000000..7d702eb --- /dev/null +++ b/doc/Docker部署指南.md @@ -0,0 +1,340 @@ +# 资金服务平台 Docker 部署指南 + +> **版本**: v1.0 +> **更新日期**: 2026-02-19 + +--- + +## 一、环境要求 + +| 软件 | 版本 | 说明 | +|------|------|------| +| Docker | 20.10+ | 容器运行环境 | +| Docker Compose | 2.0+ | 容器编排工具 | +| Maven | 3.8+ | Java 构建工具 | +| JDK | 21 | Java 运行环境 | + +--- + +## 二、Docker 镜像源配置 + +国内网络访问 Docker Hub 较慢,建议配置镜像源: + +```bash +# 创建配置文件 +sudo tee /etc/docker/daemon.json <<'EOF' +{ + "registry-mirrors": [ + "https://docker.m.daocloud.io", + "https://dockerhub.icu", + "https://hub.rat.dev" + ] +} +EOF + +# 重启 Docker 服务 +sudo systemctl restart docker + +# 验证配置 +docker info | grep -A 3 "Registry Mirrors" +``` + +--- + +## 三、镜像构建 + +### 3.1 使用构建脚本(推荐) + +```bash +cd /home/along/MyCode/wanjiabuluo/fundplatform + +# 查看帮助 +./scripts/docker-build.sh help + +# 检查 Docker 环境 +./scripts/docker-build.sh check + +# 配置镜像源(需要 sudo) +./scripts/docker-build.sh mirror + +# 构建单个模块 +./scripts/docker-build.sh build fund-sys + +# 构建所有模块 +./scripts/docker-build.sh build-all + +# 使用 docker-compose 构建 +./scripts/docker-build.sh compose + +# 清理未使用的镜像 +./scripts/docker-build.sh clean +``` + +### 3.2 手动构建单个模块 + +```bash +# 构建命令格式 +docker build --build-arg MODULE=<模块名> -t <镜像名>:<标签> . + +# 示例:构建 fund-sys +docker build --build-arg MODULE=fund-sys -t fund-sys:latest . + +# 示例:构建 fund-gateway +docker build --build-arg MODULE=fund-gateway -t fund-gateway:latest . +``` + +### 3.3 构建所有模块 + +```bash +# 循环构建所有模块 +for module in fund-gateway fund-sys fund-cust fund-proj fund-req fund-exp fund-receipt fund-report fund-file; do + echo "构建 $module..." + docker build --build-arg MODULE=$module -t $module:latest . +done + +# 或使用 docker-compose +docker-compose build +``` + +--- + +## 四、服务端口规划 + +| 服务 | 容器端口 | 主机端口 | 说明 | +|------|----------|----------|------| +| fund-gateway | 8000 | 8000 | API 网关 | +| fund-sys | 8100 | 8100 | 系统服务 | +| fund-cust | 8200 | 8200 | 客户服务 | +| fund-proj | 8300 | 8300 | 项目服务 | +| fund-req | 8400 | 8400 | 需求工单服务 | +| fund-exp | 8500 | 8500 | 支出服务 | +| fund-receipt | 8600 | 8600 | 收款服务 | +| fund-report | 8700 | 8700 | 报表服务 | +| fund-file | 8800 | 8800 | 文件服务 | +| mysql | 3306 | 3306 | MySQL 数据库 | +| redis | 6379 | 6379 | Redis 缓存 | +| nacos | 8848 | 8848 | Nacos 注册中心 | +| prometheus | 9090 | 9090 | Prometheus 监控 | +| grafana | 3000 | 3000 | Grafana 可视化 | + +--- + +## 五、启动服务 + +### 5.1 启动基础设施 + +```bash +# 仅启动 MySQL、Redis、Nacos +docker-compose up -d mysql redis nacos + +# 查看服务状态 +docker-compose ps + +# 查看日志 +docker-compose logs -f nacos +``` + +### 5.2 启动所有服务 + +```bash +# 启动所有服务 +docker-compose up -d + +# 查看服务状态 +docker-compose ps + +# 查看所有服务日志 +docker-compose logs -f + +# 查看单个服务日志 +docker-compose logs -f fund-sys +``` + +### 5.3 分步启动 + +```bash +# 1. 启动基础设施 +docker-compose up -d mysql redis nacos + +# 2. 等待 Nacos 就绪(约 60 秒) +sleep 60 + +# 3. 启动网关 +docker-compose up -d gateway + +# 4. 启动业务服务 +docker-compose up -d fund-sys fund-cust fund-proj fund-req fund-exp fund-receipt fund-report fund-file + +# 5. 启动监控 +docker-compose up -d prometheus grafana +``` + +--- + +## 六、停止服务 + +```bash +# 停止所有服务 +docker-compose down + +# 停止并删除数据卷 +docker-compose down -v + +# 停止单个服务 +docker-compose stop fund-sys + +# 重启单个服务 +docker-compose restart fund-sys +``` + +--- + +## 七、访问地址 + +| 服务 | 地址 | 用户名/密码 | +|------|------|-------------| +| Nacos 控制台 | http://localhost:8848/nacos | nacos / nacos | +| Grafana | http://localhost:3000 | admin / admin123 | +| Prometheus | http://localhost:9090 | - | +| API 网关 | http://localhost:8000 | - | +| 健康检查 | http://localhost:8100/actuator/health | - | +| Prometheus 指标 | http://localhost:8100/actuator/prometheus | - | + +--- + +## 八、常用命令 + +### 8.1 容器管理 + +```bash +# 查看运行中的容器 +docker ps + +# 查看所有容器(包括已停止) +docker ps -a + +# 进入容器 +docker exec -it fund-sys sh + +# 查看容器日志 +docker logs -f fund-sys + +# 查看容器资源使用 +docker stats fund-sys +``` + +### 8.2 镜像管理 + +```bash +# 查看本地镜像 +docker images + +# 删除镜像 +docker rmi fund-sys:latest + +# 清理未使用的镜像 +docker image prune -f + +# 导出镜像 +docker save -o fund-sys.tar fund-sys:latest + +# 导入镜像 +docker load -i fund-sys.tar +``` + +### 8.3 数据卷管理 + +```bash +# 查看数据卷 +docker volume ls + +# 删除数据卷 +docker volume rm fund-mysql-data + +# 清理未使用的数据卷 +docker volume prune +``` + +--- + +## 九、环境变量配置 + +在 `docker-compose.yml` 中通过环境变量配置服务: + +```yaml +environment: + # 服务端口 + SERVER_PORT: 8100 + + # Spring Profile + SPRING_PROFILES_ACTIVE: docker + + # Nacos 配置 + NACOS_SERVER_ADDR: nacos:8848 + NACOS_USERNAME: nacos + NACOS_PASSWORD: nacos + + # MySQL 配置 + MYSQL_HOST: mysql + MYSQL_PORT: 3306 + MYSQL_DB: fund_platform + MYSQL_USER: root + MYSQL_PASSWORD: root123 + + # Redis 配置 + REDIS_HOST: redis + REDIS_PORT: 6379 + + # JVM 参数 + JAVA_OPTS: -Xms256m -Xmx512m -XX:+UseG1GC +``` + +--- + +## 十、故障排查 + +### 10.1 服务启动失败 + +```bash +# 查看服务日志 +docker-compose logs fund-sys + +# 查看容器状态 +docker inspect fund-sys + +# 检查网络 +docker network inspect fund-network +``` + +### 10.2 无法连接 Nacos + +```bash +# 检查 Nacos 是否就绪 +curl http://localhost:8848/nacos/v1/console/health/readiness + +# 检查服务注册情况 +curl http://localhost:8848/nacos/v1/ns/instance/list?serviceName=fund-sys +``` + +### 10.3 数据库连接失败 + +```bash +# 进入 MySQL 容器 +docker exec -it fund-mysql mysql -uroot -proot123 + +# 检查数据库 +SHOW DATABASES; +USE fund_platform; +SHOW TABLES; +``` + +--- + +## 十一、生产环境建议 + +1. **修改默认密码**:修改 MySQL、Redis、Nacos、Grafana 的默认密码 +2. **配置 HTTPS**:使用 Nginx 反向代理并配置 SSL 证书 +3. **资源限制**:在 docker-compose.yml 中配置 CPU 和内存限制 +4. **日志持久化**:将日志挂载到宿主机 +5. **数据备份**:定期备份 MySQL 数据 +6. **监控告警**:配置 Prometheus 告警规则 diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh new file mode 100755 index 0000000..db3f2f2 --- /dev/null +++ b/scripts/docker-build.sh @@ -0,0 +1,239 @@ +#!/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 "$@"