feat: 引入多环境配置支持,通过 .env.dev.env.prod 文件管理不同环境配置,并更新 main.go 以加载对应配置。

This commit is contained in:
2026-01-28 12:51:20 +08:00
parent 0d21b9444e
commit 6604f50448
5 changed files with 234 additions and 98 deletions

96
.env
View File

@@ -1,93 +1,3 @@
# ============================================ # Environment Selector
# 会计应用环境变量配置 # Options: dev, prod
# ============================================ APP_ENV=dev
# ============================================
# 服务器配置
# ============================================
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

95
.env.dev Normal file
View File

@@ -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

93
.env.prod Normal file
View File

@@ -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

View File

@@ -20,19 +20,37 @@ import (
func main() { func main() {
// Load .env file from project root (try multiple locations) // Load .env file from project root (try multiple locations)
envPaths := []string{ envPaths := []string{
".env", // Current directory ".env", // Current directory
"../.env", // Parent directory (when running from backend/) "../.env", // Parent directory (when running from backend/)
"../../.env", // Two levels up (when running from backend/cmd/server/) "../../.env", // Two levels up (when running from backend/cmd/server/)
filepath.Join("..", "..", ".env"), // Explicit path filepath.Join("..", "..", ".env"), // Explicit path
} }
var envDir string
for _, envPath := range envPaths { for _, envPath := range envPaths {
if err := godotenv.Load(envPath); err == nil { 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 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 // Load configuration
cfg := config.Load() cfg := config.Load()

20
switch_env.ps1 Normal file
View File

@@ -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]"
}