Files
PicAnalysis/deploy.sh
congsh 358deeb380 feat: 添加 Docker 部署支持和多 OCR 提供商架构
- 添加完整的 Docker 配置 (Dockerfile, docker-compose.yml)
- 修复前端硬编码端口 4000,改用相对路径 /api
- 实现多 OCR 提供商架构 (Tesseract.js/Baidu/RapidOCR)
- 修复 Docker 环境中图片上传路径问题
- 添加用户设置页面和 AI 分析服务
- 更新 Prisma schema 支持 AI 分析结果
- 添加部署文档和 OCR 配置指南

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-26 18:20:46 +08:00

231 lines
5.2 KiB
Bash
Raw 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
# PicAnalysis Docker 部署脚本
# 使用方法: ./deploy.sh [command]
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 打印带颜色的消息
print_info() {
echo -e "${BLUE}${NC} $1"
}
print_success() {
echo -e "${GREEN}${NC} $1"
}
print_warning() {
echo -e "${YELLOW}${NC} $1"
}
print_error() {
echo -e "${RED}${NC} $1"
}
# 检查 Docker 是否安装
check_docker() {
if ! command -v docker &> /dev/null; then
print_error "Docker 未安装,请先安装 Docker Engine"
exit 1
fi
if ! command -v docker compose &> /dev/null && ! docker compose version &> /dev/null; then
print_error "Docker Compose 未安装,请先安装 Docker Compose"
exit 1
fi
print_success "Docker 环境检查通过"
}
# 检查环境变量文件
check_env() {
if [ ! -f .env ]; then
print_warning ".env 文件不存在,从模板创建..."
if [ -f .env.production.example ]; then
cp .env.production.example .env
print_info "已创建 .env 文件"
# 生成随机 JWT_SECRET
JWT_SECRET=$(openssl rand -base64 32 2>/dev/null || echo "change-this-secret-key-in-production")
sed -i "s/CHANGE_THIS_TO_A_STRONG_RANDOM_KEY/$JWT_SECRET/g" .env 2>/dev/null || \
sed -i.bak "s/CHANGE_THIS_TO_A_STRONG_RANDOM_KEY/$JWT_SECRET/g" .env
print_success "已自动生成 JWT_SECRET"
print_warning "请检查 .env 文件并根据需要修改其他配置"
else
print_error "找不到 .env.production.example 模板文件"
exit 1
fi
else
print_success ".env 文件已存在"
fi
}
# 启动服务
start_services() {
print_info "启动 Docker 服务..."
docker compose up -d
print_success "服务启动成功"
echo ""
print_info "访问地址:"
echo " - 前端: http://localhost:80"
echo " - 后端: http://localhost:80/api"
echo ""
print_info "默认测试账号:"
echo " - 用户名: testuser"
echo " - 密码: Password123@"
}
# 停止服务
stop_services() {
print_info "停止 Docker 服务..."
docker compose stop
print_success "服务已停止"
}
# 重启服务
restart_services() {
print_info "重启 Docker 服务..."
docker compose restart
print_success "服务已重启"
}
# 查看日志
view_logs() {
SERVICE=$1
if [ -z "$SERVICE" ]; then
docker compose logs -f
else
docker compose logs -f "$SERVICE"
fi
}
# 查看状态
view_status() {
docker compose ps
}
# 清理服务
clean_services() {
print_warning "这将删除所有容器、卷和镜像,请确认是否继续? (y/N)"
read -r confirm
if [ "$confirm" = "y" ] || [ "$confirm" = "Y" ]; then
print_info "清理 Docker 资源..."
docker compose down -v --rmi all
print_success "清理完成"
else
print_info "已取消清理操作"
fi
}
# 重新构建
rebuild() {
print_info "重新构建并启动服务..."
docker compose up -d --build
print_success "重新构建完成"
}
# 数据库备份
backup_db() {
BACKUP_DIR="./backups"
mkdir -p "$BACKUP_DIR"
BACKUP_FILE="$BACKUP_DIR/picanalysis-$(date +%Y%m%d-%H%M%S).db"
print_info "备份数据库到: $BACKUP_FILE"
docker compose exec backend cp /app/data/prod.db "/app/data/backup-$(date +%Y%m%d-%H%M%S).db"
docker compose cp backend:/app/data/backup-$(date +%Y%m%d-%H%M%S).db "$BACKUP_FILE"
print_success "数据库备份完成: $BACKUP_FILE"
}
# 数据库迁移
migrate_db() {
print_info "运行数据库迁移..."
docker compose exec backend npx prisma migrate deploy
print_success "数据库迁移完成"
}
# 显示帮助信息
show_help() {
cat << EOF
PicAnalysis Docker 部署脚本
使用方法: ./deploy.sh [command]
命令:
start 启动所有服务 (默认)
stop 停止所有服务
restart 重启所有服务
logs 查看所有日志
logs [服务] 查看指定服务日志 (backend/frontend/rapidocr)
status 查看服务状态
clean 清理所有容器、卷和镜像
rebuild 重新构建并启动服务
backup 备份数据库
migrate 运行数据库迁移
help 显示此帮助信息
示例:
./deploy.sh # 启动服务
./deploy.sh logs backend # 查看后端日志
./deploy.sh backup # 备份数据库
EOF
}
# 主函数
main() {
check_docker
case "${1:-start}" in
start)
check_env
start_services
;;
stop)
stop_services
;;
restart)
restart_services
;;
logs)
view_logs "$2"
;;
status)
view_status
;;
clean)
clean_services
;;
rebuild)
rebuild
;;
backup)
backup_db
;;
migrate)
migrate_db
;;
help|--help|-h)
show_help
;;
*)
print_error "未知命令: $1"
show_help
exit 1
;;
esac
}
main "$@"