docs: 添加Docker构建脚本和部署指南
- scripts/docker-build.sh: Docker镜像构建脚本 - 支持单模块构建、全部构建、docker-compose构建 - 支持镜像源配置、镜像推送、清理功能 - doc/Docker部署指南.md: 完整部署文档 - 环境要求、镜像源配置 - 镜像构建方法、服务端口规划 - 启动停止命令、故障排查
This commit is contained in:
parent
5b80e237b9
commit
109ae29474
340
doc/Docker部署指南.md
Normal file
340
doc/Docker部署指南.md
Normal file
@ -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 告警规则
|
||||||
239
scripts/docker-build.sh
Executable file
239
scripts/docker-build.sh
Executable file
@ -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 "$@"
|
||||||
Loading…
x
Reference in New Issue
Block a user