From 894150d1fa91fb20b4440adac05c5715dd6b75d8 Mon Sep 17 00:00:00 2001 From: eric Date: Mon, 23 Mar 2026 02:18:43 -0500 Subject: [PATCH] 's' --- .env.local | 2 +- README.md | 6 ++-- app/lib/env.ts | 4 +-- config/domain.config.ts | 23 ++++++++------- config/services.config.ts | 2 +- deploy/nginx.hackrobot.cn.conf | 53 ++++++++++++++++++++++++++++++++++ 6 files changed, 73 insertions(+), 17 deletions(-) create mode 100644 deploy/nginx.hackrobot.cn.conf diff --git a/.env.local b/.env.local index 001f6c8..43e850b 100644 --- a/.env.local +++ b/.env.local @@ -1,2 +1,2 @@ -PAYMENT_API_URL=https://api.nomadyt.com +PAYMENT_API_URL=https://salonapi.hackrobot.cn PAYMENT_JOIN_AMOUNT=2900 diff --git a/README.md b/README.md index cc19995..6b1fe5c 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,9 @@ ### 前端 (salon) -- `PAYMENT_API_URL`: salonapi 公网地址,**生产环境必填**(如 `https://api.nomadyt.com`) -- `ROOT_DOMAIN`: 根域名,未设 PAYMENT_API_URL 时用于推导 `https://api.${ROOT_DOMAIN}`,默认 `nomadyt.com` -- `NEXT_PUBLIC_SITE_URL`: 前端站点地址,线上 `https://nomadyt.com` +- `PAYMENT_API_URL`: salonapi 公网地址,**生产环境必填**(如 `https://salonapi.hackrobot.cn`) +- `ROOT_DOMAIN`: 根域名(兼容变量),默认 `hackrobot.cn`;生产 salonapi 主机为 `salonapi.hackrobot.cn` +- `NEXT_PUBLIC_SITE_URL`: 前端站点地址,线上 `https://salon.hackrobot.cn` - `PAYJSAPI_PORT`: 开发时 salonapi 端口,默认 `8007` - `ZPAY_PID` / `ZPAY_KEY`、`XORPAY_AID` / `XORPAY_SECRET`:支付平台凭证,与 salonapi 一致。用于 pay/status 兜底直接查询,**本地无回调时依赖此检测支付** - `NEXT_PUBLIC_POCKETBASE_URL` / `POCKETBASE_URL`: PocketBase 地址 diff --git a/app/lib/env.ts b/app/lib/env.ts index af2cfb2..c9effa2 100644 --- a/app/lib/env.ts +++ b/app/lib/env.ts @@ -1,6 +1,6 @@ const isDev = process.env.NODE_ENV === "development"; -/** 前端站点地址。线上 nomadyt.com,开发 localhost:3002 */ +/** 前端站点地址。线上 salon.hackrobot.cn,开发 localhost:3002 */ export const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || - (isDev ? "http://localhost:3002" : "https://nomadyt.com"); + (isDev ? "http://localhost:3002" : "https://salon.hackrobot.cn"); diff --git a/config/domain.config.ts b/config/domain.config.ts index 4a8c1d9..486e06e 100644 --- a/config/domain.config.ts +++ b/config/domain.config.ts @@ -1,25 +1,28 @@ /** - * 域名配置 - * - salon 前端线上: nomadyt.com - * - salonapi 后端线上: api.nomadyt.com(join、支付等) + * 域名配置(腾讯云生产) + * - 前端: https://salon.hackrobot.cn + * - salonapi: https://salonapi.hackrobot.cn(join、支付等) */ const isDev = process.env.NODE_ENV === "development"; -/** 根域名。前端 nomadyt.com,后端 api.nomadyt.com */ -export const ROOT_DOMAIN = - process.env.ROOT_DOMAIN || process.env.NEXT_PUBLIC_ROOT_DOMAIN || "nomadyt.com"; +/** 生产环境 salonapi 主机(非 api.根域名 模式) */ +const DEFAULT_PROD_PAYMENT_API_HOST = "salonapi.hackrobot.cn"; -/** salonapi 默认地址。开发连本地 8007,生产连 api.nomadyt.com */ +/** 兼容旧逻辑:未单独设 PAYMENT_API_URL 时用于文档/兜底 */ +export const ROOT_DOMAIN = + process.env.ROOT_DOMAIN || process.env.NEXT_PUBLIC_ROOT_DOMAIN || "hackrobot.cn"; + +/** salonapi 默认地址。开发连本地 8007,生产连 salonapi.hackrobot.cn */ export const DEFAULT_PAYMENT_API_URL = isDev ? "http://127.0.0.1:8007" - : `https://api.${ROOT_DOMAIN}`; + : `https://${DEFAULT_PROD_PAYMENT_API_HOST}`; -/** 解析 salonapi 地址(api.nomadyt.com) */ +/** 解析 salonapi 公网地址 */ export function resolvePaymentApiUrl(): string { const url = process.env.PAYMENT_API_URL || DEFAULT_PAYMENT_API_URL; if (!isDev && /^(https?:\/\/)?(127\.0\.0\.1|localhost)(:\d+)?(\/|$)/i.test(url)) { - return `https://api.${ROOT_DOMAIN}`; + return `https://${DEFAULT_PROD_PAYMENT_API_HOST}`; } return url.replace(/\/$/, ""); } diff --git a/config/services.config.ts b/config/services.config.ts index d97f148..b21e1cf 100644 --- a/config/services.config.ts +++ b/config/services.config.ts @@ -1,6 +1,6 @@ /** * salon 服务配置 - PocketBase、支付 - * 前端 nomadyt.com,后端 salonapi api.nomadyt.com + * 前端 salon.hackrobot.cn,后端 salonapi.hackrobot.cn */ import { resolvePaymentApiUrl } from "./domain.config"; diff --git a/deploy/nginx.hackrobot.cn.conf b/deploy/nginx.hackrobot.cn.conf new file mode 100644 index 0000000..bb13261 --- /dev/null +++ b/deploy/nginx.hackrobot.cn.conf @@ -0,0 +1,53 @@ +# 腾讯云:将 salon.hackrobot.cn、salonapi.hackrobot.cn 解析到本机公网 IP 后, +# 复制到 /etc/nginx/sites-available/ 并 ln -s 到 sites-enabled,再 nginx -t && systemctl reload nginx。 +# 需先申请 SSL(certbot 或腾讯云 SSL 证书),把证书路径替换为实际路径。 + +# ---------- salon 前端(Next.js 建议 Node 监听 127.0.0.1:3002,由 Nginx 反代)---------- +server { + listen 443 ssl http2; + server_name salon.hackrobot.cn; + + ssl_certificate /etc/nginx/ssl/salon.hackrobot.cn/fullchain.pem; + ssl_certificate_key /etc/nginx/ssl/salon.hackrobot.cn/privkey.pem; + + location / { + proxy_pass http://127.0.0.1:3002; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +server { + listen 80; + server_name salon.hackrobot.cn; + return 301 https://$host$request_uri; +} + +# ---------- salonapi 后端(uvicorn 建议 127.0.0.1:8007)---------- +server { + listen 443 ssl http2; + server_name salonapi.hackrobot.cn; + + ssl_certificate /etc/nginx/ssl/salonapi.hackrobot.cn/fullchain.pem; + ssl_certificate_key /etc/nginx/ssl/salonapi.hackrobot.cn/privkey.pem; + + client_max_body_size 50m; + + location / { + proxy_pass http://127.0.0.1:8007; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +server { + listen 80; + server_name salonapi.hackrobot.cn; + return 301 https://$host$request_uri; +}