's'
This commit is contained in:
95
config/remote-services.ts
Normal file
95
config/remote-services.ts
Normal file
@@ -0,0 +1,95 @@
|
||||
/**
|
||||
* Windows 本地开发时,如何连接 Linux 线上服务。
|
||||
*
|
||||
* 线上服务器(82.157.112.245 / nomadro.cn)架构:
|
||||
* - PocketBase:公网 https://pocketbase.nomadro.cn → 内网 127.0.0.1:8090
|
||||
* - FastAPI:公网 http://api.nomadro.cn → 内网 127.0.0.1:8000
|
||||
* - MinIO S3 API:仅内网 127.0.0.1:9100;公网 https://minio.nomadro.cn/hackrobot/ 只代理读路径
|
||||
* - MinIO 公开文件 URL:https://minio.nomadro.cn/hackrobot/{key}
|
||||
*
|
||||
* Windows 本地推荐:
|
||||
* 1. 跑本地 Next.js + FastAPI
|
||||
* 2. POCKETBASE_URL 用 https://pocketbase.nomadro.cn
|
||||
* 3. MinIO 用 scripts/dev-tunnel.py 把本地 9100 隧道到服务器 9100
|
||||
*/
|
||||
|
||||
import { IS_DEVELOPMENT } from "./runtime-env";
|
||||
|
||||
export const REMOTE_ROOT_DOMAIN =
|
||||
process.env.ROOT_DOMAIN || process.env.NEXT_PUBLIC_ROOT_DOMAIN || "nomadro.cn";
|
||||
|
||||
export const REMOTE_SERVICE_URLS = {
|
||||
pocketbase: `https://pocketbase.${REMOTE_ROOT_DOMAIN}`,
|
||||
api: `http://api.${REMOTE_ROOT_DOMAIN}`,
|
||||
minioPublic: `https://minio.${REMOTE_ROOT_DOMAIN}/hackrobot`,
|
||||
site: `https://${REMOTE_ROOT_DOMAIN}`,
|
||||
mirotalk: `https://mirotalk.${REMOTE_ROOT_DOMAIN}`,
|
||||
lounge: `https://lounge.${REMOTE_ROOT_DOMAIN}`,
|
||||
} as const;
|
||||
|
||||
/** 当前是否为「本地前端 + 远程服务」开发模式 */
|
||||
export function isRemoteDevMode(): boolean {
|
||||
if (!IS_DEVELOPMENT) return false;
|
||||
const pb = (process.env.POCKETBASE_URL || "").trim();
|
||||
const minio = (process.env.MINIO_ENDPOINT || "").trim();
|
||||
return (
|
||||
pb.includes("nomadro.cn") ||
|
||||
pb.includes("pocketbase.") ||
|
||||
minio === "127.0.0.1" ||
|
||||
minio.includes("nomadro.cn")
|
||||
);
|
||||
}
|
||||
|
||||
export function resolvePocketBaseUrl(): string {
|
||||
return (
|
||||
process.env.POCKETBASE_URL ||
|
||||
process.env.NEXT_PUBLIC_POCKETBASE_URL ||
|
||||
REMOTE_SERVICE_URLS.pocketbase
|
||||
).replace(/\/$/, "");
|
||||
}
|
||||
|
||||
export function resolveMinioEndpoint(): {
|
||||
endPoint: string;
|
||||
port: number;
|
||||
useSSL: boolean;
|
||||
} {
|
||||
const host = (process.env.MINIO_ENDPOINT || "127.0.0.1").replace(/^https?:\/\//, "");
|
||||
const isLocalHost = host === "127.0.0.1" || host === "localhost";
|
||||
const isDomain = host.includes(".");
|
||||
|
||||
if (isDomain && !isLocalHost) {
|
||||
return {
|
||||
endPoint: host,
|
||||
port: Number(process.env.MINIO_PORT || "443"),
|
||||
useSSL: process.env.MINIO_USE_SSL !== "false",
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
endPoint: host,
|
||||
port: Number(process.env.MINIO_PORT || "9100"),
|
||||
useSSL: process.env.MINIO_USE_SSL === "true",
|
||||
};
|
||||
}
|
||||
|
||||
export function resolveMinioConnection(options?: { bucket?: string }): {
|
||||
endPoint: string;
|
||||
port: number;
|
||||
useSSL: boolean;
|
||||
bucket: string;
|
||||
publicUrl: string;
|
||||
} {
|
||||
const bucket = options?.bucket || process.env.MINIO_BUCKET || "hackrobot";
|
||||
const conn = resolveMinioEndpoint();
|
||||
const publicUrl = (
|
||||
process.env.MINIO_PUBLIC_URL ||
|
||||
process.env.NEXT_PUBLIC_MINIO_PUBLIC_URL ||
|
||||
`${REMOTE_SERVICE_URLS.minioPublic}`
|
||||
).replace(/\/$/, "");
|
||||
|
||||
return {
|
||||
...conn,
|
||||
bucket,
|
||||
publicUrl,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user