fundplatform/deploy.sh
zhangjf 480c052ff1 feat: Docker容器化部署配置
- 添加所有后端服务的application-docker.yml配置文件
- 添加前端fund-admin和fund-mobile的Dockerfile和nginx配置
- 更新docker-compose.yml添加前端服务
- 添加.dockerignore优化构建
- 添加deploy.sh一键部署脚本
2026-02-20 10:13:52 +08:00

267 lines
5.4 KiB
Bash
Executable File
Raw Permalink 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
# 打印带颜色的消息
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 <name> 指定服务名称"
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 "$@"