98 lines
3.0 KiB
TypeScript
98 lines
3.0 KiB
TypeScript
/**
|
||
* 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}`,
|
||
listmonk: `https://listmonk.${REMOTE_ROOT_DOMAIN}`,
|
||
ntfy: `https://ntfy.${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,
|
||
};
|
||
}
|