4.0 KiB
4.0 KiB
DATABASE_URL 来源说明
📍 定义位置
DATABASE_URL 在 schema.prisma 中定义:
datasource db {
provider = "mysql"
url = env("DATABASE_URL") // ← 从这里读取环境变量
}
🔄 加载流程
1. 配置文件定义
DATABASE_URL 定义在环境配置文件中:
当前配置:.development.env 文件
DATABASE_URL="mysql://root:woshimima@localhost:3306/db_competition_management?schema=public"
2. NestJS ConfigModule 加载
在 app.module.ts 中配置:
ConfigModule.forRoot({
isGlobal: true,
envFilePath: ['.development.env'], // ← 从这里加载环境变量
})
加载顺序:
- NestJS ConfigModule 读取
.development.env文件 - 将文件中的
DATABASE_URL加载到process.env.DATABASE_URL - 应用启动时,所有模块都可以通过
ConfigService访问
3. Prisma 读取
Prisma 在以下时机读取 DATABASE_URL:
-
生成 Prisma Client 时:
npx prisma generate- 读取
process.env.DATABASE_URL - 生成类型定义(不连接数据库)
- 读取
-
运行迁移时:
npx prisma migrate dev npx prisma migrate deploy- 读取
process.env.DATABASE_URL - 连接到数据库执行迁移
- 读取
-
应用运行时:
PrismaService初始化时读取process.env.DATABASE_URL- 建立数据库连接
📂 配置文件优先级
根据 app.module.ts 的配置:
envFilePath: ['.development.env']
当前配置:
- ✅ 优先加载:
.development.env - ⚠️ 注意:如果设置了
ignoreEnvFile: true,则不会加载文件,只使用系统环境变量
🔍 验证 DATABASE_URL 来源
方法 1:查看环境变量(应用运行时)
# 启动应用后,访问配置验证接口
curl http://localhost:3001/api/config-verification/env-info
方法 2:查看启动日志
应用启动时会在控制台显示:
=== 环境配置验证 ===
DATABASE_URL: 已设置 mysql://root:woshimima@localhost:3306/db_competition_management?schema=public
方法 3:检查配置文件
cd backend
cat .development.env | grep DATABASE_URL
方法 4:在代码中验证
// 在任何服务中
constructor(private configService: ConfigService) {}
const dbUrl = this.configService.get('DATABASE_URL');
console.log('DATABASE_URL:', dbUrl);
🔐 环境变量来源优先级
Prisma 读取 DATABASE_URL 的优先级:
-
系统环境变量(最高优先级)
export DATABASE_URL="mysql://..." -
.env 文件(通过 ConfigModule 加载)
.development.env.env
-
默认值(如果都没有设置,Prisma 会报错)
📝 DATABASE_URL 格式
mysql://用户名:密码@主机:端口/数据库名?参数
示例:
# 本地数据库
DATABASE_URL="mysql://root:password@localhost:3306/db_competition_management?schema=public"
# 远程数据库
DATABASE_URL="mysql://user:pass@192.168.1.100:3306/db_name?schema=public"
# 带 SSL
DATABASE_URL="mysql://user:pass@host:3306/db_name?schema=public&sslmode=require"
⚠️ 注意事项
-
密码包含特殊字符:需要进行 URL 编码
# 密码: p@ssw0rd DATABASE_URL="mysql://user:p%40ssw0rd@localhost:3306/db" -
配置文件安全:
.development.env不应提交到 Git- 生产环境使用环境变量或密钥管理服务
-
Prisma 读取时机:
- Prisma 直接读取
process.env.DATABASE_URL - 不依赖 NestJS ConfigModule(但 ConfigModule 会将文件内容加载到
process.env)
- Prisma 直接读取
🔧 当前配置总结
- 配置文件:
.development.env - 配置项:
DATABASE_URL="mysql://root:woshimima@localhost:3306/db_competition_management?schema=public" - 加载方式:NestJS ConfigModule →
process.env→ Prisma - 验证方式:启动日志或
/api/config-verification/env-info接口