feat: 引入多环境配置支持,通过 .env.dev 和 .env.prod 文件管理不同环境配置,并更新 main.go 以加载对应配置。
This commit is contained in:
96
.env
96
.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
|
||||
|
||||
95
.env.dev
Normal file
95
.env.dev
Normal 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
93
.env.prod
Normal 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
|
||||
@@ -26,13 +26,31 @@ func main() {
|
||||
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()
|
||||
|
||||
|
||||
20
switch_env.ps1
Normal file
20
switch_env.ps1
Normal 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]"
|
||||
}
|
||||
Reference in New Issue
Block a user