5.4 KiB
5.4 KiB
环境变量配置指南
概述
Go 服务支持通过环境变量来确定配置,优先级为:
环境变量 > 配置文件 > 默认值
1. 环境选择
方式一:环境变量 APP_ENV(推荐)
# Windows PowerShell
$env:APP_ENV="prod"
.\start.bat
# Linux/Mac
export APP_ENV=prod
./start.sh
# Docker
docker run -e APP_ENV=prod ...
方式二:命令行参数
go run main.go -env=prod
方式三:默认值
不设置任何参数时,默认使用 dev 环境
2. 支持的环境变量
服务器配置
| 环境变量 | 配置项 | 说明 | 示例 |
|---|---|---|---|
SERVER_PORT |
server.port | 服务端口 | 8080 |
SERVER_MODE |
server.mode | 运行模式 | release |
数据库配置
| 环境变量 | 配置项 | 说明 | 示例 |
|---|---|---|---|
DB_HOST |
database.host | 数据库地址 | localhost |
DB_PORT |
database.port | 数据库端口 | 3306 |
DB_USERNAME |
database.username | 用户名 | root |
DB_PASSWORD |
database.password | 密码 | your_password |
DB_NAME |
database.dbname | 数据库名 | ai_wht |
DB_CHARSET |
database.charset | 字符集 | utf8mb4 |
JWT 配置
| 环境变量 | 配置项 | 说明 | 示例 |
|---|---|---|---|
JWT_SECRET |
jwt.secret | JWT 密钥 | your_secret_key |
JWT_EXPIRE_HOURS |
jwt.expire_hours | 过期时间(小时) | 168 |
微信配置
| 环境变量 | 配置项 | 说明 | 示例 |
|---|---|---|---|
WECHAT_APP_ID |
wechat.app_id | 微信 AppID | wx1234567890 |
WECHAT_APP_SECRET |
wechat.app_secret | 微信 AppSecret | your_secret |
小红书配置
| 环境变量 | 配置项 | 说明 | 示例 |
|---|---|---|---|
XHS_PYTHON_SERVICE_URL |
xhs.python_service_url | Python服务地址 | http://localhost:8000 |
3. 使用场景
场景一:本地开发(覆盖数据库密码)
# Windows
$env:DB_PASSWORD="local_password"
go run main.go
# Linux/Mac
export DB_PASSWORD=local_password
go run main.go
场景二:生产部署
# 设置生产环境
$env:APP_ENV="prod"
$env:DB_HOST="prod-db.example.com"
$env:DB_PASSWORD="prod_secure_password"
$env:JWT_SECRET="prod_jwt_secret_key"
$env:WECHAT_APP_ID="wx_prod_appid"
$env:WECHAT_APP_SECRET="wx_prod_secret"
.\start.bat
场景三:Docker 部署
# Dockerfile
FROM golang:1.21-alpine
WORKDIR /app
COPY . .
RUN go build -o main .
# 设置环境变量
ENV APP_ENV=prod
ENV SERVER_PORT=8080
ENV DB_HOST=mysql-server
CMD ["./main"]
# docker-compose.yml
version: '3.8'
services:
go-backend:
build: .
environment:
- APP_ENV=prod
- DB_HOST=mysql
- DB_PASSWORD=${DB_PASSWORD}
- WECHAT_APP_ID=${WECHAT_APP_ID}
- WECHAT_APP_SECRET=${WECHAT_APP_SECRET}
ports:
- "8080:8080"
场景四:CI/CD 流水线
# GitHub Actions
env:
APP_ENV: prod
DB_HOST: ${{ secrets.DB_HOST }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
WECHAT_APP_ID: ${{ secrets.WECHAT_APP_ID }}
WECHAT_APP_SECRET: ${{ secrets.WECHAT_APP_SECRET }}
4. 配置优先级示例
假设 config.prod.yaml 中配置:
database:
host: localhost
port: 3306
password: file_password
运行时设置环境变量:
$env:DB_HOST="prod-server.com"
$env:DB_PASSWORD="env_password"
最终生效的配置:
host: prod-server.com # 来自环境变量 DB_HOST
port: 3306 # 来自配置文件
password: env_password # 来自环境变量 DB_PASSWORD
5. 查看当前配置
启动服务时,会在日志中输出:
2024/12/15 14:45:00 从环境变量 APP_ENV 读取环境: prod
2024/12/15 14:45:00 配置加载成功: prod 环境
2024/12/15 14:45:00 数据库配置: root@prod-server.com:3306/ai_wht
6. 安全建议
-
敏感信息不要写入配置文件,使用环境变量:
DB_PASSWORDJWT_SECRETWECHAT_APP_SECRET
-
生产环境必须覆盖的环境变量:
APP_ENV=prod DB_PASSWORD=<secure_password> JWT_SECRET=<random_secret_key> WECHAT_APP_SECRET=<wechat_secret> -
使用密钥管理工具(可选):
- Azure Key Vault
- AWS Secrets Manager
- HashiCorp Vault
7. 快速启动脚本
Windows (start_with_env.bat)
@echo off
set APP_ENV=prod
set DB_HOST=localhost
set DB_PASSWORD=your_password
set JWT_SECRET=your_jwt_secret
set WECHAT_APP_ID=your_appid
set WECHAT_APP_SECRET=your_secret
go run main.go
Linux/Mac (start_with_env.sh)
#!/bin/bash
export APP_ENV=prod
export DB_HOST=localhost
export DB_PASSWORD=your_password
export JWT_SECRET=your_jwt_secret
export WECHAT_APP_ID=your_appid
export WECHAT_APP_SECRET=your_secret
go run main.go
8. 常见问题
Q: 环境变量没生效?
A: 检查环境变量名称是否正确,区分大小写。
Q: 如何查看所有环境变量?
A:
# Windows
Get-ChildItem Env:
# Linux/Mac
printenv
Q: 如何临时设置环境变量?
A:
# Windows - 当前会话有效
$env:DB_PASSWORD="temp_password"
# Linux/Mac - 当前会话有效
export DB_PASSWORD=temp_password
Q: 如何永久设置环境变量?
A:
- Windows: 系统设置 → 高级系统设置 → 环境变量
- Linux/Mac: 添加到
~/.bashrc或~/.zshrc