This commit is contained in:
beabigegg
2025-08-28 13:20:29 +08:00
parent bdfda30ca8
commit dcd15baf3f
11 changed files with 276 additions and 945 deletions

297
README.md
View File

@@ -21,6 +21,7 @@
### 智慧通知系統
- **動態收件人選擇**整合LDAP的即時用戶搜尋
- **郵件記憶功能**:自動記憶並帶出之前使用的通知對象
- **全流程通知**:啟用、展延、終止操作的自動郵件通知
- **自動提醒**3天與7天到期前的主動提醒郵件
- **排程系統**:每日自動檢查即將到期的規範
@@ -87,6 +88,12 @@ docker-compose up -d
docker-compose exec app python init_db.py
```
5. **資料庫遷移(如果需要)**
```bash
# 新增郵件功能欄位
docker-compose exec app python migrate_add_email_column.py
```
### 手動安裝
#### Windows 環境
@@ -107,7 +114,12 @@ REM 編輯 .env 檔案
python init_db.py
```
4. **啟動 ONLYOFFICE Document Server**
4. **資料庫遷移(如果需要)**
```cmd
python migrate_add_email_column.py
```
5. **啟動 ONLYOFFICE Document Server**
```cmd
docker run -d -p 8080:80 --restart=always ^
-e JWT_ENABLED=true ^
@@ -115,7 +127,7 @@ docker run -d -p 8080:80 --restart=always ^
onlyoffice/documentserver
```
5. **啟動應用程式**
6. **啟動應用程式**
```cmd
REM 開發環境
python app.py
@@ -143,7 +155,12 @@ cp .env.example .env
python init_db.py
```
4. **啟動 ONLYOFFICE Document Server**
4. **資料庫遷移(如果需要)**
```bash
python migrate_add_email_column.py
```
5. **啟動 ONLYOFFICE Document Server**
```bash
docker run -d -p 8080:80 --restart=always \
-e JWT_ENABLED=true \
@@ -151,7 +168,7 @@ docker run -d -p 8080:80 --restart=always \
onlyoffice/documentserver
```
5. **啟動應用程式**
6. **啟動應用程式**
```bash
# 開發環境
python app.py
@@ -161,79 +178,6 @@ pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 app:app
```
### 生產環境部署
#### 使用 Nginx + Gunicorn (Linux)
1. **安裝 Gunicorn**
```bash
pip install gunicorn
```
2. **建立 Gunicorn 服務檔案**
```bash
sudo nano /etc/systemd/system/tempspec.service
```
內容:
```ini
[Unit]
Description=Temp Spec System
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/path/to/your/app
Environment="PATH=/path/to/your/app/venv/bin"
ExecStart=/path/to/your/app/venv/bin/gunicorn -w 4 -b 127.0.0.1:5000 app:app
Restart=always
[Install]
WantedBy=multi-user.target
```
3. **Nginx 設定**
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
```
4. **啟動服務**
```bash
sudo systemctl enable tempspec
sudo systemctl start tempspec
```
#### Windows IIS 部署
1. **安裝 IIS 與 Python**
2. **安裝 HttpPlatformHandler**
3. **設定 Web.config**
```xml
<configuration>
<system.webServer>
<handlers>
<add name="PythonHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="C:\path\to\python.exe"
arguments="app.py"
startupTimeLimit="60"
startupRetryCount="3">
</httpPlatform>
</system.webServer>
</configuration>
```
## ⚙️ 組態設定
### 環境變數 (.env)
@@ -255,74 +199,29 @@ LDAP_BIND_USER_DN=CN=service,DC=company,DC=com
LDAP_BIND_USER_PASSWORD=service_password
LDAP_USER_LOGIN_ATTR=userPrincipalName
# SMTP 郵件設定
SMTP_SERVER=smtp.company.com
SMTP_PORT=587
SMTP_USE_TLS=True
SMTP_SENDER_EMAIL=noreply@company.com
SMTP_SENDER_PASSWORD=smtp_password
# SMTP 郵件設定 (Port 25 無認證方式)
SMTP_SERVER=mail.company.com
SMTP_PORT=25
SMTP_USE_TLS=false
SMTP_USE_SSL=false
SMTP_AUTH_REQUIRED=false
SMTP_SENDER_EMAIL=temp-spec-system@company.com
SMTP_SENDER_PASSWORD=
# ONLYOFFICE 設定
ONLYOFFICE_URL=http://onlyoffice:8080
ONLYOFFICE_JWT_SECRET=your_jwt_secret
```
### 特殊注意事項
### SMTP 配置說明
#### Windows 環境差異
系統支援多種 SMTP 配置方式:
1. **排程服務限制**
- APScheduler 在 Windows 上運行正常
- 若使用 Celery需要額外設定
```bash
# Windows 環境需要使用 eventlet 或 solo 執行器
celery -A app.celery worker --loglevel=info --pool=solo
```
- **Port 25推薦**:內部郵件伺服器,無需認證
- **Port 587**STARTTLS + 認證
- **Port 465**SSL + 認證
2. **路徑設定**
```python
# Windows 環境請使用絕對路徑或適當的路徑分隔符
UPLOAD_FOLDER = r'C:\path\to\uploads'
```
3. **服務安裝**
```bash
# 使用 NSSM 將 Python 應用程式安裝為 Windows 服務
nssm install TempSpecSystem python.exe app.py
```
#### Linux 環境最佳化
1. **系統服務設定**
```bash
# 設定系統服務自動啟動
sudo systemctl enable tempspec.service
```
2. **日誌管理**
```bash
# 使用 logrotate 管理日誌檔案
sudo nano /etc/logrotate.d/tempspec
```
3. **效能調校**
```bash
# Gunicorn 推薦設定
gunicorn -w 4 -k gevent --worker-connections 1000 -b 0.0.0.0:5000 app:app
```
## 🔐 安全性設定
### LDAP 整合
- 支援 SSL/TLS 加密連線
- 服務帳號權限最小化原則
- 自動用戶同步與權限管控
### 資料保護
- JWT Token 驗證
- 檔案存取權限控制
- SQL Injection 防護
- XSS 攻擊防護
詳細設定請參考 `SMTP_CONFIGURATION_UPDATE.md`
## 📚 使用說明
@@ -344,40 +243,34 @@ ONLYOFFICE_JWT_SECRET=your_jwt_secret
UPDATE ts_user SET role='admin' WHERE username='user@domain.com';
```
3. **程式設定**:修改 `routes/auth.py` 中的管理員帳號列表:
```python
# 將特定用戶設為管理員
if user_info['username'].lower() == 'your_admin@domain.com':
default_role = 'admin'
```
### 郵件通知功能
### 排程任務說明
系統具備智慧郵件管理功能:
系統預設每天凌晨 2:00 執行到期檢查任務,可在 `app.py` 中調整:
1. **規範生效時**:輸入通知郵件對象,系統自動記憶
2. **規範終止時**:自動帶出生效時使用的郵件清單,可編輯後發送
3. **規範展延時**:自動帶出郵件清單,修改後更新記錄
```python
@scheduler.task('cron', id='check_expiring_specs_job', hour=2, minute=0)
def scheduled_job():
check_expiring_specs(app)
```
### 排程任務
### 自訂提醒天數
系統預設每天凌晨 2:00 執行到期檢查任務:
在 `tasks.py` 中修改提醒時程:
- 7天到期提醒
- 3天到期提醒
- 自動發送提醒郵件
```python
seven_days_later = today + timedelta(days=7) # 7天前提醒
three_days_later = today + timedelta(days=3) # 3天前提醒
```
## 🔐 安全性設定
### 預設收件人群組設定
### LDAP 整合
- 支援 SSL/TLS 加密連線
- 服務帳號權限最小化原則
- 自動用戶同步與權限管控
在 `tasks.py` 中設定自動提醒的收件人:
```python
# 修改為實際的 AD 群組名稱
default_recipients = get_ldap_group_members('TempSpec_Admins')
```
### 資料保護
- JWT Token 驗證
- 檔案存取權限控制
- SQL Injection 防護
- XSS 攻擊防護
## 🐛 疑難排解
@@ -395,19 +288,14 @@ default_recipients = get_ldap_group_members('TempSpec_Admins')
3. **郵件發送失敗**
- 確認 SMTP 設定正確
- 檢查郵件伺服器認證
- 驗證防火牆規則 (通常是 25/587/465 port)
- 檢查郵件伺服器認證設定
- 驗證防火牆規則 (Port 25/587/465)
4. **排程任務未執行**
- 檢查 APScheduler 初始化
- 確認應用程式持續運行
- 查看系統日誌
5. **檔案上傳失敗**
- 檢查上傳目錄權限
- 確認檔案大小限制設定
- 驗證磁碟空間是否足夠
### 日誌查看
```bash
@@ -421,40 +309,8 @@ tail -f logs/app.log
Get-Content logs/app.log -Tail 10 -Wait
```
### 效能監控
```bash
# 監控資源使用
htop
docker stats
# 檢查資料庫效能
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
```
## 🤝 開發指南
### 開發環境設定
1. **虛擬環境建立**
```bash
python -m venv venv
source venv/bin/activate # Linux
venv\Scripts\activate # Windows
```
2. **安裝開發依賴**
```bash
pip install -r requirements.txt
pip install -r requirements-dev.txt # 如果有開發專用依賴
```
3. **資料庫遷移**
```bash
python init_db.py
```
### 程式碼結構
```
@@ -473,41 +329,38 @@ python init_db.py
└── ldap_utils.py # LDAP 工具
```
### 新增功能開發
### 資料庫遷移
1. **建立新的路由模組**
2. **新增對應的資料模型**
3. **建立前端範本**
4. **撰寫單元測試**
當系統需要資料庫結構更新時:
```bash
# 執行遷移腳本
python migrate_add_email_column.py
```
## 📄 授權條款
本專案採用 MIT 授權條款,詳見 [LICENSE](LICENSE) 檔案
本專案採用 MIT 授權條款。
## 🆕 版本歷程
### v3.0.0 (2024-01-XX)
### v3.2.0 (最新版本)
- 🆕 新增郵件通知記憶功能
- 🆕 支援 Port 25 無認證 SMTP
- ♻️ 優化郵件管理邏輯
- 🗑️ 移除測試檔案和調試代碼
### v3.1.0
- 🆕 新增 LDAP/AD 整合驗證
- 🆕 整合 ONLYOFFICE 線上編輯器
- 🆕 整合 ONLYOFFICE 線上編輯器
- 🆕 實作智慧通知系統
- 🆕 新增自動排程提醒功能
- 🆕 支援 Docker 容器化部署
### v3.0.0
- ♻️ 重構權限管理系統
- 🗑️ 移除本地帳號管理功能
### v2.x.x
- Toast UI Editor 整合
- 基本文件管理功能
- 本地帳號系統
## 📞 技術支援
如有問題或建議,請透過以下方式聯繫:
- 📧 Email: support@company.com
- 📋 Issue Tracker: GitHub Issues
- 📖 文件wiki: GitHub Wiki
---
**暫時規範管理系統 V3** - 讓企業文件管理更智慧、更高效!