Skip to content

Commit 9f2a752

Browse files
committed
feat: 修改log audio path
1 parent 50ff69d commit 9f2a752

File tree

9 files changed

+453
-45
lines changed

9 files changed

+453
-45
lines changed

.env.example

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
#Docker部署的环境变量将此文件复制到.env并根据需要进行自定义
2-
# 🔮 Mystical Oracle Docker Configuration
1+
# 🔮 Mystical Oracle Docker 环境变量配置示例
2+
# 将此文件复制为 .env 并根据需要进行自定义
33

44
# ===========================================
55
# 模型配置 (Model Configuration)
66
# ===========================================
77
OLLAMA_BASE_URL=http://ollama:11434
88
CHAT_MODEL_NAME=qwen2.5:latest
99
EMBEDDING_MODEL_NAME=qwen2.5:latest
10-
MODEL_TEMPERATURE=0.7
10+
MODEL_TEMPERATURE=0.3
1111

1212
# ===========================================
1313
# 数据库配置 (Database Configuration)
@@ -27,29 +27,34 @@ MAX_HISTORY_MESSAGES=20
2727
# API 密钥 (API Keys) - 可选配置
2828
# ===========================================
2929
# 搜索 API (用于实时信息获取)
30-
SERPAPI_API_KEY=
30+
SERPAPI_API_KEY=your_serpapi_key_here
3131

3232
# 缘分居 API (用于八字、解梦、占卜功能)
33-
YUANFENJU_API_KEY=
33+
YUANFENJU_API_KEY=your_yuanfenju_key_here
3434

3535
# Microsoft Azure TTS (用于语音合成)
36-
MICROSOFT_TTS_KEY=
36+
MICROSOFT_TTS_KEY=your_microsoft_tts_key_here
3737

3838
# ===========================================
3939
# TTS 配置 (Text-to-Speech Configuration)
4040
# ===========================================
4141
TTS_ENDPOINT=
4242
TTS_VOICE_NAME=zh-CN-XiaoxiaoNeural
4343
TTS_OUTPUT_FORMAT=audio-16khz-32kbitrate-mono-mp3
44+
AUDIO_OUTPUT_DIR=/app/audio
45+
46+
# ===========================================
47+
# 日志配置 (Logging Configuration)
48+
# ===========================================
49+
LOG_LEVEL=INFO
50+
LOG_DIR=/app/logs
51+
LOG_RETENTION_DAYS=30
4452

4553
# ===========================================
4654
# 高级配置 (Advanced Configuration)
4755
# ===========================================
4856
# 用户代理
4957
USER_AGENT=Mozilla/5.0 (Mystical Oracle/1.0)
5058

51-
# 日志级别
52-
LOG_LEVEL=INFO
53-
5459
# 时区设置
5560
TZ=Asia/Shanghai

.env.template

Lines changed: 49 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,60 @@
1-
# 环境变量配置文件模板
2-
# 复制此文件为 .env 并填入真实的 API 密钥
1+
# 🔮 Mystical Oracle 本地开发,环境变量配置模板
2+
# 复制此文件为 .env 并填入真实的配置值
33

4-
# API 密钥配置
5-
SERPAPI_API_KEY=your_serpapi_key_here
6-
YUANFENJU_API_KEY=your_yuanfenju_key_here
7-
MICROSOFT_TTS_KEY=your_microsoft_tts_key_here
8-
9-
# 数据库配置
10-
QDRANT_PATH=/Users/king/Develop/self/mystical-oracle/qdrant_data
11-
QDRANT_COLLECTION_NAME=yunshi
12-
REDIS_URL=redis://localhost:6379/0
13-
14-
# 模型配置
4+
# ===========================================
5+
# 模型配置 (Model Configuration)
6+
# ===========================================
157
OLLAMA_BASE_URL=http://localhost:11434
168
CHAT_MODEL_NAME=qwen3:8b
179
EMBEDDING_MODEL_NAME=bge-m3:latest
1810
MODEL_TEMPERATURE=0
1911

