精简环境变量配置

This commit is contained in:
yml2213
2026-05-26 09:48:05 +08:00
parent 8b1904d732
commit 779287f662
6 changed files with 16 additions and 63 deletions
+5 -15
View File
@@ -1,39 +1,29 @@
# Mac Docker development template. Copy to .env for local full-stack testing.
# For public claim links, update APP_BASE_URL and CLAIM_BASE_URL together.
# App
# Mac Docker 本机联调模板。复制为 .env 后按需修改。
# 如果使用 ngrok / cloudflared 等公网地址,只需要同步修改 APP_DOMAIN / CADDY_SITE_ADDR / CLAIM_BASE_URL
# App / Caddy
APP_DOMAIN=localhost
APP_BASE_URL=http://localhost
CADDY_SITE_ADDR=http://localhost
TZ=Asia/Shanghai
BACKEND_PORT=3000
# Claim Links
CLAIM_BASE_URL=http://localhost/#/claim
CLAIM_TOKEN_TTL_HOURS=24
# Database
POSTGRES_DB=order_site
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DATABASE_URL=postgres://postgres:postgres@postgres:5432/order_site
DATABASE_SSL=false
DATABASE_MAX_CONNECTIONS=10
POSTGRES_PORT=5432
# Data And Logging
DATA_ROOT=/app/data
# Logging
LOG_LEVEL=info
# Admin
ADMIN_SESSION_SECRET=dev-local-session-secret
ADMIN_SESSION_TTL_HOURS=12
ADMIN_DEFAULT_USERS_JSON=[{"username":"admin","password":"dev-admin-123456","role":"admin"},{"username":"operator","password":"dev-operator-123456","role":"operator"}]
# 91Kaquan
NINETYONE_USER_ID=
NINETYONE_SECRET=
NINETYONE_VERSION=1.0
NINETYONE_SHOP_ID=91kaquan
NINETYONE_SHOP_NAME=91卡券
NINETYONE_TIMESTAMP_TOLERANCE_SECONDS=600
NINETYONE_CARDS_ENCODING=aes-256-ecb-base64
+5 -15
View File
@@ -1,38 +1,28 @@
# Production deployment template. Copy to .env and replace every change-me value.
# Keep real secrets out of git.
# App
# 生产部署模板。复制为 .env 后替换所有 change-me 值。
# 真实密钥不要提交到 git
# App / Caddy
APP_DOMAIN=order.khhao.com
APP_BASE_URL=https://order.khhao.com
CADDY_SITE_ADDR=https://order.khhao.com
TZ=Asia/Shanghai
BACKEND_PORT=3000
# Claim Links
CLAIM_BASE_URL=https://order.khhao.com/#/claim
CLAIM_TOKEN_TTL_HOURS=24
# Database
POSTGRES_DB=order_site
POSTGRES_USER=postgres
POSTGRES_PASSWORD=change-me-postgres-password
DATABASE_URL=postgres://postgres:change-me-postgres-password@postgres:5432/order_site
DATABASE_SSL=false
DATABASE_MAX_CONNECTIONS=20
# Data And Logging
DATA_ROOT=/app/data
# Logging
LOG_LEVEL=info
# Admin
ADMIN_SESSION_SECRET=change-me-long-random-session-secret
ADMIN_SESSION_TTL_HOURS=12
ADMIN_DEFAULT_USERS_JSON=[{"username":"admin","password":"change-me-admin-password","role":"admin"},{"username":"operator","password":"change-me-operator-password","role":"operator"}]
# 91Kaquan
NINETYONE_USER_ID=
NINETYONE_SECRET=
NINETYONE_VERSION=1.0
NINETYONE_SHOP_ID=91kaquan
NINETYONE_SHOP_NAME=91卡券
NINETYONE_TIMESTAMP_TOLERANCE_SECONDS=600
NINETYONE_CARDS_ENCODING=aes-256-ecb-base64
+4 -4
View File
@@ -98,12 +98,12 @@ cp .env.server.example .env
常用变量:
- `APP_BASE_URL`:应用公网地址,用于推导领取链接
- `CLAIM_BASE_URL`:领取页地址,优先级高于 `APP_BASE_URL`
- `APP_DOMAIN` / `CADDY_SITE_ADDR`Caddy 对外域名与监听地址
- `CLAIM_BASE_URL`:领取页完整地址
- `DATABASE_URL`PostgreSQL 连接串
- `ADMIN_SESSION_SECRET`:后台登录态签名密钥
- `ADMIN_DEFAULT_USERS_JSON`:默认后台用户
- `DATABASE_URL`PostgreSQL 连接串
- `NINETYONE_*`91 卡券对接配置
- `NINETYONE_USER_ID` / `NINETYONE_SECRET`91 卡券开放接口凭据
## 运行数据
+2 -2
View File
@@ -43,12 +43,12 @@ npm test
常用配置:
- 服务端口 `PORT`
- 服务端口 `PORT`Docker 部署中由根目录 `.env``BACKEND_PORT` 映射)
- 日志级别 `LOG_LEVEL=debug|info|warn|error`
- 数据库连接 `DATABASE_URL`
- 后台登录密钥 `ADMIN_SESSION_SECRET`
- 默认后台用户 `ADMIN_DEFAULT_USERS_JSON`
- 91 卡券与快手相关平台配置
- 91 卡券开放接口凭据 `NINETYONE_USER_ID` / `NINETYONE_SECRET`
## 接口
-12
View File
@@ -9,7 +9,6 @@ import {
parseBoolean,
parseInteger,
parseJsonArray,
parseCommaSeparatedStrings,
} from "./runtime-env.js";
import { deepMerge } from "./runtime-merge.js";
@@ -305,17 +304,6 @@ function adminUsersJsonEnv(
};
}
function stringArrayEnv(
env: string,
configPath: RuntimeConfigPath
): EnvOverride {
return {
env,
path: configPath,
read: parseCommaSeparatedStrings,
};
}
function corsOriginsEnv(
env: string,
configPath: RuntimeConfigPath
-15
View File
@@ -96,18 +96,3 @@ export function parseJsonArray<T = unknown>(rawValue: unknown): T[] | null {
return null;
}
}
export function parseCommaSeparatedStrings(rawValue: unknown): string[] | null {
const normalized = String(rawValue || "").trim();
if (!normalized) {
return null;
}
const items = normalized
.split(",")
.map((item) => item.trim())
.filter((item) => item.length > 0);
return items.length > 0 ? items : null;
}