This commit is contained in:
zhinianboke 2025-09-15 21:50:50 +08:00
parent 9e08f19b95
commit 10673e6e16
2 changed files with 70 additions and 41 deletions

29
.gitattributes vendored Normal file
View File

@ -0,0 +1,29 @@
# 确保脚本文件使用Unix换行符(LF)
*.sh text eol=lf
entrypoint.sh text eol=lf
# 确保Windows批处理文件使用Windows换行符(CRLF)
*.bat text eol=crlf
# 确保Python文件使用Unix换行符(LF)
*.py text eol=lf
# 确保配置文件使用Unix换行符(LF)
*.yml text eol=lf
*.yaml text eol=lf
*.json text eol=lf
*.conf text eol=lf
# 确保文档文件使用Unix换行符(LF)
*.md text eol=lf
*.txt text eol=lf
# 二进制文件
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.db binary
*.sqlite binary
*.sqlite3 binary

View File

@ -22,7 +22,7 @@ print_info() {
}
print_success() {
echo -e "${GREEN}$1${NC}"
echo -e "${GREEN}<EFBFBD>?$1${NC}"
}
print_warning() {
@ -30,12 +30,12 @@ print_warning() {
}
print_error() {
echo -e "${RED}$1${NC}"
echo -e "${RED}<EFBFBD>?$1${NC}"
}
# 检查依赖
# <EFBFBD><EFBFBD><EFBFBD>韏?
check_dependencies() {
print_info "检查系统依赖..."
print_info "<EFBFBD><EFBFBD>亦頂蝏煺<EFBFBD>韏?.."
if ! command -v docker &> /dev/null; then
print_error "Docker 未安装,请先安装 Docker"
@ -50,28 +50,28 @@ check_dependencies() {
print_success "系统依赖检查通过"
}
# 初始化配置
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵?
init_config() {
print_info "初始化配置文件..."
print_info "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵格<EFBFBD>隞?.."
# 检查关键文件
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>隞?
if [ ! -f "entrypoint.sh" ]; then
print_error "entrypoint.sh 文件不存在Docker容器将无法启动"
print_info "请确保项目文件完整"
print_error "entrypoint.sh <20><>辣銝滚<E98A9D><E6BB9A><EFBFBD>Docker摰孵膥撠<E886A5><E692A0>瘜訫鍳<E8A8AB>?
print_info "霂瑞靽嗪★<EFBFBD><EFBFBD>隞嗅<EFBFBD><EFBFBD>?
exit 1
else
print_success "entrypoint.sh 文件已存在"
print_success "entrypoint.sh <20><>辣撌脣<E6928C><E884A3>?
fi
if [ ! -f "global_config.yml" ]; then
print_error "global_config.yml 配置文件不存在"
print_info "请确保配置文件存在"
print_error "global_config.yml <20>滨蔭<E6BBA8><E894AD>辣銝滚<E98A9D><E6BB9A>?
print_info "霂瑞靽嗪<EFBFBD>蝵格<EFBFBD>隞嗅<EFBFBD><EFBFBD>?
exit 1
else
print_success "global_config.yml 配置文件已存在"
print_success "global_config.yml <20>滨蔭<E6BBA8><E894AD>辣撌脣<E6928C><E884A3>?
fi
# 创建必要的目录
# <EFBFBD>𥕦遣敹<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤌍敶?
mkdir -p data logs backups static/uploads/images
print_success "已创建必要的目录"
}
@ -79,7 +79,7 @@ init_config() {
# 构建镜像
build_image() {
print_info "构建 Docker 镜像..."
echo "是否需要使用国内镜像(y/n): " && read iscn
echo "<EFBFBD>臬炏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>典𤙴<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?y/n): " && read iscn
if [[ $iscn == "y" ]]; then
docker-compose -f docker-compose-cn.yml build --no-cache
else
@ -93,7 +93,7 @@ start_services() {
local profile=""
if [ "$1" = "with-nginx" ]; then
profile="--profile with-nginx"
print_info "启动服务(包含 Nginx..."
print_info "<EFBFBD>臬𢆡<EFBFBD>滚𦛚嚗<EFBFBD><EFBFBD><EFBFBD>?Nginx嚗?.."
else
print_info "启动基础服务..."
fi
@ -105,7 +105,7 @@ start_services() {
print_info "等待服务就绪..."
sleep 10
# 检查服务状态
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD>∠𠶖<EFBFBD>?
if docker-compose ps | grep -q "Up"; then
print_success "服务运行正常"
show_access_info "$1"
@ -120,14 +120,14 @@ start_services() {
stop_services() {
print_info "停止服务..."
docker-compose down
print_success "服务已停止"
print_success "<EFBFBD>滚𦛚撌脣<EFBFBD>甇?
}
# 重启服务
restart_services() {
print_info "重启服务..."
docker-compose restart
print_success "服务已重启"
print_success "<EFBFBD>滚𦛚撌脤<EFBFBD><EFBFBD>?
}
# 查看日志
@ -140,9 +140,9 @@ show_logs() {
fi
}
# 查看状态
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
show_status() {
print_info "服务状态:"
print_info "<EFBFBD>滚𦛚<EFBFBD><EFBFBD>?"
docker-compose ps
print_info "资源使用:"
@ -154,7 +154,7 @@ show_access_info() {
local with_nginx="$1"
echo ""
print_success "🎉 部署完成!"
print_success "<EFBFBD><EFBFBD> <20>函蔡摰峕<E691B0>嚗?
echo ""
if [ "$with_nginx" = "with-nginx" ]; then
@ -168,20 +168,20 @@ show_access_info() {
echo ""
echo "🔐 默认登录信息:"
echo " 用户名: admin"
echo " <EFBFBD><EFBFBD><EFBFBD>? admin"
echo " 密码: admin123"
echo ""
echo "📊 管理命令:"
echo " 查看状态: $0 status"
echo " <EFBFBD><EFBFBD><EFBFBD><EFBFBD>? $0 status"
echo " 查看日志: $0 logs"
echo " 重启服务: $0 restart"
echo " 停止服务: $0 stop"
echo ""
}
# 健康检查
# <EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
health_check() {
print_info "执行健康检查..."
print_info "<EFBFBD><EFBFBD><EFBFBD>亙熒璉<EFBFBD><EFBFBD>?.."
local url="http://localhost:8080/health"
local max_attempts=30
@ -198,7 +198,7 @@ health_check() {
((attempt++))
done
print_error "健康检查失败"
print_error "<EFBFBD>亙熒璉<EFBFBD><EFBFBD>亙仃韐?
return 1
}
@ -209,10 +209,10 @@ backup_data() {
local backup_dir="backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$backup_dir"
# 备份数据库
# <EFBFBD><EFBFBD>唳旿摨?
if [ -f "data/xianyu_data.db" ]; then
cp data/xianyu_data.db "$backup_dir/"
print_success "数据库备份完成"
print_success "<EFBFBD>唳旿摨枏<EFBFBD>隞賢<EFBFBD><EFBFBD>?
fi
# 备份配置
@ -232,9 +232,9 @@ update_deployment() {
# 停止服务
stop_services
# 拉取最新代码如果是git仓库
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唬誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>症it隞枏<EFBFBD>嚗?
if [ -d ".git" ]; then
print_info "拉取最新代码..."
print_info "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唬誨<EFBFBD>?.."
git pull
fi
@ -255,7 +255,7 @@ cleanup() {
if [[ "$response" =~ ^[Yy]$ ]]; then
print_info "清理环境..."
# 停止并删除容器
# <EFBFBD>𨀣迫撟嗅<EFBFBD><EFBFBD>文捆<EFBFBD>?
docker-compose down -v --rmi all
# 删除数据目录
@ -274,28 +274,28 @@ show_help() {
echo "用法: $0 [命令] [选项]"
echo ""
echo "命令:"
echo " init 初始化配置文件"
echo " init <20><EFBFBD><E598A5><EFBFBD>蝵格<E89DB5>隞?
echo " build 构建 Docker 镜像"
echo " start [with-nginx] 启动服务(可选包含 Nginx"
echo " start [with-nginx] <20>臬𢆡<E887AC>滚𦛚嚗<F0A69B9A><EFBFBD><EFBFBD><E58CA7>?Nginx嚗?
echo " stop 停止服务"
echo " restart 重启服务"
echo " status 查看服务状态"
echo " status <20><EFBFBD><E4BAA6>滚𦛚<E6BB9A><EFBFBD>?
echo " logs [service] 查看日志"
echo " health 健康检查"
echo " health <20>亙熒璉<E78692><E79289>?
echo " backup 备份数据"
echo " update 更新部署"
echo " cleanup 清理环境"
echo " help 显示帮助信息"
echo ""
echo "示例:"
echo " $0 init # 初始化配置"
echo " $0 init # <EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵?
echo " $0 start # 启动基础服务"
echo " $0 start with-nginx # 启动包含 Nginx 的服务"
echo " $0 start with-nginx # <EFBFBD>臬𢆡<EFBFBD><EFBFBD>鉄 Nginx <20><><EFBFBD><EFBFBD>?
echo " $0 logs xianyu-app # 查看应用日志"
echo ""
}
# 主函数
# 銝餃遆<EFBFBD>?
main() {
case "$1" in
"init")
@ -342,7 +342,7 @@ main() {
show_help
;;
"")
print_info "快速部署模式"
print_info "敹恍<EFBFBD><EFBFBD>蝵脫芋撘?
check_dependencies
init_config
build_image
@ -356,5 +356,5 @@ main() {
esac
}
# 执行主函数
# <EFBFBD><EFBFBD>銝餃遆<EFBFBD>?
main "$@"