Files
smart_grid_iot/server/src/config/config.default.ts
T
andyesfly 6aea23c070 merge: 合并 xtzd/main 的报警监控、ICC 网关/模拟量/报警订阅与菜单修复提交
冲突解决:auth.middleware.ts 与 rbac.middleware.ts 的 ignore 白名单取并集,同时保留 /api/customer-app/*(小程序客户鉴权)与 /api/icc-event/callback(ICC 事件回调 URL token 校验)。
2026-10-24 21:21:16 +08:00

142 lines
4.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 });
}
// midway logger 默认日志目录为 join(MIDWAY_LOGGER_WRITEABLE_DIR ?? appInfo.root, "logs", appName),
// 且启动时 loggerService 会用该默认值强制覆盖用户 logger.dir 配置(addObject reverse=true)。
// 显式指定项目目录,使日志最终落在 server/logs 下,避免写入用户主目录触发 EPERM 权限报错。
if (!process.env.MIDWAY_LOGGER_WRITEABLE_DIR) {
process.env.MIDWAY_LOGGER_WRITEABLE_DIR = envDir;
}
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"
},
// 微信小程序(静默登录 code2session)
wx: {
appId: process.env.WX_APPID || "",
secret: process.env.WX_SECRET || ""
},
// 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"
},
// ICC 事件订阅配置(回调地址需 ICC 服务器可访问;订阅保活每 30 分钟向 ICC 重新注册)
iccEvent: {
monitorUrl: "http://222.243.55.42:7001/api/icc-event/callback", // 回调地址(ICC 服务器需可访问)
callbackToken: "xtzd_icc_event_2026", // 回调 URL 固定 token
subscriberName: "222.243.55.42_7001_alarm", // 订阅者唯一名
subscriberMagic: "222.243.55.42_7001" // IP_端口
},
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;