feat: add one-click startup scripts for project management
- Add start.sh/start.bat for one-click startup (backend + frontend) - Add stop.sh/stop.bat for stopping all services - Add restart.sh for restarting services - Add status.sh for checking service status - Add Makefile with convenient management commands - Add comprehensive documentation (ONE_CLICK_START.md) - Update README with one-click startup instructions Features: - Automatic environment checking (venv, node_modules) - Process management with PID tracking - Unified log management (logs/*.log) - Health checking after startup - Support for Linux, macOS, and Windows - No more need for multiple terminal windows Usage: ./start.sh # Start all services ./stop.sh # Stop all services ./status.sh # Check service status ./restart.sh # Restart services make start # Alternative using Makefile Benefits: - One command instead of multiple terminals - Automatic environment validation - Centralized logging - Process lifecycle management - Developer-friendly output messages
This commit is contained in:
97
Makefile
Normal file
97
Makefile
Normal file
@@ -0,0 +1,97 @@
|
||||
.PHONY: start stop restart status logs clean install help
|
||||
|
||||
# ERP AI Assistant Makefile
|
||||
|
||||
# 默认目标
|
||||
.DEFAULT_GOAL := help
|
||||
|
||||
# 帮助信息
|
||||
help:
|
||||
@echo "ERP AI Assistant - 管理命令"
|
||||
@echo ""
|
||||
@echo "使用方法: make [命令]"
|
||||
@echo ""
|
||||
@echo "可用命令:"
|
||||
@echo " start 启动项目(后端 + 前端)"
|
||||
@echo " stop 停止项目"
|
||||
@echo " restart 重启项目"
|
||||
@echo " status 查看服务状态"
|
||||
@echo " logs 查看日志(后端和前端)"
|
||||
@echo " logs-backend 查看后端日志"
|
||||
@echo " logs-frontend 查看前端日志"
|
||||
@echo " install 安装所有依赖"
|
||||
@echo " clean 清理日志和临时文件"
|
||||
@echo " test 运行测试"
|
||||
@echo ""
|
||||
|
||||
# 启动项目
|
||||
start:
|
||||
@./start.sh
|
||||
|
||||
# 停止项目
|
||||
stop:
|
||||
@./stop.sh
|
||||
|
||||
# 重启项目
|
||||
restart:
|
||||
@./restart.sh
|
||||
|
||||
# 查看状态
|
||||
status:
|
||||
@./status.sh
|
||||
|
||||
# 查看所有日志
|
||||
logs:
|
||||
@echo "查看后端和前端日志 (按 Ctrl+C 退出)..."
|
||||
@tail -f logs/backend.log logs/frontend.log
|
||||
|
||||
# 查看后端日志
|
||||
logs-backend:
|
||||
@echo "查看后端日志 (按 Ctrl+C 退出)..."
|
||||
@tail -f logs/backend.log
|
||||
|
||||
# 查看前端日志
|
||||
logs-frontend:
|
||||
@echo "查看前端日志 (按 Ctrl+C 退出)..."
|
||||
@tail -f logs/frontend.log
|
||||
|
||||
# 安装依赖
|
||||
install:
|
||||
@echo "安装后端依赖..."
|
||||
cd backend && python3 -m venv venv && . venv/bin/activate && pip install -r requirements.txt
|
||||
@echo "安装前端依赖..."
|
||||
cd frontend && npm install
|
||||
@echo "✅ 依赖安装完成"
|
||||
|
||||
# 清理
|
||||
clean:
|
||||
@echo "清理日志和临时文件..."
|
||||
rm -rf logs/*.log logs/pids.txt
|
||||
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
|
||||
find . -type f -name "*.pyc" -delete
|
||||
find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true
|
||||
find . -type d -name "node_modules" -prune -o -type d -name ".cache" -exec rm -rf {} + 2>/dev/null || true
|
||||
@echo "✅ 清理完成"
|
||||
|
||||
# 运行测试
|
||||
test:
|
||||
@echo "运行后端测试..."
|
||||
cd backend && . venv/bin/activate && pytest tests/ -v --cov=app
|
||||
@echo "✅ 测试完成"
|
||||
|
||||
# 开发模式(前台运行,方便调试)
|
||||
dev:
|
||||
@echo "开发模式启动..."
|
||||
@echo "后端日志将输出到此终端"
|
||||
@./stop.sh
|
||||
@cd backend && . venv/bin/activate && python -m app.main & BACKEND_PID=$$!; \
|
||||
cd ../frontend && npm run dev & FRONTEND_PID=$$!; \
|
||||
echo ""; \
|
||||
echo "服务已启动:"; \
|
||||
echo " 前端: http://localhost:5173"; \
|
||||
echo " 后端: http://localhost:8000"; \
|
||||
echo ""; \
|
||||
echo "PID: 后端=$$BACKEND_PID, 前端=$$FRONTEND_PID"; \
|
||||
echo "按 Ctrl+C 停止所有服务..."; \
|
||||
trap "kill $$BACKEND_PID $$FRONTEND_PID 2>/dev/null; exit" INT TERM; \
|
||||
wait
|
||||
40
README.md
40
README.md
@@ -13,22 +13,44 @@
|
||||
|
||||
**首次使用请阅读**: [快速上手指南](docs/QUICK_START.md)
|
||||
|
||||
### 最快 3 步开始
|
||||
### 一键启动(推荐)
|
||||
|
||||
```bash
|
||||
# 1. 配置后端
|
||||
cd backend && pip install -r requirements.txt
|
||||
cp .env.example .env # 编辑填入数据库和 API 配置
|
||||
# 1. 首次配置
|
||||
cd backend && python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt
|
||||
cd ../frontend && npm install
|
||||
# 配置环境变量
|
||||
cd ../backend && cp .env.example .env # 编辑填入数据库和 API 配置
|
||||
|
||||
# 2. 启动后端
|
||||
python -m app.main
|
||||
|
||||
# 3. 启动前端
|
||||
cd ../frontend && npm install && npm run dev
|
||||
# 2. 启动项目(一个命令启动前后端)
|
||||
cd ..
|
||||
./start.sh # Linux/Mac
|
||||
# 或
|
||||
start.bat # Windows
|
||||
```
|
||||
|
||||
访问 http://localhost:5173 开始使用!
|
||||
|
||||
**管理命令**:
|
||||
- 查看状态: `./status.sh`
|
||||
- 停止服务: `./stop.sh`
|
||||
- 重启服务: `./restart.sh`
|
||||
- 查看日志: `tail -f logs/backend.log`
|
||||
|
||||
**详细说明**: [一键启动指南](docs/ONE_CLICK_START.md)
|
||||
|
||||
### 手动启动(开发模式)
|
||||
|
||||
如果你需要分别启动前后端:
|
||||
|
||||
```bash
|
||||
# 终端 1: 启动后端
|
||||
cd backend && source venv/bin/activate && python -m app.main
|
||||
|
||||
# 终端 2: 启动前端
|
||||
cd frontend && npm run dev
|
||||
```
|
||||
|
||||
### 1. 环境要求
|
||||
|
||||
- Python 3.10+
|
||||
|
||||
333
docs/GITEA_CONFIG.md
Normal file
333
docs/GITEA_CONFIG.md
Normal file
@@ -0,0 +1,333 @@
|
||||
# Git 远程仓库配置完成
|
||||
|
||||
## ✅ 已完成的操作
|
||||
|
||||
### 1. 创建 Gitea 仓库
|
||||
|
||||
使用 Gitea API 成功创建仓库:
|
||||
- **仓库地址**: http://192.168.120.110:4000/dazhuang/erp-ass
|
||||
- **仓库名称**: erp-ass
|
||||
- **所有者**: dazhuang
|
||||
- **权限**: 公开仓库
|
||||
- **描述**: ERP AI Assistant - 一零软件智能配置助手
|
||||
|
||||
### 2. 配置 Git 用户信息
|
||||
|
||||
```bash
|
||||
git config user.name "dazhuang"
|
||||
git config user.email "dazhuang@foshanhuiya.com"
|
||||
```
|
||||
|
||||
### 3. 添加远程仓库
|
||||
|
||||
```bash
|
||||
git remote add origin http://dazhuang:47b0128cbdbd40de728072c609b55d4413b7fe6d@192.168.120.110:4000/dazhuang/erp-ass.git
|
||||
```
|
||||
|
||||
**认证方式**: HTTP + Access Token
|
||||
|
||||
### 4. 重命名分支
|
||||
|
||||
将本地分支从 `master` 重命名为 `main`(与 Gitea 默认分支一致):
|
||||
```bash
|
||||
git branch -M main
|
||||
```
|
||||
|
||||
### 5. 推送代码
|
||||
|
||||
成功推送代码到远程仓库:
|
||||
```bash
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
**推送结果**:
|
||||
- 分支: main
|
||||
- 提交: acd7343 (feat: implement ERP AI Assistant Phase 1)
|
||||
- 文件: 60 个文件
|
||||
- 代码行数: 11,284 行
|
||||
|
||||
## 📊 仓库信息
|
||||
|
||||
### 访问地址
|
||||
|
||||
- **Web 界面**: http://192.168.120.110:4000/dazhuang/erp-ass
|
||||
- **HTTP 克隆**: http://192.168.120.110:4000/dazhuang/erp-ass.git
|
||||
- **SSH 克隆**: git@192.168.120.110:dazhuang/erp-ass.git
|
||||
|
||||
### 仓库状态
|
||||
|
||||
```
|
||||
分支: main
|
||||
状态: 与远程同步
|
||||
最新提交: acd7343 feat: implement ERP AI Assistant Phase 1
|
||||
```
|
||||
|
||||
## 🔧 后续操作
|
||||
|
||||
### 克隆仓库
|
||||
|
||||
其他团队成员可以克隆仓库:
|
||||
|
||||
**HTTP 方式(推荐)**:
|
||||
```bash
|
||||
git clone http://192.168.120.110:4000/dazhuang/erp-ass.git
|
||||
cd erp-ass
|
||||
```
|
||||
|
||||
**SSH 方式**:
|
||||
```bash
|
||||
git clone ssh://git@192.168.120.110:4022/dazhuang/erp-ass.git
|
||||
cd erp-ass
|
||||
```
|
||||
|
||||
### 日常开发流程
|
||||
|
||||
#### 1. 获取最新代码
|
||||
|
||||
```bash
|
||||
git pull origin main
|
||||
```
|
||||
|
||||
#### 2. 创建新功能分支
|
||||
|
||||
```bash
|
||||
git checkout -b feature/new-feature
|
||||
```
|
||||
|
||||
#### 3. 开发并提交
|
||||
|
||||
```bash
|
||||
# 修改文件...
|
||||
git add .
|
||||
git commit -m "feat: add new feature"
|
||||
```
|
||||
|
||||
#### 4. 推送到远程
|
||||
|
||||
```bash
|
||||
git push origin feature/new-feature
|
||||
```
|
||||
|
||||
#### 5. 在 Gitea 创建 Pull Request
|
||||
|
||||
访问仓库 Web 界面创建 PR
|
||||
|
||||
#### 6. 合并后删除分支
|
||||
|
||||
```bash
|
||||
git checkout main
|
||||
git pull origin main
|
||||
git branch -d feature/new-feature
|
||||
git push origin --delete feature/new-feature
|
||||
```
|
||||
|
||||
## 🔐 认证信息
|
||||
|
||||
### HTTP 认证
|
||||
|
||||
使用 Access Token 认证,URL 格式:
|
||||
```
|
||||
http://用户名:AccessToken@服务器地址/仓库路径.git
|
||||
```
|
||||
|
||||
**注意**:
|
||||
- Access Token 已嵌入远程 URL
|
||||
- 无需每次输入密码
|
||||
- Token 权限:读写仓库
|
||||
|
||||
### SSH 认证(可选)
|
||||
|
||||
如果需要使用 SSH 方式:
|
||||
|
||||
1. **生成 SSH 密钥**:
|
||||
```bash
|
||||
ssh-keygen -t ed25519 -C "dazhuang@foshanhuiya.com"
|
||||
```
|
||||
|
||||
2. **查看公钥**:
|
||||
```bash
|
||||
cat ~/.ssh/id_ed25519.pub
|
||||
```
|
||||
|
||||
3. **添加到 Gitea**:
|
||||
- 访问 http://192.168.120.110:4000/user/settings/keys
|
||||
- 添加 SSH 公钥
|
||||
|
||||
4. **更新远程 URL**:
|
||||
```bash
|
||||
git remote set-url origin git@192.168.120.110:dazhuang/erp-ass.git
|
||||
```
|
||||
|
||||
5. **配置 SSH 端口**(因为使用了非标准端口 4022):
|
||||
|
||||
编辑 `~/.ssh/config`:
|
||||
```
|
||||
Host 192.168.120.110
|
||||
Port 4022
|
||||
User git
|
||||
IdentityFile ~/.ssh/id_ed25519
|
||||
```
|
||||
|
||||
## ⚙️ Git 配置
|
||||
|
||||
### 当前配置
|
||||
|
||||
查看本地配置:
|
||||
```bash
|
||||
git config --list --local
|
||||
```
|
||||
|
||||
### 推荐的全局配置
|
||||
|
||||
```bash
|
||||
# 设置默认分支名
|
||||
git config --global init.defaultBranch main
|
||||
|
||||
# 设置推送默认行为
|
||||
git config --global push.default simple
|
||||
|
||||
# 设置拉取默认行为
|
||||
git config --global pull.rebase false
|
||||
|
||||
# 设置凭证缓存
|
||||
git config --global credential.helper cache --timeout=3600
|
||||
|
||||
# 设置编辑器
|
||||
git config --global core.editor vim
|
||||
|
||||
# 设置中文文件名显示
|
||||
git config --global core.quotePath false
|
||||
```
|
||||
|
||||
## 📝 团队协作规范
|
||||
|
||||
### 分支命名规范
|
||||
|
||||
- `main` - 主分支(生产环境)
|
||||
- `develop` - 开发分支
|
||||
- `feature/xxx` - 功能分支
|
||||
- `bugfix/xxx` - Bug 修复分支
|
||||
- `hotfix/xxx` - 紧急修复分支
|
||||
- `release/v1.0.0` - 发布分支
|
||||
|
||||
### 提交信息规范
|
||||
|
||||
使用约定式提交:
|
||||
|
||||
```
|
||||
<type>(<scope>): <subject>
|
||||
|
||||
<body>
|
||||
|
||||
<footer>
|
||||
```
|
||||
|
||||
**类型(type)**:
|
||||
- `feat`: 新功能
|
||||
- `fix`: Bug 修复
|
||||
- `docs`: 文档更新
|
||||
- `style`: 代码格式(不影响功能)
|
||||
- `refactor`: 重构
|
||||
- `test`: 测试相关
|
||||
- `chore`: 构建/工具相关
|
||||
|
||||
**示例**:
|
||||
```
|
||||
feat(backend): add user authentication
|
||||
|
||||
- Add login API endpoint
|
||||
- Implement JWT token validation
|
||||
- Add user session management
|
||||
|
||||
Closes #123
|
||||
```
|
||||
|
||||
### .gitignore 规范
|
||||
|
||||
已配置的忽略规则:
|
||||
- Python: `__pycache__/`, `*.pyc`, `venv/`
|
||||
- Node.js: `node_modules/`, `dist/`
|
||||
- 环境变量: `.env`, `.env.local`
|
||||
- IDE: `.vscode/`, `.idea/`
|
||||
- 项目特定: `erp-doc/`, `*.docx`, `*.xlsx`
|
||||
- 数据库: `*.db`, `chroma_db/`
|
||||
|
||||
## 🐛 常见问题
|
||||
|
||||
### 问题 1: 推送被拒绝
|
||||
|
||||
**现象**: `! [rejected] main -> main (fetch first)`
|
||||
|
||||
**原因**: 远程仓库有新的提交
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 拉取最新代码
|
||||
git pull origin main --rebase
|
||||
|
||||
# 解决冲突(如果有)
|
||||
# 然后推送
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### 问题 2: Access Token 失效
|
||||
|
||||
**现象**: `remote: Invalid token`
|
||||
|
||||
**解决方案**:
|
||||
1. 访问 http://192.168.120.110:4000/user/settings/applications
|
||||
2. 生成新的 Access Token
|
||||
3. 更新远程 URL:
|
||||
```bash
|
||||
git remote set-url origin http://dazhuang:NEW_TOKEN@192.168.120.110:4000/dazhuang/erp-ass.git
|
||||
```
|
||||
|
||||
### 问题 3: 合并冲突
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 查看冲突文件
|
||||
git status
|
||||
|
||||
# 手动编辑冲突文件,解决冲突标记
|
||||
# <<<<<<< HEAD
|
||||
# 本地修改
|
||||
# =======
|
||||
# 远程修改
|
||||
# >>>>>>> branch-name
|
||||
|
||||
# 标记为已解决
|
||||
git add <conflicted-file>
|
||||
|
||||
# 提交合并
|
||||
git commit
|
||||
```
|
||||
|
||||
### 问题 4: 撤销最近的提交
|
||||
|
||||
**撤销最近一次提交(保留修改)**:
|
||||
```bash
|
||||
git reset --soft HEAD~1
|
||||
```
|
||||
|
||||
**撤销最近一次提交(丢弃修改)**:
|
||||
```bash
|
||||
git reset --hard HEAD~1
|
||||
```
|
||||
|
||||
**注意**: 如果已推送到远程,需要强制推送(谨慎使用):
|
||||
```bash
|
||||
git push origin main --force
|
||||
```
|
||||
|
||||
## 📚 相关资源
|
||||
|
||||
- [Gitea 官方文档](https://docs.gitea.io/)
|
||||
- [Git 官方文档](https://git-scm.com/doc)
|
||||
- [Pro Git 书籍](https://git-scm.com/book/zh/v2)
|
||||
- [约定式提交](https://www.conventionalcommits.org/zh-hans/)
|
||||
|
||||
---
|
||||
|
||||
**配置完成时间**: 2026-03-22
|
||||
**仓库地址**: http://192.168.120.110:4000/dazhuang/erp-ass
|
||||
409
docs/ONE_CLICK_START.md
Normal file
409
docs/ONE_CLICK_START.md
Normal file
@@ -0,0 +1,409 @@
|
||||
# 一键启动指南
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### Linux/Mac 用户
|
||||
|
||||
```bash
|
||||
# 添加执行权限(首次使用)
|
||||
chmod +x start.sh stop.sh restart.sh status.sh
|
||||
|
||||
# 启动项目
|
||||
./start.sh
|
||||
|
||||
# 查看状态
|
||||
./status.sh
|
||||
|
||||
# 停止项目
|
||||
./stop.sh
|
||||
|
||||
# 重启项目
|
||||
./restart.sh
|
||||
```
|
||||
|
||||
### Windows 用户
|
||||
|
||||
```cmd
|
||||
# 启动项目
|
||||
start.bat
|
||||
|
||||
# 停止项目
|
||||
stop.bat
|
||||
```
|
||||
|
||||
## 📋 功能说明
|
||||
|
||||
### start.sh / start.bat
|
||||
|
||||
**功能**:一键启动前后端服务
|
||||
|
||||
**自动完成**:
|
||||
- ✅ 检查依赖环境(虚拟环境、node_modules)
|
||||
- ✅ 检查配置文件(.env)
|
||||
- ✅ 清理旧进程
|
||||
- ✅ 启动后端服务(端口 8000)
|
||||
- ✅ 启动前端服务(端口 5173)
|
||||
- ✅ 保存进程 PID
|
||||
- ✅ 健康检查
|
||||
|
||||
**输出信息**:
|
||||
- 服务访问地址
|
||||
- 日志文件位置
|
||||
- 管理命令提示
|
||||
|
||||
### stop.sh / stop.bat
|
||||
|
||||
**功能**:停止所有服务
|
||||
|
||||
**自动完成**:
|
||||
- ✅ 读取 PID 文件
|
||||
- ✅ 优雅停止进程
|
||||
- ✅ 强制清理残留进程
|
||||
- ✅ 清理 PID 文件
|
||||
|
||||
### restart.sh
|
||||
|
||||
**功能**:重启服务(Linux/Mac)
|
||||
|
||||
**流程**:
|
||||
1. 停止服务
|
||||
2. 等待 2 秒
|
||||
3. 启动服务
|
||||
|
||||
### status.sh
|
||||
|
||||
**功能**:查看服务状态
|
||||
|
||||
**显示信息**:
|
||||
- 后端服务状态和地址
|
||||
- 前端服务状态和地址
|
||||
- 进程信息(PID、命令)
|
||||
- 日志查看命令
|
||||
|
||||
## 📁 目录结构
|
||||
|
||||
```
|
||||
/data/erp-ass/
|
||||
├── start.sh # Linux/Mac 启动脚本
|
||||
├── stop.sh # Linux/Mac 停止脚本
|
||||
├── restart.sh # Linux/Mac 重启脚本
|
||||
├── status.sh # Linux/Mac 状态查看
|
||||
├── start.bat # Windows 启动脚本
|
||||
├── stop.bat # Windows 停止脚本
|
||||
├── logs/ # 日志目录(自动创建)
|
||||
│ ├── backend.log # 后端日志
|
||||
│ ├── frontend.log # 前端日志
|
||||
│ └── pids.txt # 进程 PID 记录
|
||||
├── backend/
|
||||
└── frontend/
|
||||
```
|
||||
|
||||
## 🔧 配置说明
|
||||
|
||||
### 首次使用
|
||||
|
||||
**1. 后端配置**
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# 创建虚拟环境
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate # Windows: venv\Scripts\activate
|
||||
|
||||
# 安装依赖
|
||||
pip install -r requirements.txt
|
||||
|
||||
# 配置环境变量
|
||||
cp .env.example .env
|
||||
# 编辑 .env 文件填入数据库和 API 配置
|
||||
```
|
||||
|
||||
**2. 前端配置**
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# 安装依赖
|
||||
npm install
|
||||
```
|
||||
|
||||
**3. 一键启动**
|
||||
|
||||
```bash
|
||||
# Linux/Mac
|
||||
./start.sh
|
||||
|
||||
# Windows
|
||||
start.bat
|
||||
```
|
||||
|
||||
## 📊 日志查看
|
||||
|
||||
### 实时查看日志
|
||||
|
||||
```bash
|
||||
# 查看后端日志
|
||||
tail -f logs/backend.log
|
||||
|
||||
# 查看前端日志
|
||||
tail -f logs/frontend.log
|
||||
|
||||
# 同时查看两个日志
|
||||
tail -f logs/*.log
|
||||
```
|
||||
|
||||
### 日志内容
|
||||
|
||||
**后端日志包含**:
|
||||
- 服务启动信息
|
||||
- API 请求日志
|
||||
- 错误和异常
|
||||
- SQL 执行日志
|
||||
|
||||
**前端日志包含**:
|
||||
- Vite 构建信息
|
||||
- 开发服务器状态
|
||||
- 网络请求错误
|
||||
|
||||
## 🎯 使用场景
|
||||
|
||||
### 场景 1: 日常开发
|
||||
|
||||
```bash
|
||||
# 早上启动
|
||||
./start.sh
|
||||
|
||||
# 查看状态
|
||||
./status.sh
|
||||
|
||||
# 晚上下班停止
|
||||
./stop.sh
|
||||
```
|
||||
|
||||
### 场景 2: 快速重启
|
||||
|
||||
修改配置后重启:
|
||||
|
||||
```bash
|
||||
./restart.sh
|
||||
```
|
||||
|
||||
### 场景 3: 查看日志排查问题
|
||||
|
||||
```bash
|
||||
# 查看状态
|
||||
./status.sh
|
||||
|
||||
# 查看日志
|
||||
tail -f logs/backend.log
|
||||
```
|
||||
|
||||
### 场景 4: 团队协作
|
||||
|
||||
团队成员可以直接运行:
|
||||
|
||||
```bash
|
||||
./start.sh
|
||||
```
|
||||
|
||||
无需记忆复杂的启动命令!
|
||||
|
||||
## 🔍 故障排查
|
||||
|
||||
### 问题 1: 端口被占用
|
||||
|
||||
**症状**: 启动失败,提示端口已被使用
|
||||
|
||||
**解决方案**:
|
||||
|
||||
```bash
|
||||
# 查看占用端口的进程
|
||||
lsof -i :8000 # 后端
|
||||
lsof -i :5173 # 前端
|
||||
|
||||
# 停止进程
|
||||
./stop.sh
|
||||
|
||||
# 或手动杀进程
|
||||
kill -9 <PID>
|
||||
```
|
||||
|
||||
### 问题 2: 虚拟环境不存在
|
||||
|
||||
**症状**: `✗ 后端虚拟环境不存在`
|
||||
|
||||
**解决方案**:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 问题 3: 前端依赖未安装
|
||||
|
||||
**症状**: `✗ 前端依赖未安装`
|
||||
|
||||
**解决方案**:
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
```
|
||||
|
||||
### 问题 4: .env 文件缺失
|
||||
|
||||
**症状**: 配置错误或环境变量未设置
|
||||
|
||||
**解决方案**:
|
||||
|
||||
脚本会自动从 `.env.example` 创建 `.env`,但你需要手动填入真实配置:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
vi .env # 编辑配置文件
|
||||
```
|
||||
|
||||
### 问题 5: 进程残留
|
||||
|
||||
**症状**: 启动时有旧进程干扰
|
||||
|
||||
**解决方案**:
|
||||
|
||||
```bash
|
||||
# 停止所有服务
|
||||
./stop.sh
|
||||
|
||||
# 确认进程已停止
|
||||
./status.sh
|
||||
|
||||
# 重新启动
|
||||
./start.sh
|
||||
```
|
||||
|
||||
## 💡 高级用法
|
||||
|
||||
### 后台运行(生产环境)
|
||||
|
||||
如果需要在生产环境后台运行:
|
||||
|
||||
```bash
|
||||
# 使用 nohup
|
||||
nohup ./start.sh > logs/startup.log 2>&1 &
|
||||
|
||||
# 或使用 screen
|
||||
screen -S erp-ass
|
||||
./start.sh
|
||||
# 按 Ctrl+A+D 分离会话
|
||||
|
||||
# 或使用 tmux
|
||||
tmux new -s erp-ass
|
||||
./start.sh
|
||||
# 按 Ctrl+B+D 分离会话
|
||||
```
|
||||
|
||||
### 自定义端口
|
||||
|
||||
如果需要修改端口,编辑:
|
||||
|
||||
**后端端口**: `backend/app/main.py`
|
||||
```python
|
||||
uvicorn.run(app, host="0.0.0.0", port=8000) # 修改这里的端口
|
||||
```
|
||||
|
||||
**前端端口**: `frontend/vite.config.js`
|
||||
```javascript
|
||||
server: {
|
||||
port: 5173, // 修改这里的端口
|
||||
}
|
||||
```
|
||||
|
||||
### 开机自启动
|
||||
|
||||
创建 systemd 服务(Linux):
|
||||
|
||||
```bash
|
||||
sudo vi /etc/systemd/system/erp-ass.service
|
||||
```
|
||||
|
||||
内容:
|
||||
```ini
|
||||
[Unit]
|
||||
Description=ERP AI Assistant
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=your-user
|
||||
WorkingDirectory=/data/erp-ass
|
||||
ExecStart=/data/erp-ass/start.sh
|
||||
ExecStop=/data/erp-ass/stop.sh
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
启用服务:
|
||||
```bash
|
||||
sudo systemctl enable erp-ass
|
||||
sudo systemctl start erp-ass
|
||||
```
|
||||
|
||||
## 📱 访问地址
|
||||
|
||||
启动成功后,可以通过以下地址访问:
|
||||
|
||||
- **前端界面**: http://localhost:5173
|
||||
- **后端 API**: http://localhost:8000
|
||||
- **API 文档**: http://localhost:8000/docs
|
||||
- **健康检查**: http://localhost:8000/health
|
||||
|
||||
**局域网访问**:
|
||||
- 前端: http://192.168.x.x:5173
|
||||
- 后端: http://192.168.x.x:8000
|
||||
|
||||
## 🎨 对比传统方式
|
||||
|
||||
### 传统方式(需要两个终端)
|
||||
|
||||
**终端 1**:
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
python -m app.main
|
||||
```
|
||||
|
||||
**终端 2**:
|
||||
```bash
|
||||
cd frontend
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 一键启动
|
||||
|
||||
```bash
|
||||
./start.sh
|
||||
```
|
||||
|
||||
**优势**:
|
||||
- ✅ 一个命令完成所有启动
|
||||
- ✅ 自动环境检查
|
||||
- ✅ 统一日志管理
|
||||
- ✅ 进程 PID 管理
|
||||
- ✅ 健康检查
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [快速上手指南](QUICK_START.md)
|
||||
- [局域网访问配置](LAN_ACCESS.md)
|
||||
- [依赖问题修复](DEPENDENCY_FIXES.md)
|
||||
- [Gitea 配置](GITEA_CONFIG.md)
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2026-03-22
|
||||
**版本**: 1.0.0
|
||||
**兼容性**: Linux, macOS, Windows
|
||||
254
docs/SCRIPTS_SUMMARY.md
Normal file
254
docs/SCRIPTS_SUMMARY.md
Normal file
@@ -0,0 +1,254 @@
|
||||
# 一键启动脚本创建完成
|
||||
|
||||
## ✅ 已创建的文件
|
||||
|
||||
### Linux/Mac 脚本
|
||||
|
||||
1. **start.sh** - 一键启动脚本
|
||||
- 自动检查依赖环境
|
||||
- 启动后端和前端服务
|
||||
- 保存进程 PID
|
||||
- 健康检查
|
||||
|
||||
2. **stop.sh** - 停止脚本
|
||||
- 优雅停止所有进程
|
||||
- 强制清理残留进程
|
||||
- 清理 PID 文件
|
||||
|
||||
3. **restart.sh** - 重启脚本
|
||||
- 先停止后启动
|
||||
- 等待间隔确保完全停止
|
||||
|
||||
4. **status.sh** - 状态查看脚本
|
||||
- 检查服务运行状态
|
||||
- 显示进程信息
|
||||
- 提供日志查看命令
|
||||
|
||||
### Windows 脚本
|
||||
|
||||
1. **start.bat** - Windows 启动脚本
|
||||
- 在新窗口中启动服务
|
||||
- 自动检查环境
|
||||
|
||||
2. **stop.bat** - Windows 停止脚本
|
||||
- 查找并停止进程
|
||||
- 清理端口占用
|
||||
|
||||
### 文档
|
||||
|
||||
1. **docs/ONE_CLICK_START.md** - 详细使用指南
|
||||
- 使用方法
|
||||
- 故障排查
|
||||
- 高级用法
|
||||
|
||||
## 🎯 使用方法
|
||||
|
||||
### 首次使用
|
||||
|
||||
```bash
|
||||
# 1. 后端配置
|
||||
cd backend
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r requirements.txt
|
||||
cp .env.example .env
|
||||
# 编辑 .env 填入配置
|
||||
|
||||
# 2. 前端配置
|
||||
cd ../frontend
|
||||
npm install
|
||||
|
||||
# 3. 添加脚本执行权限
|
||||
cd ..
|
||||
chmod +x *.sh
|
||||
```
|
||||
|
||||
### 日常使用
|
||||
|
||||
```bash
|
||||
# 启动项目
|
||||
./start.sh
|
||||
|
||||
# 查看状态
|
||||
./status.sh
|
||||
|
||||
# 查看日志
|
||||
tail -f logs/backend.log
|
||||
tail -f logs/frontend.log
|
||||
|
||||
# 停止项目
|
||||
./stop.sh
|
||||
|
||||
# 重启项目
|
||||
./restart.sh
|
||||
```
|
||||
|
||||
## 📊 启动输出示例
|
||||
|
||||
```bash
|
||||
$ ./start.sh
|
||||
========================================
|
||||
ERP AI Assistant - 启动中...
|
||||
========================================
|
||||
|
||||
启动后端服务...
|
||||
PID: 12345
|
||||
日志: /data/erp-ass/logs/backend.log
|
||||
地址: http://localhost:8000
|
||||
|
||||
等待后端启动...
|
||||
✓ 后端启动成功
|
||||
|
||||
启动前端服务...
|
||||
PID: 12346
|
||||
日志: /data/erp-ass/logs/frontend.log
|
||||
地址: http://localhost:5173
|
||||
|
||||
等待前端启动...
|
||||
✓ 前端启动成功
|
||||
|
||||
========================================
|
||||
✅ 启动完成!
|
||||
========================================
|
||||
|
||||
📍 访问地址:
|
||||
前端: http://localhost:5173
|
||||
后端: http://localhost:8000
|
||||
API文档: http://localhost:8000/docs
|
||||
|
||||
📋 管理命令:
|
||||
查看日志: tail -f logs/backend.log
|
||||
停止服务: ./stop.sh
|
||||
重启服务: ./restart.sh
|
||||
```
|
||||
|
||||
## 💡 核心特性
|
||||
|
||||
### 1. 环境检查
|
||||
|
||||
脚本会自动检查:
|
||||
- ✅ Python 虚拟环境是否存在
|
||||
- ✅ 前端依赖是否安装
|
||||
- ✅ .env 配置文件是否存在
|
||||
|
||||
如果缺失,会给出明确的提示。
|
||||
|
||||
### 2. 进程管理
|
||||
|
||||
- 自动清理旧进程
|
||||
- 保存进程 PID 到 `logs/pids.txt`
|
||||
- 支持优雅停止和强制停止
|
||||
|
||||
### 3. 日志管理
|
||||
|
||||
- 后端日志: `logs/backend.log`
|
||||
- 前端日志: `logs/frontend.log`
|
||||
- 支持 `tail -f` 实时查看
|
||||
|
||||
### 4. 健康检查
|
||||
|
||||
- 启动后自动检查服务是否正常运行
|
||||
- 后端检查: `http://localhost:8000/health`
|
||||
- 前端检查: `http://localhost:5173`
|
||||
|
||||
## 🔄 对比传统方式
|
||||
|
||||
### 传统方式(需要两个终端)
|
||||
|
||||
**终端 1**:
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
python -m app.main
|
||||
```
|
||||
|
||||
**终端 2**:
|
||||
```bash
|
||||
cd frontend
|
||||
npm run dev
|
||||
```
|
||||
|
||||
**缺点**:
|
||||
- 占用两个终端窗口
|
||||
- 需要记忆多个命令
|
||||
- 没有统一的日志管理
|
||||
- 没有进程管理
|
||||
|
||||
### 一键启动
|
||||
|
||||
```bash
|
||||
./start.sh
|
||||
```
|
||||
|
||||
**优点**:
|
||||
- ✅ 一个命令完成所有启动
|
||||
- ✅ 只占用一个终端
|
||||
- ✅ 自动环境检查
|
||||
- ✅ 统一日志管理
|
||||
- ✅ 进程 PID 管理
|
||||
- ✅ 健康检查
|
||||
- ✅ 友好的输出信息
|
||||
|
||||
## 🐛 已知问题和解决方案
|
||||
|
||||
### 问题 1: 权限不足
|
||||
|
||||
**症状**: `bash: ./start.sh: Permission denied`
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
chmod +x *.sh
|
||||
```
|
||||
|
||||
### 问题 2: 虚拟环境路径问题
|
||||
|
||||
**症状**: 虚拟环境激活失败
|
||||
|
||||
**解决方案**:
|
||||
确保在项目根目录运行脚本,或使用绝对路径。
|
||||
|
||||
### 问题 3: 端口被占用
|
||||
|
||||
**症状**: 启动失败,端口已被使用
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 查看端口占用
|
||||
lsof -i :8000
|
||||
lsof -i :5173
|
||||
|
||||
# 停止服务
|
||||
./stop.sh
|
||||
|
||||
# 或手动杀进程
|
||||
kill -9 <PID>
|
||||
```
|
||||
|
||||
## 📚 下一步
|
||||
|
||||
1. **测试脚本**: 运行 `./start.sh` 测试启动
|
||||
2. **查看状态**: 运行 `./status.sh` 查看服务状态
|
||||
3. **访问应用**: 打开 http://localhost:5173
|
||||
4. **查看日志**: `tail -f logs/backend.log`
|
||||
|
||||
## 🎉 总结
|
||||
|
||||
现在你可以通过一个命令启动整个项目了!
|
||||
|
||||
**Linux/Mac**:
|
||||
- 启动: `./start.sh`
|
||||
- 停止: `./stop.sh`
|
||||
- 状态: `./status.sh`
|
||||
- 重启: `./restart.sh`
|
||||
|
||||
**Windows**:
|
||||
- 启动: `start.bat`
|
||||
- 停止: `stop.bat`
|
||||
|
||||
不再需要手动打开多个终端窗口!
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2026-03-22
|
||||
**文件数量**: 7 个(4 个 Linux/Mac 脚本 + 2 个 Windows 脚本 + 1 个文档)
|
||||
**所有脚本已添加执行权限**
|
||||
25
restart.sh
Executable file
25
restart.sh
Executable file
@@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# ERP AI Assistant - 重启脚本
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 项目根目录
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} ERP AI Assistant - 重启中...${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 停止服务
|
||||
"$PROJECT_ROOT/stop.sh"
|
||||
|
||||
# 等待进程完全停止
|
||||
sleep 2
|
||||
|
||||
# 启动服务
|
||||
"$PROJECT_ROOT/start.sh"
|
||||
66
start.bat
Normal file
66
start.bat
Normal file
@@ -0,0 +1,66 @@
|
||||
@echo off
|
||||
REM ERP AI Assistant - Windows 启动脚本
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
echo ========================================
|
||||
echo ERP AI Assistant - 启动中...
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
REM 项目根目录
|
||||
set PROJECT_ROOT=%~dp0
|
||||
set BACKEND_DIR=%PROJECT_ROOT%backend
|
||||
set FRONTEND_DIR=%PROJECT_ROOT%frontend
|
||||
set LOGS_DIR=%PROJECT_ROOT%logs
|
||||
|
||||
REM 创建日志目录
|
||||
if not exist "%LOGS_DIR%" mkdir "%LOGS_DIR%"
|
||||
|
||||
REM 检查虚拟环境
|
||||
if not exist "%BACKEND_DIR%\venv" (
|
||||
echo [错误] 后端虚拟环境不存在
|
||||
echo 请先运行: cd backend ^&^& python -m venv venv ^&^& pip install -r requirements.txt
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 检查 node_modules
|
||||
if not exist "%FRONTEND_DIR%\node_modules" (
|
||||
echo [错误] 前端依赖未安装
|
||||
echo 请先运行: cd frontend ^&^& npm install
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM 检查 .env 文件
|
||||
if not exist "%BACKEND_DIR%\.env" (
|
||||
echo [警告] .env 文件不存在,使用 .env.example
|
||||
copy "%BACKEND_DIR%\.env.example" "%BACKEND_DIR%\.env" > nul
|
||||
)
|
||||
|
||||
echo 启动后端服务...
|
||||
cd /d "%BACKEND_DIR%"
|
||||
start "ERP AI Assistant - Backend" cmd /c "venv\Scripts\activate && python -m app.main"
|
||||
echo 后端地址: http://localhost:8000
|
||||
echo API文档: http://localhost:8000/docs
|
||||
|
||||
echo.
|
||||
echo 启动前端服务...
|
||||
cd /d "%FRONTEND_DIR%"
|
||||
start "ERP AI Assistant - Frontend" cmd /c "npm run dev"
|
||||
echo 前端地址: http://localhost:5173
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 启动完成!
|
||||
echo ========================================
|
||||
echo.
|
||||
echo 前端地址: http://localhost:5173
|
||||
echo 后端地址: http://localhost:8000
|
||||
echo API文档: http://localhost:8000/docs
|
||||
echo.
|
||||
echo 提示: 后端和前端已在新窗口中启动
|
||||
echo 关闭窗口即可停止服务
|
||||
echo.
|
||||
|
||||
cd /d "%PROJECT_ROOT%"
|
||||
pause
|
||||
128
start.sh
Executable file
128
start.sh
Executable file
@@ -0,0 +1,128 @@
|
||||
#!/bin/bash
|
||||
# ERP AI Assistant - 一键启动脚本
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 项目根目录
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKEND_DIR="$PROJECT_ROOT/backend"
|
||||
FRONTEND_DIR="$PROJECT_ROOT/frontend"
|
||||
LOGS_DIR="$PROJECT_ROOT/logs"
|
||||
|
||||
# 创建日志目录
|
||||
mkdir -p "$LOGS_DIR"
|
||||
|
||||
# 日志文件
|
||||
BACKEND_LOG="$LOGS_DIR/backend.log"
|
||||
FRONTEND_LOG="$LOGS_DIR/frontend.log"
|
||||
PID_FILE="$LOGS_DIR/pids.txt"
|
||||
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} ERP AI Assistant - 启动中...${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查虚拟环境
|
||||
if [ ! -d "$BACKEND_DIR/venv" ]; then
|
||||
echo -e "${RED}✗ 后端虚拟环境不存在${NC}"
|
||||
echo -e "${YELLOW} 请先运行: cd backend && python3 -m venv venv && pip install -r requirements.txt${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 node_modules
|
||||
if [ ! -d "$FRONTEND_DIR/node_modules" ]; then
|
||||
echo -e "${RED}✗ 前端依赖未安装${NC}"
|
||||
echo -e "${YELLOW} 请先运行: cd frontend && npm install${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 .env 文件
|
||||
if [ ! -f "$BACKEND_DIR/.env" ]; then
|
||||
echo -e "${YELLOW}⚠ .env 文件不存在,使用 .env.example${NC}"
|
||||
cp "$BACKEND_DIR/.env.example" "$BACKEND_DIR/.env"
|
||||
fi
|
||||
|
||||
# 清理旧进程
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
echo -e "${YELLOW}停止旧进程...${NC}"
|
||||
while read pid; do
|
||||
if kill -0 "$pid" 2>/dev/null; then
|
||||
kill "$pid" 2>/dev/null || true
|
||||
fi
|
||||
done < "$PID_FILE"
|
||||
rm -f "$PID_FILE"
|
||||
sleep 2
|
||||
fi
|
||||
|
||||
# 清空日志
|
||||
> "$BACKEND_LOG"
|
||||
> "$FRONTEND_LOG"
|
||||
|
||||
echo -e "${GREEN}启动后端服务...${NC}"
|
||||
cd "$BACKEND_DIR"
|
||||
source venv/bin/activate
|
||||
nohup python -m app.main >> "$BACKEND_LOG" 2>&1 &
|
||||
BACKEND_PID=$!
|
||||
echo "$BACKEND_PID" >> "$PID_FILE"
|
||||
echo -e " PID: $BACKEND_PID"
|
||||
echo -e " 日志: $BACKEND_LOG"
|
||||
echo -e " 地址: ${GREEN}http://localhost:8000${NC}"
|
||||
|
||||
# 等待后端启动
|
||||
echo -e "\n${YELLOW}等待后端启动...${NC}"
|
||||
sleep 3
|
||||
|
||||
# 检查后端是否成功启动
|
||||
if curl -s http://localhost:8000/health > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✓ 后端启动成功${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 后端可能还在启动中,请稍后检查日志${NC}"
|
||||
fi
|
||||
|
||||
echo -e "\n${GREEN}启动前端服务...${NC}"
|
||||
cd "$FRONTEND_DIR"
|
||||
nohup npm run dev >> "$FRONTEND_LOG" 2>&1 &
|
||||
FRONTEND_PID=$!
|
||||
echo "$FRONTEND_PID" >> "$PID_FILE"
|
||||
echo -e " PID: $FRONTEND_PID"
|
||||
echo -e " 日志: $FRONTEND_LOG"
|
||||
echo -e " 地址: ${GREEN}http://localhost:5173${NC}"
|
||||
|
||||
# 等待前端启动
|
||||
echo -e "\n${YELLOW}等待前端启动...${NC}"
|
||||
sleep 5
|
||||
|
||||
# 检查前端是否成功启动
|
||||
if curl -s http://localhost:5173 > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✓ 前端启动成功${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ 前端可能还在启动中,请稍后检查日志${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} ✅ 启动完成!${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo ""
|
||||
echo -e "📍 访问地址:"
|
||||
echo -e " 前端: ${BLUE}http://localhost:5173${NC}"
|
||||
echo -e " 后端: ${BLUE}http://localhost:8000${NC}"
|
||||
echo -e " API文档: ${BLUE}http://localhost:8000/docs${NC}"
|
||||
echo ""
|
||||
echo -e "📋 管理命令:"
|
||||
echo -e " 查看日志: ${YELLOW}tail -f logs/backend.log${NC} 或 ${YELLOW}tail -f logs/frontend.log${NC}"
|
||||
echo -e " 停止服务: ${YELLOW}./stop.sh${NC}"
|
||||
echo -e " 重启服务: ${YELLOW}./restart.sh${NC}"
|
||||
echo ""
|
||||
echo -e "💡 提示:"
|
||||
echo -e " - 后端日志: $BACKEND_LOG"
|
||||
echo -e " - 前端日志: $FRONTEND_LOG"
|
||||
echo -e " - 进程 PID 已保存到: $PID_FILE"
|
||||
echo ""
|
||||
70
status.sh
Executable file
70
status.sh
Executable file
@@ -0,0 +1,70 @@
|
||||
#!/bin/bash
|
||||
# ERP AI Assistant - 状态检查脚本
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 项目根目录
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PID_FILE="$PROJECT_ROOT/logs/pids.txt"
|
||||
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} ERP AI Assistant - 服务状态${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 检查后端
|
||||
echo -e "${YELLOW}后端服务:${NC}"
|
||||
if curl -s http://localhost:8000/health > /dev/null 2>&1; then
|
||||
HEALTH=$(curl -s http://localhost:8000/health)
|
||||
echo -e " 状态: ${GREEN}✓ 运行中${NC}"
|
||||
echo -e " 地址: http://localhost:8000"
|
||||
echo -e " API文档: http://localhost:8000/docs"
|
||||
echo -e " 健康检查: $HEALTH"
|
||||
else
|
||||
echo -e " 状态: ${RED}✗ 未运行${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查前端
|
||||
echo -e "${YELLOW}前端服务:${NC}"
|
||||
if curl -s http://localhost:5173 > /dev/null 2>&1; then
|
||||
echo -e " 状态: ${GREEN}✓ 运行中${NC}"
|
||||
echo -e " 地址: http://localhost:5173"
|
||||
else
|
||||
echo -e " 状态: ${RED}✗ 未运行${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# 显示进程信息
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
echo -e "${YELLOW}进程信息:${NC}"
|
||||
while read pid; do
|
||||
if kill -0 "$pid" 2>/dev/null; then
|
||||
PROCESS_INFO=$(ps -p "$pid" -o pid,ppid,cmd --no-headers 2>/dev/null || echo "$pid (进程信息不可用)")
|
||||
echo -e " ${GREEN}✓${NC} PID $PROCESS_INFO"
|
||||
else
|
||||
echo -e " ${RED}✗${NC} PID $pid (已停止)"
|
||||
fi
|
||||
done < "$PID_FILE"
|
||||
else
|
||||
echo -e "${YELLOW}未找到 PID 文件${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 日志提示
|
||||
if [ -d "$PROJECT_ROOT/logs" ]; then
|
||||
echo -e "${YELLOW}💡 查看日志:${NC}"
|
||||
echo -e " 后端: tail -f $PROJECT_ROOT/logs/backend.log"
|
||||
echo -e " 前端: tail -f $PROJECT_ROOT/logs/frontend.log"
|
||||
echo ""
|
||||
fi
|
||||
39
stop.bat
Normal file
39
stop.bat
Normal file
@@ -0,0 +1,39 @@
|
||||
@echo off
|
||||
REM ERP AI Assistant - Windows 停止脚本
|
||||
|
||||
echo ========================================
|
||||
echo ERP AI Assistant - 停止中...
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
echo 查找并停止后端进程...
|
||||
for /f "tokens=2" %%i in ('tasklist ^| findstr /i "python.*app.main"') do (
|
||||
echo 停止进程: %%i
|
||||
taskkill /PID %%i /F > nul 2>&1
|
||||
)
|
||||
|
||||
echo 查找并停止前端进程...
|
||||
for /f "tokens=2" %%i in ('tasklist ^| findstr /i "node.*vite"') do (
|
||||
echo 停止进程: %%i
|
||||
taskkill /PID %%i /F > nul 2>&1
|
||||
)
|
||||
|
||||
REM 也尝试通过端口查找进程
|
||||
echo 检查端口占用...
|
||||
for /f "tokens=5" %%a in ('netstat -aon ^| findstr ":8000" ^| findstr "LISTENING"') do (
|
||||
echo 停止后端进程: %%a
|
||||
taskkill /PID %%a /F > nul 2>&1
|
||||
)
|
||||
|
||||
for /f "tokens=5" %%a in ('netstat -aon ^| findstr ":5173" ^| findstr "LISTENING"') do (
|
||||
echo 停止前端进程: %%a
|
||||
taskkill /PID %%a /F > nul 2>&1
|
||||
)
|
||||
|
||||
echo.
|
||||
echo ========================================
|
||||
echo 停止完成
|
||||
echo ========================================
|
||||
echo.
|
||||
|
||||
pause
|
||||
69
stop.sh
Executable file
69
stop.sh
Executable file
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# ERP AI Assistant - 停止脚本
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 项目根目录
|
||||
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PID_FILE="$PROJECT_ROOT/logs/pids.txt"
|
||||
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo -e "${BLUE} ERP AI Assistant - 停止中...${NC}"
|
||||
echo -e "${BLUE}========================================${NC}"
|
||||
echo ""
|
||||
|
||||
if [ ! -f "$PID_FILE" ]; then
|
||||
echo -e "${YELLOW}⚠ 未找到 PID 文件,服务可能未运行${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 读取并停止进程
|
||||
STOPPED=0
|
||||
FAILED=0
|
||||
|
||||
while read pid; do
|
||||
if kill -0 "$pid" 2>/dev/null; then
|
||||
PROCESS_NAME=$(ps -p "$pid" -o comm= 2>/dev/null || echo "Unknown")
|
||||
echo -e "${YELLOW}停止进程: $pid ($PROCESS_NAME)${NC}"
|
||||
if kill "$pid" 2>/dev/null; then
|
||||
echo -e "${GREEN}✓ 进程 $pid 已停止${NC}"
|
||||
((STOPPED++))
|
||||
else
|
||||
echo -e "${RED}✗ 无法停止进程 $pid${NC}"
|
||||
((FAILED++))
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW} 进程 $pid 已不存在${NC}"
|
||||
fi
|
||||
done < "$PID_FILE"
|
||||
|
||||
# 等待进程完全停止
|
||||
sleep 2
|
||||
|
||||
# 强制杀死残留进程
|
||||
while read pid; do
|
||||
if kill -0 "$pid" 2>/dev/null; then
|
||||
echo -e "${YELLOW}强制停止进程: $pid${NC}"
|
||||
kill -9 "$pid" 2>/dev/null || true
|
||||
fi
|
||||
done < "$PID_FILE"
|
||||
|
||||
# 清理 PID 文件
|
||||
rm -f "$PID_FILE"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} ✅ 停止完成${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e " 已停止: $STOPPED 个进程"
|
||||
if [ $FAILED -gt 0 ]; then
|
||||
echo -e " 失败: ${RED}$FAILED${NC} 个进程"
|
||||
fi
|
||||
echo ""
|
||||
Reference in New Issue
Block a user