diff --git a/.env b/.env index 261618b..4ee4711 100644 --- a/.env +++ b/.env @@ -1,93 +1,3 @@ -# ============================================ -# 会计应用环境变量配置 -# ============================================ - -# ============================================ -# 服务器配置 -# ============================================ -SERVER_PORT=2612 -ENVIRONMENT=production - -# ============================================ -# 数据目录 -# ============================================ -DATA_DIR=./data - -# ============================================ -# MySQL 数据库配置(必填) -# ============================================ -# MySQL 数据库配置 -DB_HOST=124.221.157.197 -DB_PORT=3306 -DB_USER=bookkeeping -DB_PASSWORD=bookkeeping -DB_NAME=bookkeeping -DB_ROOT_PASSWORD=lihuaLIHUA -DB_CHARSET=utf8mb4 - -# ============================================ -# Redis 配置(可选,用于汇率缓存) -# ============================================ -REDIS_ADDR=124.221.157.197:6379 -REDIS_PASSWORD=lihua0101LIHUA -REDIS_DB=0 - -# ============================================ -# 汇率 API 配置(可选) -# ============================================ -YUNAPI_URL=https://yunapi.cn/api/huilv -YUNAPI_KEY= -SYNC_INTERVAL=10m -CACHE_EXPIRATION=10m -MAX_RETRIES=3 - -# ============================================ -# JWT 配置(必填,生产环境请修改) -# ============================================ -JWT_SECRET= -JWT_ACCESS_EXPIRY=15m -JWT_REFRESH_EXPIRY=168h - -# ============================================ -# GitHub OAuth 配置(可选) -# ============================================ -GITHUB_CLIENT_ID=Ov23liWppFX67560JfBf -GITHUB_CLIENT_SECRET=7e154e464dccd913a92cf580021f2a5dc51aac93 -GITHUB_REDIRECT_URL=https://bk.swalktech.top/api/v1/auth/github/callback -FRONTEND_URL=https://bk.swalktech.top - -# ============================================ -# 网络配置 -# ============================================ -# HTTP/HTTPS 代理配置(如果服务器无法直接访问 GitHub API,请配置此项) -# 格式: http://127.0.0.1:7890 -HTTPS_PROXY= - -# ============================================ -# AI 配置(语音记账功能) -# ============================================ -# OpenAI API Key(必填,用于语音转文字和智能解析) -OPENAI_API_KEY=sk-dlyjklqnwlcotkwudszeoedjddkdbarohetcmbheytsbklzu - -# OpenAI API 基础URL(可选,默认为官方API,可改为兼容API如 Azure OpenAI) -OPENAI_BASE_URL=https://api.siliconflow.cn/v1 - -# Whisper 语音识别模型(可选,默认 whisper-1) -WHISPER_MODEL=FunAudioLLM/SenseVoiceSmall - -# 聊天模型(可选,默认 gpt-3.5-turbo,可改为 gpt-4 等) -CHAT_MODEL=Qwen/Qwen3-8B - -# 识图模型 -OCR_MODEL=deepseek-ai/DeepSeek-OCR - -# AI 会话超时时间 -AI_SESSION_TIMEOUT=30m - -# ============================================ -# 图片上传配置 -# ============================================ -IMAGE_UPLOAD_DIR=./uploads/images -MAX_IMAGE_SIZE=10485760 -ALLOWED_IMAGE_TYPES=image/jpeg,image/png,image/heic -MAX_IMAGES_PER_TX=9 +# Environment Selector +# Options: dev, prod +APP_ENV=dev diff --git a/.env.dev b/.env.dev new file mode 100644 index 0000000..9e0c4fb --- /dev/null +++ b/.env.dev @@ -0,0 +1,95 @@ +# ============================================ +# 会计应用环境变量配置 (开发环境) +# ============================================ + +# ============================================ +# 服务器配置 +# ============================================ +SERVER_PORT=2612 +ENVIRONMENT=development + +# ============================================ +# 数据目录 +# ============================================ +DATA_DIR=./data + +# ============================================ +# MySQL 数据库配置(必填) +# ============================================ +# 默认指向本地,如果需要连线上请修改IP +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_USER=root +DB_PASSWORD=root +DB_NAME=bookkeeping +# DB_ROOT_PASSWORD= +DB_CHARSET=utf8mb4 + +# ============================================ +# Redis 配置(可选,用于汇率缓存) +# ============================================ +REDIS_ADDR=127.0.0.1:6379 +REDIS_PASSWORD= +REDIS_DB=0 + +# ============================================ +# 汇率 API 配置(可选) +# ============================================ +YUNAPI_URL=https://yunapi.cn/api/huilv +YUNAPI_KEY= +SYNC_INTERVAL=10m +CACHE_EXPIRATION=10m +MAX_RETRIES=3 + +# ============================================ +# JWT 配置(必填) +# ============================================ +JWT_SECRET=dev_secret_key_123456 +JWT_ACCESS_EXPIRY=15m +JWT_REFRESH_EXPIRY=168h + +# ============================================ +# GitHub OAuth 配置(可选) +# ============================================ +GITHUB_CLIENT_ID=Ov23liWppFX67560JfBf +GITHUB_CLIENT_SECRET=7e154e464dccd913a92cf580021f2a5dc51aac93 +# 回调地址修改为本地 +GITHUB_REDIRECT_URL=http://localhost:2612/api/v1/auth/github/callback +# 前端地址修改为本地 Vite 端口 +FRONTEND_URL=http://localhost:5173 + +# ============================================ +# 网络配置 +# ============================================ +# HTTP/HTTPS 代理配置(如果服务器无法直接访问 GitHub API,请配置此项) +# 格式: http://127.0.0.1:7890 +HTTPS_PROXY= + +# ============================================ +# AI 配置(语音记账功能) +# ============================================ +# OpenAI API Key(必填,用于语音转文字和智能解析) +OPENAI_API_KEY=sk-dlyjklqnwlcotkwudszeoedjddkdbarohetcmbheytsbklzu + +# OpenAI API 基础URL(可选,默认为官方API,可改为兼容API如 Azure OpenAI) +OPENAI_BASE_URL=https://api.siliconflow.cn/v1 + +# Whisper 语音识别模型(可选,默认 whisper-1) +WHISPER_MODEL=FunAudioLLM/SenseVoiceSmall + +# 聊天模型(可选,默认 gpt-3.5-turbo,可改为 gpt-4 等) +CHAT_MODEL=Qwen/Qwen3-8B + +# 识图模型 +OCR_MODEL=deepseek-ai/DeepSeek-OCR + +# AI 会话超时时间 +AI_SESSION_TIMEOUT=30m + +# ============================================ +# 图片上传配置 +# ============================================ +IMAGE_UPLOAD_DIR=./uploads/images +MAX_IMAGE_SIZE=10485760 +ALLOWED_IMAGE_TYPES=image/jpeg,image/png,image/heic +MAX_IMAGES_PER_TX=9 diff --git a/.env.prod b/.env.prod new file mode 100644 index 0000000..c4ca859 --- /dev/null +++ b/.env.prod @@ -0,0 +1,93 @@ +# ============================================ +# 会计应用环境变量配置 (生产环境) +# ============================================ + +# ============================================ +# 服务器配置 +# ============================================ +SERVER_PORT=2612 +ENVIRONMENT=production + +# ============================================ +# 数据目录 +# ============================================ +DATA_DIR=./data + +# ============================================ +# MySQL 数据库配置(必填) +# ============================================ +# MySQL 数据库配置 +DB_HOST=124.221.157.197 +DB_PORT=3306 +DB_USER=bookkeeping +DB_PASSWORD=bookkeeping +DB_NAME=bookkeeping +DB_ROOT_PASSWORD=lihuaLIHUA +DB_CHARSET=utf8mb4 + +# ============================================ +# Redis 配置(可选,用于汇率缓存) +# ============================================ +REDIS_ADDR=124.221.157.197:6379 +REDIS_PASSWORD=lihua0101LIHUA +REDIS_DB=0 + +# ============================================ +# 汇率 API 配置(可选) +# ============================================ +YUNAPI_URL=https://yunapi.cn/api/huilv +YUNAPI_KEY= +SYNC_INTERVAL=10m +CACHE_EXPIRATION=10m +MAX_RETRIES=3 + +# ============================================ +# JWT 配置(必填,生产环境请修改) +# ============================================ +JWT_SECRET= +JWT_ACCESS_EXPIRY=15m +JWT_REFRESH_EXPIRY=168h + +# ============================================ +# GitHub OAuth 配置(可选) +# ============================================ +GITHUB_CLIENT_ID=Ov23liWppFX67560JfBf +GITHUB_CLIENT_SECRET=7e154e464dccd913a92cf580021f2a5dc51aac93 +GITHUB_REDIRECT_URL=https://bk.swalktech.top/api/v1/auth/github/callback +FRONTEND_URL=https://bk.swalktech.top + +# ============================================ +# 网络配置 +# ============================================ +# HTTP/HTTPS 代理配置(如果服务器无法直接访问 GitHub API,请配置此项) +# 格式: http://127.0.0.1:7890 +HTTPS_PROXY= + +# ============================================ +# AI 配置(语音记账功能) +# ============================================ +# OpenAI API Key(必填,用于语音转文字和智能解析) +OPENAI_API_KEY=sk-dlyjklqnwlcotkwudszeoedjddkdbarohetcmbheytsbklzu + +# OpenAI API 基础URL(可选,默认为官方API,可改为兼容API如 Azure OpenAI) +OPENAI_BASE_URL=https://api.siliconflow.cn/v1 + +# Whisper 语音识别模型(可选,默认 whisper-1) +WHISPER_MODEL=FunAudioLLM/SenseVoiceSmall + +# 聊天模型(可选,默认 gpt-3.5-turbo,可改为 gpt-4 等) +CHAT_MODEL=Qwen/Qwen3-8B + +# 识图模型 +OCR_MODEL=deepseek-ai/DeepSeek-OCR + +# AI 会话超时时间 +AI_SESSION_TIMEOUT=30m + +# ============================================ +# 图片上传配置 +# ============================================ +IMAGE_UPLOAD_DIR=./uploads/images +MAX_IMAGE_SIZE=10485760 +ALLOWED_IMAGE_TYPES=image/jpeg,image/png,image/heic +MAX_IMAGES_PER_TX=9 diff --git a/cmd/server/main.go b/cmd/server/main.go index 9f1648f..5ef3616 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -20,19 +20,37 @@ import ( func main() { // Load .env file from project root (try multiple locations) envPaths := []string{ - ".env", // Current directory - "../.env", // Parent directory (when running from backend/) - "../../.env", // Two levels up (when running from backend/cmd/server/) + ".env", // Current directory + "../.env", // Parent directory (when running from backend/) + "../../.env", // Two levels up (when running from backend/cmd/server/) filepath.Join("..", "..", ".env"), // Explicit path } - + + var envDir string for _, envPath := range envPaths { if err := godotenv.Load(envPath); err == nil { - log.Printf("Loaded environment from: %s", envPath) + log.Printf("Loaded base environment from: %s", envPath) + envDir = filepath.Dir(envPath) break } } + // Load specific environment file if APP_ENV is set (e.g. .env.dev, .env.prod) + // This allows switching environments by just changing APP_ENV in .env + if appEnv := os.Getenv("APP_ENV"); appEnv != "" { + targetEnvFile := ".env." + appEnv + targetEnvPath := targetEnvFile + if envDir != "" && envDir != "." { + targetEnvPath = filepath.Join(envDir, targetEnvFile) + } + + if err := godotenv.Overload(targetEnvPath); err == nil { + log.Printf("Loaded specific environment config from: %s", targetEnvPath) + } else { + log.Printf("Note: Specific environment file %s not found or could not be loaded", targetEnvPath) + } + } + // Load configuration cfg := config.Load() diff --git a/switch_env.ps1 b/switch_env.ps1 new file mode 100644 index 0000000..0b4e0f6 --- /dev/null +++ b/switch_env.ps1 @@ -0,0 +1,20 @@ +param ( + [string]$env = "dev" +) + +$source = ".env.$env" +$dest = ".env" + +if (Test-Path $source) { + Copy-Item -Path $source -Destination $dest -Force + Write-Host "Success: Switched to $env environment ($source -> $dest)" + + # Simple check to see if environment content matches + $content = Get-Content $dest -TotalCount 10 + Write-Host "Current Config Preview:" + $content | Select-String "ENVIRONMENT" + $content | Select-String "DB_HOST" +} else { + Write-Error "Error: Source file $source does not exist." + Write-Host "Usage: ./switch_env.ps1 [dev|prod]" +}