20-
# TTS配置
21-
TTS_ENDPOINT=https://eastus.tts.speech.microsoft.com/cognitiveservices/v1
22-
TTS_VOICE_NAME=zh-CN-YunzeNeural
23-
TTS_OUTPUT_FORMAT=audio-16khz-32kbitrate-mono-mp3
12+
# ===========================================
13+
# 数据库配置 (Database Configuration)
14+
# ===========================================
15+
REDIS_URL=redis://localhost:6379/0
16+
QDRANT_PATH=/Users/king/Develop/self/mystical-oracle/qdrant_data
17+
QDRANT_COLLECTION_NAME=yunshi
2418

25-
# 应用配置
19+
# ===========================================
20+
# Agent 配置 (Agent Configuration)
21+
# ===========================================
2622
DEFAULT_SESSION_ID=King
27-
MAX_HISTORY_MESSAGES=10
2823
MEMORY_KEY=chat_history
24+
MAX_HISTORY_MESSAGES=10
25+
26+
# ===========================================
27+
# API 密钥 (API Keys) - 必须配置
28+
# ===========================================
29+
# 搜索 API (用于实时信息获取)
30+
SERPAPI_API_KEY=your_serpapi_key_here
31+
32+
# 缘分居 API (用于八字、解梦、占卜功能)
33+
YUANFENJU_API_KEY=your_yuanfenju_key_here
34+
35+
# Microsoft Azure TTS (用于语音合成)
36+
MICROSOFT_TTS_KEY=your_microsoft_tts_key_here
2937

30-
# 日志配置
38+
# ===========================================
39+
# TTS 配置 (Text-to-Speech Configuration)
40+
# ===========================================
41+
TTS_ENDPOINT=https://eastus.tts.speech.microsoft.com/cognitiveservices/v1
42+
TTS_VOICE_NAME=zh-CN-YunzeNeural
43+
TTS_OUTPUT_FORMAT=audio-16khz-32kbitrate-mono-mp3
44+
AUDIO_OUTPUT_DIR=/Users/king/Develop/self/mystical-oracle/audio
45+
46+
# ===========================================
47+
# 日志配置 (Logging Configuration)
48+
# ===========================================
3149
LOG_LEVEL=INFO
32-
LOG_FILE=mystical_oracle.log
50+
LOG_DIR=logs
51+
LOG_RETENTION_DAYS=30
52+
53+
# ===========================================
54+
# 高级配置 (Advanced Configuration)
55+
# ===========================================
56+
# 用户代理
57+
USER_AGENT=Mozilla/5.0 (Mystical Oracle/1.0)
58+
59+
# 时区设置
60+
TZ=Asia/Shanghai

DEPLOYMENT.md

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Mystical Oracle 部署指南
2+
3+
## 部署选项
4+
5+
### 1. 单实例部署(开发/测试环境)
6+
7+
使用单个应用实例,适合开发和测试:
8+
9+
```bash
10+
docker-compose -f docker-compose.single.yml up -d
11+
```
12+
13+
应用将在 http://localhost:8000 可用
14+
15+
### 2. 负载均衡部署(生产环境)
16+
17+
使用Nginx负载均衡器和多个应用实例,提供高可用性:
18+
19+
```bash
20+
docker-compose up -d
21+
```
22+
23+
应用将在 http://localhost 可用,nginx自动进行负载均衡
24+
25+
## 目录结构说明
26+
27+
```
28+
mystical-oracle/
29+
├── audio/ # TTS生成的音频文件统一存储目录
30+
├── logs/ # 应用日志文件统一存储目录
31+
├── nginx/ # Nginx配置文件
32+
│ └── nginx.conf # 负载均衡配置
33+
├── docker-compose.yml # 生产环境配置(负载均衡)
34+
├── docker-compose.single.yml # 单实例配置
35+
└── ...
36+
```
37+
38+
## 环境变量配置
39+
40+
`.env` 文件中配置以下变量:
41+
42+
```env
43+
# 音频输出目录(Docker内部路径)
44+
AUDIO_OUTPUT_DIR=/app/audio
45+
46+
# 日志配置
47+
LOG_DIR=/app/logs
48+
LOG_RETENTION_DAYS=30
49+
50+
# 其他现有配置...
51+
```
52+
53+
## 负载均衡特性
54+
55+
- **负载均衡策略**: ip_hash,确保同一用户访问同一后端实例
56+
- **健康检查**: 自动检测和移除不健康的实例
57+
- **故障转移**: 主实例故障时自动切换到备份实例
58+
- **静态文件缓存**: 自动缓存CSS、JS、图片等静态资源
59+
- **音频文件缓存**: 音频文件缓存1小时,减少服务器负载
60+
61+
## 监控和日志
62+
63+
- **应用日志**: 自动按日期命名,超过30天自动清理
64+
- **Nginx日志**: 存储在nginx_logs volume中
65+
- **健康检查**: 所有服务都配置了健康检查端点
66+
67+
## 扩展说明
68+
69+
如需增加更多应用实例,修改 `docker-compose.yml`
70+
71+
1. 复制 `mystical-oracle-2` 服务配置
72+
2. 修改服务名和INSTANCE_ID
73+
3. 在nginx配置中添加新的server

