Files
aitsc/deploy.sh

160 lines
2.9 KiB
Bash
Raw Normal View History

#!/bin/bash
# Flask提示词大师部署脚本
# 用于生产环境部署
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"
}
# 检查环境变量
check_env() {
log_info "检查环境变量..."
required_vars=(
"SECRET_KEY"
"DATABASE_URL"
"LLM_API_KEY"
"WX_APPID"
"WX_SECRET"
)
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
log_error "环境变量 $var 未设置"
exit 1
fi
done
log_info "环境变量检查通过"
}
# 安装依赖
install_dependencies() {
log_info "安装Python依赖..."
pip install -r requirements.txt
log_info "依赖安装完成"
}
# 数据库迁移
run_migrations() {
log_info "运行数据库迁移..."
export FLASK_ENV=production
flask db upgrade
log_info "数据库迁移完成"
}
# 构建Docker镜像
build_docker() {
log_info "构建Docker镜像..."
docker build -t flask-prompt-master .
log_info "Docker镜像构建完成"
}
# 启动Docker服务
start_docker() {
log_info "启动Docker服务..."
docker-compose up -d
log_info "Docker服务启动完成"
}
# 健康检查
health_check() {
log_info "执行健康检查..."
# 等待服务启动
sleep 10
# 检查应用健康状态
if curl -f http://localhost/health > /dev/null 2>&1; then
log_info "应用健康检查通过"
else
log_error "应用健康检查失败"
exit 1
fi
}
# 显示服务状态
show_status() {
log_info "显示服务状态..."
docker-compose ps
}
# 主函数
main() {
log_info "开始部署Flask提示词大师..."
# 检查环境变量
check_env
# 安装依赖
install_dependencies
# 运行数据库迁移
run_migrations
# 构建Docker镜像
build_docker
# 启动Docker服务
start_docker
# 健康检查
health_check
# 显示服务状态
show_status
log_info "部署完成!"
log_info "应用地址: http://localhost"
log_info "API地址: http://localhost/api"
}
# 脚本入口
case "${1:-deploy}" in
"deploy")
main
;;
"build")
build_docker
;;
"start")
start_docker
;;
"stop")
log_info "停止Docker服务..."
docker-compose down
;;
"restart")
log_info "重启Docker服务..."
docker-compose restart
;;
"logs")
docker-compose logs -f
;;
"status")
show_status
;;
*)
echo "用法: $0 {deploy|build|start|stop|restart|logs|status}"
exit 1
;;
esac