299 lines
6.4 KiB
Bash
Executable File
299 lines
6.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Docker Compose 管理脚本
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
ENV_FILE="$PROJECT_ROOT/.env"
|
|
|
|
# 默认环境
|
|
ENVIRONMENT=${ENVIRONMENT:-prod}
|
|
|
|
# 颜色输出
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 打印带颜色的消息
|
|
print_message() {
|
|
local color=$1
|
|
local message=$2
|
|
echo -e "${color}${message}${NC}"
|
|
}
|
|
|
|
# 显示帮助信息
|
|
show_help() {
|
|
echo "QAUP Docker Compose 管理脚本"
|
|
echo ""
|
|
echo "用法: $0 [环境] [命令] [选项]"
|
|
echo ""
|
|
echo "环境:"
|
|
echo " dev 开发环境"
|
|
echo " prod 生产环境(默认)"
|
|
echo ""
|
|
echo "命令:"
|
|
echo " start 启动服务"
|
|
echo " stop 停止服务"
|
|
echo " restart 重启服务"
|
|
echo " status 查看服务状态"
|
|
echo " logs 查看服务日志"
|
|
echo " build 构建镜像"
|
|
echo " pull 拉取镜像"
|
|
echo " clean 清理资源"
|
|
echo " backup 备份数据"
|
|
echo " restore 恢复数据"
|
|
echo ""
|
|
echo "示例:"
|
|
echo " $0 prod start # 启动生产环境"
|
|
echo " $0 dev logs qaup-app # 查看开发环境应用日志"
|
|
echo " $0 prod backup # 备份生产环境数据"
|
|
}
|
|
|
|
# 检查环境文件
|
|
check_env_file() {
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
print_message $YELLOW "警告: 环境文件不存在,创建默认配置..."
|
|
create_default_env
|
|
fi
|
|
}
|
|
|
|
# 创建默认环境文件
|
|
create_default_env() {
|
|
cat > "$ENV_FILE" << EOF
|
|
# QAUP Docker 部署环境配置
|
|
|
|
# 数据库配置
|
|
POSTGRES_DB=qaup
|
|
POSTGRES_USER=postgres
|
|
POSTGRES_PASSWORD=qaup123
|
|
APP_DB_USER=qaup_app
|
|
APP_DB_PASSWORD=qaup123
|
|
|
|
# Redis 配置
|
|
REDIS_PASSWORD=
|
|
|
|
# 应用配置
|
|
SPRING_PROFILES_ACTIVE=prod
|
|
APP_PORT=8080
|
|
|
|
# Nginx 配置
|
|
NGINX_PORT=80
|
|
NGINX_HTTPS_PORT=443
|
|
SERVER_NAME=localhost
|
|
API_PREFIX=/prod-api
|
|
MAX_UPLOAD_SIZE=20M
|
|
|
|
# 目录配置
|
|
DATA_DIR=./data
|
|
LOG_DIR=./logs
|
|
BACKUP_DIR=./backup
|
|
|
|
# JVM 配置
|
|
JVM_OPTS=-Dname=qaup-admin.jar -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m
|
|
EOF
|
|
print_message $GREEN "默认环境文件已创建: $ENV_FILE"
|
|
}
|
|
|
|
# 获取 compose 文件参数
|
|
get_compose_files() {
|
|
local env=$1
|
|
local base_file="$PROJECT_ROOT/docker-compose.yml"
|
|
local env_file="$PROJECT_ROOT/docker-compose.$env.yml"
|
|
|
|
if [ -f "$env_file" ]; then
|
|
echo "-f $base_file -f $env_file"
|
|
else
|
|
echo "-f $base_file"
|
|
fi
|
|
}
|
|
|
|
# 创建必要的目录
|
|
create_directories() {
|
|
local data_dir=${DATA_DIR:-./data}
|
|
local log_dir=${LOG_DIR:-./logs}
|
|
local backup_dir=${BACKUP_DIR:-./backup}
|
|
|
|
print_message $BLUE "创建必要的目录..."
|
|
mkdir -p "$data_dir"/{postgres,redis,uploads}
|
|
mkdir -p "$log_dir"/{postgres,redis,app,nginx}
|
|
mkdir -p "$backup_dir"/postgres
|
|
|
|
# 设置权限
|
|
chmod 755 "$data_dir" "$log_dir" "$backup_dir"
|
|
chmod 700 "$data_dir"/postgres
|
|
}
|
|
|
|
# 启动服务
|
|
start_services() {
|
|
local env=$1
|
|
shift
|
|
local services="$@"
|
|
|
|
print_message $GREEN "启动 $env 环境服务..."
|
|
check_env_file
|
|
create_directories
|
|
|
|
cd "$PROJECT_ROOT"
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" up -d $services
|
|
|
|
print_message $GREEN "服务启动完成!"
|
|
show_status $env
|
|
}
|
|
|
|
# 停止服务
|
|
stop_services() {
|
|
local env=$1
|
|
shift
|
|
local services="$@"
|
|
|
|
print_message $YELLOW "停止 $env 环境服务..."
|
|
cd "$PROJECT_ROOT"
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" stop $services
|
|
|
|
print_message $GREEN "服务停止完成!"
|
|
}
|
|
|
|
# 重启服务
|
|
restart_services() {
|
|
local env=$1
|
|
shift
|
|
local services="$@"
|
|
|
|
print_message $BLUE "重启 $env 环境服务..."
|
|
stop_services $env $services
|
|
sleep 2
|
|
start_services $env $services
|
|
}
|
|
|
|
# 查看服务状态
|
|
show_status() {
|
|
local env=$1
|
|
|
|
print_message $BLUE "查看 $env 环境服务状态..."
|
|
cd "$PROJECT_ROOT"
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" ps
|
|
}
|
|
|
|
# 查看日志
|
|
show_logs() {
|
|
local env=$1
|
|
shift
|
|
local services="$@"
|
|
|
|
cd "$PROJECT_ROOT"
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" logs -f $services
|
|
}
|
|
|
|
# 构建镜像
|
|
build_images() {
|
|
local env=$1
|
|
|
|
print_message $BLUE "构建 $env 环境镜像..."
|
|
cd "$PROJECT_ROOT"
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" build
|
|
|
|
print_message $GREEN "镜像构建完成!"
|
|
}
|
|
|
|
# 清理资源
|
|
clean_resources() {
|
|
local env=$1
|
|
|
|
print_message $YELLOW "清理 $env 环境资源..."
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# 停止并删除容器
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" down
|
|
|
|
# 清理未使用的镜像和网络
|
|
docker system prune -f
|
|
|
|
print_message $GREEN "资源清理完成!"
|
|
}
|
|
|
|
# 备份数据
|
|
backup_data() {
|
|
local env=$1
|
|
|
|
print_message $BLUE "备份 $env 环境数据..."
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# 执行数据库备份
|
|
docker-compose $(get_compose_files $env) --env-file "$ENV_FILE" exec qaup-postgres /backup-db.sh
|
|
|
|
print_message $GREEN "数据备份完成!"
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
if [ $# -eq 0 ]; then
|
|
show_help
|
|
exit 0
|
|
fi
|
|
|
|
# 解析参数
|
|
local env="prod"
|
|
local command=""
|
|
|
|
# 检查第一个参数是否是环境
|
|
if [[ "$1" =~ ^(dev|prod)$ ]]; then
|
|
env=$1
|
|
shift
|
|
fi
|
|
|
|
if [ $# -eq 0 ]; then
|
|
show_help
|
|
exit 0
|
|
fi
|
|
|
|
command=$1
|
|
shift
|
|
|
|
# 加载环境文件
|
|
if [ -f "$ENV_FILE" ]; then
|
|
source "$ENV_FILE"
|
|
fi
|
|
|
|
# 执行命令
|
|
case $command in
|
|
start)
|
|
start_services $env "$@"
|
|
;;
|
|
stop)
|
|
stop_services $env "$@"
|
|
;;
|
|
restart)
|
|
restart_services $env "$@"
|
|
;;
|
|
status)
|
|
show_status $env
|
|
;;
|
|
logs)
|
|
show_logs $env "$@"
|
|
;;
|
|
build)
|
|
build_images $env
|
|
;;
|
|
clean)
|
|
clean_resources $env
|
|
;;
|
|
backup)
|
|
backup_data $env
|
|
;;
|
|
help|--help|-h)
|
|
show_help
|
|
;;
|
|
*)
|
|
print_message $RED "未知命令: $command"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# 执行主函数
|
|
main "$@" |