config/logger.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,41 @@
44
"""
55
import os
66
import logging
7+
import glob
8+
from datetime import datetime, timedelta
9+
from pathlib import Path
710
from logging.handlers import RotatingFileHandler
811
from typing import Optional
912

1013
# 从环境变量获取日志配置
1114
LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO").upper()
12-
LOG_FILE = os.getenv("LOG_FILE", "mystical_oracle.log")
15+
LOG_DIR = os.getenv("LOG_DIR", "logs")
16+
LOG_RETENTION_DAYS = int(os.getenv("LOG_RETENTION_DAYS", "30"))
17+
18+
# 确保日志目录存在
19+
Path(LOG_DIR).mkdir(parents=True, exist_ok=True)
1320

1421

1522
class Logger:
1623
"""统一日志管理类"""
1724

1825
_loggers = {}
1926

27+
@classmethod
28+
def _cleanup_old_logs(cls) -> None:
29+
"""清理超过指定天数的日志文件"""
30+
try:
31+
cutoff_date = datetime.now() - timedelta(days=LOG_RETENTION_DAYS)
32+
log_pattern = os.path.join(LOG_DIR, "*.log*")
33+
34+
for log_file in glob.glob(log_pattern):
35+
file_path = Path(log_file)
36+
if file_path.stat().st_mtime < cutoff_date.timestamp():
37+
file_path.unlink()
38+
print(f"已删除过期日志文件: {log_file}")
39+
except Exception as e:
40+
print(f"清理日志文件时出错: {e}")
41+
2042
@classmethod
2143
def get_logger(cls, name: str, log_file: Optional[str] = None) -> logging.Logger:
2244
"""获取或创建日志器"""
@@ -43,10 +65,15 @@ def get_logger(cls, name: str, log_file: Optional[str] = None) -> logging.Logger
4365
console_handler.setFormatter(formatter)
4466
logger.addHandler(console_handler)
4567

46-
# 文件处理器(带轮转)
47-
file_name = log_file or LOG_FILE
68+
# 文件处理器(带轮转),使用日期命名
69+
if not log_file:
70+
date_str = datetime.now().strftime("%Y%m%d")
71+
log_file = os.path.join(LOG_DIR, f"mystical_oracle_{date_str}.log")
72+
else:
73+
log_file = os.path.join(LOG_DIR, log_file)
74+
4875
file_handler = RotatingFileHandler(
49-
file_name,
76+
log_file,
5077
maxBytes=10 * 1024 * 1024, # 10MB
5178
backupCount=5,
5279
encoding='utf-8'
@@ -55,6 +82,9 @@ def get_logger(cls, name: str, log_file: Optional[str] = None) -> logging.Logger
5582
file_handler.setFormatter(formatter)
5683
logger.addHandler(file_handler)
5784

85+
# 清理旧日志文件
86+
cls._cleanup_old_logs()
87+
5888
# 缓存日志器
5989
cls._loggers[name] = logger
6090

config/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class BotConfig:
3838
TTS_ENDPOINT = os.getenv("TTS_ENDPOINT")
3939
TTS_VOICE_NAME = os.getenv("TTS_VOICE_NAME")
4040
TTS_OUTPUT_FORMAT = os.getenv("TTS_OUTPUT_FORMAT")
41+
AUDIO_OUTPUT_DIR = os.getenv("AUDIO_OUTPUT_DIR")
4142

4243
# 缘分居 API 端点
4344
YUANFENJU_ENDPOINTS = {

0 commit comments

Comments
 (0)