Files
gitlab-instance-0a899031_cn…/config/remote-services.ts

98 lines
3.0 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.
/**
* 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 公开文件 URLhttps://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,
};
}