Files
Meeting_Assistant/docs/1panel-deployment.md
egg 01aee1fd0d feat: Extract hardcoded configs to environment variables
- Add environment variable configuration for backend and frontend
- Backend: DB_POOL_SIZE, JWT_EXPIRE_HOURS, timeout configs, directory paths
- Frontend: VITE_API_BASE_URL, VITE_UPLOAD_TIMEOUT, Whisper configs
- Create deployment script (scripts/deploy-backend.sh)
- Create 1Panel deployment guide (docs/1panel-deployment.md)
- Update DEPLOYMENT.md with env var documentation
- Create README.md with project overview
- Remove obsolete PRD.md, SDD.md, TDD.md (replaced by OpenSpec)
- Keep CORS allow_origins=["*"] for Electron EXE distribution

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-14 14:31:55 +08:00

462 lines
10 KiB
Markdown

# Meeting Assistant 後端部署指南 (1Panel)
本文件說明如何在 1Panel 服務器上獨立部署 Meeting Assistant 後端服務。
## 目錄
1. [系統需求](#系統需求)
2. [快速部署](#快速部署)
3. [手動部署](#手動部署)
4. [Nginx 反向代理配置](#nginx-反向代理配置)
5. [SSL 證書配置](#ssl-證書配置)
6. [環境變數配置](#環境變數配置)
7. [維護與監控](#維護與監控)
8. [常見問題](#常見問題)
---
## 系統需求
### 硬體需求
- CPU: 2 核心以上
- 記憶體: 2GB 以上
- 硬碟: 10GB 以上可用空間
### 軟體需求
- 操作系統: Ubuntu 20.04+ / Debian 11+ / CentOS 8+
- Python: 3.10 或更高版本
- 1Panel: 已安裝並運行
### 網路需求
- 開放端口: 8000 (或自定義端口)
- 能夠連接外部 MySQL 數據庫
- 能夠連接 Dify API 服務
---
## 快速部署
使用部署腳本一鍵安裝:
```bash
# 1. 上傳專案到服務器
scp -r Meeting_Assistant user@server:/tmp/
# 2. 執行安裝腳本
cd /tmp/Meeting_Assistant
sudo ./scripts/deploy-backend.sh install --port 8000
# 3. 編輯配置檔案
sudo nano /opt/meeting-assistant/.env
# 4. 重啟服務
sudo systemctl restart meeting-assistant-backend
```
### 腳本選項
```bash
# 查看幫助
./scripts/deploy-backend.sh help
# 自定義安裝目錄和端口
sudo ./scripts/deploy-backend.sh install --dir /opt/my-app --port 8080
# 更新服務
sudo ./scripts/deploy-backend.sh update
# 查看狀態
./scripts/deploy-backend.sh status
# 查看日誌
./scripts/deploy-backend.sh logs
# 移除服務
sudo ./scripts/deploy-backend.sh uninstall
```
---
## 手動部署
如果需要更精細的控制,可以按以下步驟手動部署。
### 步驟 1: 安裝系統依賴
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
```
**CentOS/RHEL:**
```bash
sudo dnf install -y python3 python3-pip python3-devel
```
### 步驟 2: 創建應用目錄
```bash
# 創建目錄
sudo mkdir -p /opt/meeting-assistant
sudo mkdir -p /opt/meeting-assistant/logs
sudo mkdir -p /opt/meeting-assistant/templates
sudo mkdir -p /opt/meeting-assistant/records
# 創建服務用戶
sudo useradd --system --no-create-home --shell /bin/false meeting
# 設置權限
sudo chown -R meeting:meeting /opt/meeting-assistant
```
### 步驟 3: 部署代碼
```bash
# 複製後端代碼
sudo cp -r backend/app /opt/meeting-assistant/
sudo cp backend/requirements.txt /opt/meeting-assistant/
sudo cp backend/.env.example /opt/meeting-assistant/.env
# 複製模板檔案(如果有)
sudo cp -r backend/templates/* /opt/meeting-assistant/templates/ 2>/dev/null || true
```
### 步驟 4: 創建虛擬環境並安裝依賴
```bash
cd /opt/meeting-assistant
# 創建虛擬環境
sudo python3 -m venv venv
# 安裝依賴
sudo ./venv/bin/pip install --upgrade pip
sudo ./venv/bin/pip install -r requirements.txt
# 設置權限
sudo chown -R meeting:meeting /opt/meeting-assistant
```
### 步驟 5: 配置環境變數
編輯 `/opt/meeting-assistant/.env`:
```bash
sudo nano /opt/meeting-assistant/.env
```
最小必要配置:
```env
# 服務器配置
BACKEND_HOST=0.0.0.0
BACKEND_PORT=8000
# 數據庫配置 (必須)
DB_HOST=your-mysql-host.com
DB_PORT=3306
DB_USER=your_user
DB_PASS=your_password
DB_NAME=your_database
# Dify API 配置 (必須)
DIFY_API_URL=https://your-dify-server.com/v1
DIFY_API_KEY=your-dify-api-key
DIFY_STT_API_KEY=your-dify-stt-api-key
# 認證 API (必須)
AUTH_API_URL=https://your-auth-api.com/api/auth/login
ADMIN_EMAIL=admin@company.com
JWT_SECRET=your-secure-jwt-secret
```
設置配置檔案權限:
```bash
sudo chmod 640 /opt/meeting-assistant/.env
sudo chown meeting:meeting /opt/meeting-assistant/.env
```
### 步驟 6: 創建 Systemd 服務
創建服務檔案 `/etc/systemd/system/meeting-assistant-backend.service`:
```bash
sudo nano /etc/systemd/system/meeting-assistant-backend.service
```
內容:
```ini
[Unit]
Description=Meeting Assistant Backend API
After=network.target
[Service]
Type=simple
User=meeting
Group=meeting
WorkingDirectory=/opt/meeting-assistant
Environment="PATH=/opt/meeting-assistant/venv/bin"
EnvironmentFile=/opt/meeting-assistant/.env
ExecStart=/opt/meeting-assistant/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=journal
# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/meeting-assistant/logs /opt/meeting-assistant/records /opt/meeting-assistant/templates
PrivateTmp=true
[Install]
WantedBy=multi-user.target
```
### 步驟 7: 啟動服務
```bash
# 重新載入 systemd
sudo systemctl daemon-reload
# 啟用開機自動啟動
sudo systemctl enable meeting-assistant-backend
# 啟動服務
sudo systemctl start meeting-assistant-backend
# 檢查狀態
sudo systemctl status meeting-assistant-backend
```
---
## Nginx 反向代理配置
### 在 1Panel 中配置
1. 登入 1Panel 管理介面
2. 進入「網站」→「創建網站」
3. 選擇「反向代理」
4. 配置以下內容:
- 主域名: `meeting-api.yourdomain.com`
- 代理地址: `http://127.0.0.1:8000`
### 手動配置 Nginx
創建配置檔案 `/etc/nginx/sites-available/meeting-assistant`:
```nginx
server {
listen 80;
server_name meeting-api.yourdomain.com;
# 上傳檔案大小限制
client_max_body_size 500M;
# 超時設置
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 健康檢查端點
location /api/health {
proxy_pass http://127.0.0.1:8000;
proxy_connect_timeout 5s;
proxy_read_timeout 5s;
}
}
```
啟用配置:
```bash
sudo ln -s /etc/nginx/sites-available/meeting-assistant /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
---
## SSL 證書配置
### 使用 1Panel 自動申請
1. 在 1Panel 中進入「網站」
2. 選擇已創建的網站
3. 點擊「HTTPS」
4. 選擇「申請證書」→「Let's Encrypt」
5. 啟用「強制 HTTPS」
### 手動使用 Certbot
```bash
# 安裝 certbot
sudo apt install -y certbot python3-certbot-nginx
# 申請證書
sudo certbot --nginx -d meeting-api.yourdomain.com
# 設置自動續期
sudo systemctl enable certbot.timer
```
---
## 環境變數配置
### 完整配置說明
| 變數名 | 說明 | 預設值 | 必填 |
|--------|------|--------|------|
| **服務器配置** ||||
| `BACKEND_HOST` | 監聽地址 | `0.0.0.0` | 否 |
| `BACKEND_PORT` | 監聽端口 | `8000` | 否 |
| **數據庫配置** ||||
| `DB_HOST` | MySQL 主機 | - | 是 |
| `DB_PORT` | MySQL 端口 | `3306` | 否 |
| `DB_USER` | 數據庫用戶 | - | 是 |
| `DB_PASS` | 數據庫密碼 | - | 是 |
| `DB_NAME` | 數據庫名稱 | - | 是 |
| `DB_POOL_SIZE` | 連接池大小 | `5` | 否 |
| **外部 API** ||||
| `AUTH_API_URL` | 認證 API 地址 | - | 是 |
| `DIFY_API_URL` | Dify API 地址 | - | 是 |
| `DIFY_API_KEY` | Dify LLM API 密鑰 | - | 是 |
| `DIFY_STT_API_KEY` | Dify STT API 密鑰 | - | 是 |
| **認證設置** ||||
| `ADMIN_EMAIL` | 管理員郵箱 | - | 是 |
| `JWT_SECRET` | JWT 密鑰 | - | 是 |
| `JWT_EXPIRE_HOURS` | JWT 過期時間(小時) | `24` | 否 |
| **超時配置 (毫秒)** ||||
| `UPLOAD_TIMEOUT` | 檔案上傳超時 | `600000` | 否 |
| `DIFY_STT_TIMEOUT` | STT 處理超時 | `300000` | 否 |
| `LLM_TIMEOUT` | LLM 請求超時 | `120000` | 否 |
| `AUTH_TIMEOUT` | 認證請求超時 | `30000` | 否 |
| **檔案配置** ||||
| `TEMPLATE_DIR` | 模板目錄路徑 | `./templates` | 否 |
| `RECORD_DIR` | 記錄目錄路徑 | `./records` | 否 |
| `MAX_FILE_SIZE` | 最大檔案大小(bytes) | `524288000` | 否 |
| `SUPPORTED_AUDIO_FORMATS` | 支援的音訊格式 | `.mp3,.wav,.m4a,...` | 否 |
---
## 維護與監控
### 常用命令
```bash
# 查看服務狀態
sudo systemctl status meeting-assistant-backend
# 查看日誌
sudo journalctl -u meeting-assistant-backend -f
# 重啟服務
sudo systemctl restart meeting-assistant-backend
# 停止服務
sudo systemctl stop meeting-assistant-backend
# 查看最近錯誤
sudo journalctl -u meeting-assistant-backend --since "1 hour ago" | grep -i error
```
### 健康檢查
API 提供健康檢查端點:
```bash
# 檢查 API 是否正常運行
curl http://localhost:8000/api/health
```
### 備份策略
建議備份以下內容:
1. 配置檔案: `/opt/meeting-assistant/.env`
2. 模板檔案: `/opt/meeting-assistant/templates/`
3. 會議記錄: `/opt/meeting-assistant/records/`
4. 數據庫: 使用 mysqldump 定期備份
---
## 常見問題
### Q: 服務啟動失敗?
檢查日誌:
```bash
sudo journalctl -u meeting-assistant-backend -n 50 --no-pager
```
常見原因:
1. Python 依賴未安裝完全
2. .env 配置錯誤
3. 數據庫連接失敗
4. 端口被佔用
### Q: 數據庫連接失敗?
1. 確認數據庫服務器可訪問:
```bash
telnet your-db-host 3306
```
2. 確認用戶權限:
```sql
GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'%';
FLUSH PRIVILEGES;
```
3. 檢查防火牆設置
### Q: Dify API 請求超時?
1. 增加超時配置:
```env
DIFY_STT_TIMEOUT=600000
LLM_TIMEOUT=180000
```
2. 確認 Dify 服務器可訪問:
```bash
curl https://your-dify-server.com/v1/health
```
### Q: 如何更新到新版本?
```bash
# 方法 1: 使用腳本
sudo ./scripts/deploy-backend.sh update
# 方法 2: 手動更新
sudo systemctl stop meeting-assistant-backend
sudo cp -r backend/app /opt/meeting-assistant/
sudo /opt/meeting-assistant/venv/bin/pip install -r backend/requirements.txt
sudo systemctl start meeting-assistant-backend
```
### Q: 如何查看 API 文檔?
啟動服務後訪問:
- Swagger UI: `http://your-server:8000/docs`
- ReDoc: `http://your-server:8000/redoc`
---
## 聯繫支援
如有問題,請聯繫 IT 部門或查看專案 README。