121 lines
3.3 KiB
TypeScript
121 lines
3.3 KiB
TypeScript
import { MidwayConfig } from "@midwayjs/core";
|
||
import { existsSync } from "fs";
|
||
import { join } from "path";
|
||
import { tmpdir } from "os";
|
||
import { config as loadEnv } from "dotenv";
|
||
|
||
// 加载项目根目录的环境变量文件:
|
||
// 1) .env 基础配置(默认=生产,不覆盖系统环境变量)
|
||
// 2) .env.{环境} 环境专属覆盖,如 .env.local(MIDWAY_SERVER_ENV=local 时生效)
|
||
const envDir = join(__dirname, "../../");
|
||
loadEnv({ path: join(envDir, ".env") });
|
||
|
||
const currentEnv = process.env.MIDWAY_SERVER_ENV || process.env.NODE_ENV || "prod";
|
||
const envFile = join(envDir, `.env.${currentEnv}`);
|
||
if (existsSync(envFile)) {
|
||
loadEnv({ path: envFile, override: true });
|
||
}
|
||
|
||
export default {
|
||
keys: "smart-grid-iot-secret-key",
|
||
|
||
koa: {
|
||
port: 7001
|
||
},
|
||
|
||
// 日志输出目录(显式指定到项目内 server/logs,避免写入用户主目录导致 EPERM 权限报错)
|
||
logger: {
|
||
dir: join(envDir, "logs"),
|
||
appLogName: "midway-app.log",
|
||
coreLogName: "midway-core.log",
|
||
errorLogName: "common-error.log",
|
||
enableError: true,
|
||
maxFiles: "30d"
|
||
},
|
||
|
||
sequelize: {
|
||
dataSource: {
|
||
default: {
|
||
dialect: "postgres",
|
||
host: process.env.PG_HOST || "localhost",
|
||
port: Number(process.env.PG_PORT) || 5432,
|
||
database: process.env.PG_DATABASE || "xintong",
|
||
username: process.env.PG_USERNAME || "postgres",
|
||
password: process.env.PG_PASSWORD || "postgres",
|
||
timezone: "+08:00",
|
||
models: [join(__dirname, "../entity")],
|
||
define: {
|
||
timestamps: true,
|
||
underscored: true,
|
||
createdAt: "created_at",
|
||
updatedAt: "updated_at"
|
||
},
|
||
pool: {
|
||
max: 10,
|
||
min: 0,
|
||
acquire: 30000,
|
||
idle: 10000
|
||
}
|
||
}
|
||
},
|
||
sync: false
|
||
},
|
||
|
||
redis: {
|
||
client: {
|
||
host: process.env.REDIS_HOST || "localhost",
|
||
port: Number(process.env.REDIS_PORT) || 6379,
|
||
password: process.env.REDIS_PASSWORD || "",
|
||
db: 0
|
||
}
|
||
},
|
||
|
||
jwt: {
|
||
secret: "smart-grid-iot-admin-jwt-secret-key-2024",
|
||
expiresIn: "2h",
|
||
refreshExpiresIn: "7d"
|
||
},
|
||
|
||
// multipart/form-data 解析配置(现场照片上传)
|
||
upload: {
|
||
mode: "file",
|
||
fileSize: "10mb",
|
||
whitelist: [".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp"],
|
||
tmpdir: join(tmpdir(), "smart-grid-upload"),
|
||
cleanTimeout: 5 * 60 * 1000
|
||
},
|
||
|
||
// RustFS 对象存储(S3 兼容协议、path-style 访问)
|
||
rustfs: {
|
||
endpoint: process.env.RUSTFS_ENDPOINT || "127.0.0.1",
|
||
port: Number(process.env.RUSTFS_PORT) || 9000,
|
||
useSSL: process.env.RUSTFS_USE_SSL === "true",
|
||
accessKey: process.env.RUSTFS_ACCESS_KEY || "",
|
||
secretKey: process.env.RUSTFS_SECRET_KEY || "",
|
||
region: process.env.RUSTFS_REGION || "us-east-1",
|
||
// 当前生效的桶(生产/测试通过 .env 与 .env.local 切换)
|
||
bucket: process.env.RUSTFS_BUCKET || process.env.RUSTFS_BUCKET_PROD || "",
|
||
bucketProd: process.env.RUSTFS_BUCKET_PROD || "",
|
||
bucketTest: process.env.RUSTFS_BUCKET_TEST || "",
|
||
// RustFS 仅支持 path-style 访问
|
||
forcePathStyle: true,
|
||
// 预签名 URL 有效期(秒)
|
||
presignExpires: 3600,
|
||
// 上传对象 key 前缀
|
||
keyPrefix: "customer-visit"
|
||
},
|
||
|
||
cors: {
|
||
origin: "*",
|
||
allowMethods: "GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS",
|
||
exposeHeaders: "Content-Type,Authorization,X-Requested-With",
|
||
credentials: true
|
||
},
|
||
|
||
security: {
|
||
csrf: {
|
||
enable: false
|
||
}
|
||
}
|
||
} as MidwayConfig;
|