feat: Add optional environment variables for database and KV namespace configuration

This commit is contained in:
beilunyang
2025-03-09 10:22:06 +08:00
parent 77cb52e608
commit d9fb486104
3 changed files with 19 additions and 2 deletions

View File

@@ -482,8 +482,10 @@ const data = await res.json();
- `CLOUDFLARE_API_TOKEN`: Cloudflare API Token
- `CLOUDFLARE_ACCOUNT_ID`: Cloudflare Account ID
- `DATABASE_NAME`: D1 数据库名称
- `DATABASE_ID`: D1 数据库 ID
- `KV_NAMESPACE_ID`: Cloudflare KV namespace ID,用于存储网站配置
- `DATABASE_ID`: D1 数据库 ID (可选, 如果不填, 则会自动通过 Cloudflare API 获取)
- `KV_NAMESPACE_NAME`: Cloudflare KV namespace 名称,用于存储网站配置
- `KV_NAMESPACE_ID`: Cloudflare KV namespace ID用于存储网站配置 (可选, 如果不填, 则会自动通过 Cloudflare API 获取)
- `CUSTOM_DOMAIN`: 网站自定义域名,用于访问 MoeMail (可选, 如果不填, 则会使用 Cloudflare Pages 默认域名)
## Github OAuth App 配置

View File

@@ -7,6 +7,7 @@ const CUSTOM_DOMAIN = process.env.CUSTOM_DOMAIN;
const PROJECT_NAME = process.env.PROJECT_NAME || "moemail";
const DATABASE_NAME = process.env.DATABASE_NAME || "moemail-db";
const KV_NAMESPACE_NAME = process.env.KV_NAMESPACE_NAME || "moemail-kv";
const DATABASE_ID = process.env.DATABASE_ID;
const client = new Cloudflare({
apiKey: CF_API_TOKEN,
@@ -46,6 +47,12 @@ export const createPages = async () => {
};
export const getDatabase = async () => {
if (DATABASE_ID) {
return {
uuid: DATABASE_ID,
}
}
const database = await client.d1.database.get(DATABASE_NAME, {
account_id: CF_ACCOUNT_ID,
});

View File

@@ -17,6 +17,8 @@ const DATABASE_NAME = process.env.DATABASE_NAME || "moemail-db";
const KV_NAMESPACE_NAME = process.env.KV_NAMESPACE_NAME || "moemail-kv";
const CUSTOM_DOMAIN = process.env.CUSTOM_DOMAIN;
const KV_NAMESPACE_ID = process.env.KV_NAMESPACE_ID;
/**
* 验证必要的环境变量
*/
@@ -195,6 +197,12 @@ const migrateDatabase = () => {
const checkAndCreateKVNamespace = async () => {
console.log(`🔍 Checking if KV namespace "${KV_NAMESPACE_NAME}" exists...`);
if (KV_NAMESPACE_ID) {
updateKVConfig(KV_NAMESPACE_ID);
console.log(`✅ User specified KV namespace (ID: ${KV_NAMESPACE_ID})`);
return;
}
try {
let namespace;