Files
Meeting_Assistant/DEPLOYMENT.md
egg 58f379bc0c feat: Add embedded backend packaging for all-in-one deployment
- Add backend/run_server.py entry point for embedded deployment
- Add backend/build.py PyInstaller script for backend packaging
- Modify config.py to support frozen executable paths
- Extend client/config.json with backend configuration section
- Add backend sidecar management in Electron main process
- Add Whisper model download progress reporting
- Update build-client.bat with --embedded-backend flag
- Update DEPLOYMENT.md with all-in-one deployment documentation

This enables packaging frontend and backend into a single executable
for simplified enterprise deployment. Backward compatible with
existing separate deployment mode (backend.embedded: false).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-17 10:06:29 +08:00

427 lines
10 KiB
Markdown
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.

# Meeting Assistant Deployment Guide
## Prerequisites
- Python 3.10+
- Node.js 18+
- MySQL 8.0+
- Access to Dify LLM service
## Quick Start
Use the startup script to run all services locally:
```bash
# Check environment
./start.sh check
# Start all services
./start.sh start
# Stop all services
./start.sh stop
# View status
./start.sh status
```
## Backend Deployment
### Quick Start (One-Click Setup)
使用一鍵設置腳本自動安裝依賴並啟動服務:
**Linux/macOS/WSL:**
```bash
./scripts/setup-backend.sh start
```
**Windows:**
```batch
.\scripts\setup-backend.bat start
```
**腳本命令:**
| 命令 | 說明 |
|------|------|
| `setup` | 僅設置環境(安裝依賴) |
| `start` | 設置並啟動後端服務(預設) |
| `stop` | 停止後端服務 |
| `--port PORT` | 指定服務端口(預設: 8000 |
| `--no-sidecar` | 不安裝 Sidecar 依賴 |
### Manual Setup
### 1. Setup Environment
```bash
cd backend
# Create virtual environment
python -m venv venv
source venv/bin/activate # Linux/Mac
# or: venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
```
### 2. Configure Environment Variables
```bash
# Copy example and edit
cp .env.example .env
```
**Required Environment Variables:**
| Variable | Description |
|----------|-------------|
| `BACKEND_HOST` | Server bind address (default: 0.0.0.0) |
| `BACKEND_PORT` | Server port (default: 8000) |
| `DB_HOST`, `DB_PORT`, `DB_USER`, `DB_PASS`, `DB_NAME` | MySQL connection |
| `AUTH_API_URL` | Company authentication API |
| `DIFY_API_URL`, `DIFY_API_KEY`, `DIFY_STT_API_KEY` | Dify API settings |
| `ADMIN_EMAIL` | Admin user email |
| `JWT_SECRET` | JWT signing secret (generate secure random string) |
**Optional Environment Variables:**
| Variable | Description | Default |
|----------|-------------|---------|
| `DB_POOL_SIZE` | Database connection pool size | 5 |
| `JWT_EXPIRE_HOURS` | JWT token expiration | 24 |
| `UPLOAD_TIMEOUT` | File upload timeout (ms) | 600000 |
| `DIFY_STT_TIMEOUT` | STT processing timeout (ms) | 300000 |
| `LLM_TIMEOUT` | LLM request timeout (ms) | 120000 |
| `MAX_FILE_SIZE` | Max upload size (bytes) | 524288000 |
See `backend/.env.example` for complete documentation.
### 3. Run Server
```bash
# Development
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Production
uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4
```
### 4. Verify Deployment
```bash
curl http://localhost:8000/api/health
# Should return: {"status":"healthy","service":"meeting-assistant"}
```
### 5. Production Deployment (1Panel)
For detailed server deployment instructions including Nginx, systemd, and SSL configuration, see:
📖 **[docs/1panel-deployment.md](docs/1panel-deployment.md)**
Or use the deployment script:
```bash
sudo ./scripts/deploy-backend.sh install --port 8000
```
## Electron Client Deployment
### 1. Prerequisites
- **Windows**: Node.js 18+, Python 3.10+ (for building Sidecar)
- **Disk Space**: 5GB+ recommended (Whisper model + build artifacts)
### 2. Quick Build (Windows)
使用一鍵打包腳本在 Windows 上建置免安裝執行檔:
```batch
# 完整建置(使用預設 localhost
.\scripts\build-client.bat build --clean
# 指定後端 API URL
.\scripts\build-client.bat build --api-url "http://192.168.1.100:8000/api" --clean
# 使用公司伺服器
.\scripts\build-client.bat build --api-url "https://api.company.com/api"
# 僅打包 Electron已打包過 Sidecar
.\scripts\build-client.bat build --skip-sidecar --api-url "http://your-server:8000/api"
```
或使用 PowerShell
```powershell
.\scripts\build-all.ps1 -ApiUrl "http://192.168.1.100:8000/api" -Clean
```
**打包腳本參數:**
| 參數 | 說明 |
|------|------|
| `--api-url URL` | 後端 API URL會寫入 config.json |
| `--skip-sidecar` | 跳過 Sidecar 打包(已打包過時使用) |
| `--clean` | 建置前清理所有暫存檔案 |
### 3. Runtime Configuration
打包後的 exe 會讀取 `config.json` 中的設定:
```json
{
"apiBaseUrl": "http://localhost:8000/api",
"uploadTimeout": 600000,
"appTitle": "Meeting Assistant",
"whisper": {
"model": "medium",
"device": "cpu",
"compute": "int8"
}
}
```
**方式一**:打包時指定(推薦)
```batch
.\scripts\build-client.bat build --api-url "http://your-server:8000/api"
```
**方式二**:打包前手動編輯 `client/config.json`
**方式三**:打包後修改(適合測試)
- 執行檔旁邊的 `resources/config.json` 可在打包後修改
### 4. Manual Setup (Development)
```bash
cd client
# Install dependencies
npm install
# Start in development mode
npm start
```
### 5. Build Output
建置完成後,輸出檔案位於:
- `client/dist/` - Electron 打包輸出
- `build/` - 最終整合輸出(含 exe
**輸出檔案:**
- `Meeting Assistant-1.0.0-portable.exe` - 免安裝執行檔
### 6. GitHub Actions (CI/CD)
也可以使用 GitHub Actions 自動建置:
1. 前往 GitHub Repository → Actions
2. 選擇 "Build Windows Client"
3. 點擊 "Run workflow"
4. 輸入 `api_url` 參數(例如 `http://192.168.1.100:8000/api`
5. 等待建置完成後下載 artifact
## All-in-One Deployment (全包部署模式)
此模式將前端、後端、Whisper 全部打包成單一執行檔,用戶雙擊即可使用,無需額外設置後端服務。
### 適用場景
- 企業內部部署,簡化用戶操作
- 無法獨立架設後端的環境
- 快速測試和演示
### 打包方式
```batch
# Windows 全包打包
.\scripts\build-client.bat build --embedded-backend --clean
```
### config.json 配置
全包模式需要在 `config.json` 中配置資料庫和 API 金鑰:
```json
{
"apiBaseUrl": "http://localhost:8000/api",
"uploadTimeout": 600000,
"appTitle": "Meeting Assistant",
"whisper": {
"model": "medium",
"device": "cpu",
"compute": "int8"
},
"backend": {
"embedded": true,
"host": "127.0.0.1",
"port": 8000,
"database": {
"host": "mysql.theaken.com",
"port": 33306,
"user": "your_username",
"password": "your_password",
"database": "your_database"
},
"externalApis": {
"authApiUrl": "https://pj-auth-api.vercel.app/api/auth/login",
"difyApiUrl": "https://dify.theaken.com/v1",
"difyApiKey": "app-xxxxxxxxxx",
"difySttApiKey": "app-xxxxxxxxxx"
},
"auth": {
"adminEmail": "admin@example.com",
"jwtSecret": "your_secure_jwt_secret",
"jwtExpireHours": 24
}
}
}
```
### 配置說明
| 區段 | 欄位 | 說明 |
|------|------|------|
| `backend.embedded` | `true`/`false` | 啟用/停用內嵌後端模式 |
| `backend.host` | IP | 後端監聽地址(通常為 127.0.0.1 |
| `backend.port` | 數字 | 後端監聽端口(預設 8000 |
| `backend.database.*` | 各欄位 | MySQL 資料庫連線資訊 |
| `backend.externalApis.*` | 各欄位 | 外部 API 設定認證、Dify |
| `backend.auth.*` | 各欄位 | 認證設定管理員信箱、JWT 金鑰) |
### 啟動流程
1. 用戶雙擊 exe
2. Electron 主程序啟動
3. 讀取 `config.json`
4. 啟動內嵌後端 (FastAPI)
5. 健康檢查等待後端就緒(最多 30 秒)
6. 後端就緒後,載入前端頁面
7. 啟動 Whisper Sidecar
8. 應用就緒
### 向後相容性
此功能完全向後相容,不影響既有部署方式:
| 部署方式 | config.json 設定 | 說明 |
|---------|------------------|------|
| 分離部署(預設) | `backend.embedded: false` | 前端連接遠端後端,使用 `apiBaseUrl` |
| 全包部署(新增) | `backend.embedded: true` | 前端內嵌後端,雙擊即可使用 |
### 安全注意事項
⚠️ **重要**:全包模式的 `config.json` 包含敏感資訊資料庫密碼、API 金鑰),請確保:
1. 不要將含有真實憑證的 config.json 提交到版本控制
2. 部署時由 IT 管理員配置敏感資訊
3. 考慮使用環境變數覆蓋敏感設定(環境變數優先級較高)
### Whisper 模型下載進度
首次運行時Whisper 模型(約 1.5GB)會自動下載。新版本會顯示下載進度:
- `⬇️ Downloading medium: 45% (675/1530 MB)` - 下載中
- `⏳ Loading medium...` - 載入模型中
- `✅ Ready` - 就緒
## Transcription Sidecar
### 1. Setup
```bash
cd sidecar
# Create virtual environment
python -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
pip install pyinstaller
```
### 2. Download Whisper Model
The model will be downloaded automatically on first run. For faster startup, pre-download:
```python
from faster_whisper import WhisperModel
model = WhisperModel("medium", device="cpu", compute_type="int8")
```
### 3. Build Executable
```bash
python build.py
```
The executable will be in `sidecar/dist/transcriber`.
### 4. Package with Electron
Copy `sidecar/dist/` to `client/sidecar/` before building Electron app.
## Database Setup
The backend will automatically create tables on first startup. To manually verify:
```sql
USE your_database;
SHOW TABLES LIKE 'meeting_%';
```
Expected tables:
- `meeting_users`
- `meeting_records`
- `meeting_conclusions`
- `meeting_action_items`
## Testing
### Backend Tests
```bash
cd backend
pytest tests/ -v
```
### Performance Verification
On target hardware (i5/8GB):
1. Start the Electron app
2. Record 1 minute of audio
3. Verify transcription completes within acceptable time
4. Test AI summarization with the transcript
## Troubleshooting
### Database Connection Issues
1. Verify MySQL is accessible from server
2. Check firewall rules for database port
3. Verify credentials in .env
### Dify API Issues
1. Verify API key is valid
2. Check Dify service status
3. Review timeout settings for long transcripts (adjust `DIFY_STT_TIMEOUT`, `LLM_TIMEOUT`)
### Transcription Issues
1. Verify microphone permissions
2. Check sidecar executable runs standalone
3. Review audio format (16kHz, 16-bit, mono)
4. Try different `WHISPER_MODEL` sizes (tiny, base, small, medium)
## Security Notes
- Never commit `.env` files to version control
- Keep JWT_SECRET secure and unique per deployment
- Ensure HTTPS in production (see [1panel-deployment.md](docs/1panel-deployment.md))
- Regular security updates for dependencies