Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pac
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ai-tools
pac
Commits
e0761aef
Commit
e0761aef
authored
Oct 08, 2026
by
luoqi
Browse files
Options
Browse Files
Download
Plain Diff
merge: test deployment certificate and auth documentation
parents
31a1756e
8d1884e3
Pipeline
#3715
failed in 0 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
9 additions
and
16 deletions
+9
-16
apps/ai-service/src/cli/onboard-tenant.cli.ts
+1
-1
deploy/nginx/friday-ai-test.conf
+3
-3
docs/friday-ai-test-deployment.md
+3
-10
packages/pac-client/src/client.ts
+2
-2
No files found.
apps/ai-service/src/cli/onboard-tenant.cli.ts
View file @
e0761aef
...
...
@@ -149,7 +149,7 @@ async function checkPac(
const
hint
:
Record
<
typeof
first
.
reason
,
string
>
=
{
not_configured
:
'ai-service 没配 PAC 读接入:在 .env 里填 AI_PAC_BASE_URL / AI_PAC_READ_SECRET'
,
auth
:
`PAC
没把宿主
${
input
.
partnerCode
}
授权给我们:在 PAC 那边跑 pnpm pac:host grant-read
${
input
.
partnerCode
}
(宿主名写错了也是这句)
`
,
auth
:
`PAC
读取鉴权失败:核对 PAC_READ_SECRET 与 AI_PAC_READ_SECRET 是否一致,以及宿主
${
input
.
partnerCode
}
是否存在且启用
`
,
unreachable
:
'PAC 连不上:看 AI_PAC_BASE_URL 对不对、PAC 起没起来'
,
error
:
'PAC 回了错误'
,
};
...
...
deploy/nginx/friday-ai-test.conf
View file @
e0761aef
# 测试机主机 Nginx;启用前先
扩展共享证书,覆盖 fai.jarvismedical.asia
。
# 测试机主机 Nginx;启用前先
签发 fai.jarvismedical.asia 独立证书
。
# ⛔ 不要修改 PAC 的 server;此文件独立启用且仅加载一份。
server
{
listen
80
;
...
...
@@ -12,8 +12,8 @@ server {
listen
[::]:
443
ssl
http2
;
server_name
fai
.
jarvismedical
.
asia
;
ssl_certificate
/
etc
/
letsencrypt
/
live
/
tools
.
jarvismedical
.
asia
/
fullchain
.
pem
;
ssl_certificate_key
/
etc
/
letsencrypt
/
live
/
tools
.
jarvismedical
.
asia
/
privkey
.
pem
;
ssl_certificate
/
etc
/
letsencrypt
/
live
/
fai
.
jarvismedical
.
asia
/
fullchain
.
pem
;
ssl_certificate_key
/
etc
/
letsencrypt
/
live
/
fai
.
jarvismedical
.
asia
/
privkey
.
pem
;
include
/
etc
/
letsencrypt
/
options
-
ssl
-
nginx
.
conf
;
ssl_dhparam
/
etc
/
letsencrypt
/
ssl
-
dhparams
.
pem
;
...
...
docs/friday-ai-test-deployment.md
View file @
e0761aef
...
...
@@ -132,18 +132,11 @@ curl -fsS http://127.0.0.1:3101/health | jq -e '.status == "ok"'
## 6. 首次配置 HTTPS
保留 PAC 共享证书的全部域名,追加 FridayAI
:
为 FridayAI 签发独立证书,不改 PAC 现有共享证书
:
```
sh
AI_CERT
=
/etc/letsencrypt/live/tools.jarvismedical.asia/fullchain.pem
mapfile
-t
AI_CERT_DOMAINS < <
(
openssl x509
-in
"
$AI_CERT
"
-noout
-ext
subjectAltName |
grep
-oE
'DNS:[^, ]+'
| cut
-d
:
-f2
)
[
"
${#
AI_CERT_DOMAINS
[@]
}
"
-gt
0
]
AI_CERT_ARGS
=()
for
domain
in
"
${
AI_CERT_DOMAINS
[@]
}
"
;
do
AI_CERT_ARGS+
=(
-d
"
$domain
"
)
;
done
if
!
printf
'%s\n'
"
${
AI_CERT_DOMAINS
[@]
}
"
|
grep
-qx
fai.jarvismedical.asia
;
then
certbot certonly
--nginx
--cert-name
tools.jarvismedical.asia
--expand
"
${
AI_CERT_ARGS
[@]
}
"
-d
fai.jarvismedical.asia
fi
openssl x509
-in
"
$AI_CERT
"
-noout
-ext
subjectAltName |
grep
-q
'DNS:fai.jarvismedical.asia'
certbot certonly
--nginx
--non-interactive
--cert-name
fai.jarvismedical.asia
-d
fai.jarvismedical.asia
openssl x509
-in
/etc/letsencrypt/live/fai.jarvismedical.asia/fullchain.pem
-noout
-checkhost
fai.jarvismedical.asia
install
-m
644 deploy/nginx/friday-ai-test.conf /etc/nginx/sites-available/fai.jarvismedical.asia
ln
-sfn
/etc/nginx/sites-available/fai.jarvismedical.asia /etc/nginx/sites-enabled/fai.jarvismedical.asia
nginx
-t
...
...
packages/pac-client/src/client.ts
View file @
e0761aef
...
...
@@ -21,7 +21,7 @@ export interface PacClientOptions {
/** PAC 服务根,如 `http://localhost:3101`。⚠️ 不带 `/pac/v1`,那是本客户端拼的 */
baseUrl
:
string
;
/**
*
**读方**的那一把只读钥匙(PAC 把它放在授权给读方的每个宿主的 `read_secrets` 上)
。
*
PAC 的服务级 `PAC_READ_SECRET`,兼容历史宿主 `read_secrets`
。
* ⚠️ 只读,写不进 PAC。⭐ 读哪个宿主不在这里配 —— 每个请求自己带 `host`。
*/
readSecret
:
string
;
...
...
@@ -52,7 +52,7 @@ const PREFIX = '/pac/v1';
*
* ═══ ⚠️ 这一层守到哪 ═══════════════════════════════════════════════════════
*
*
授权是 **宿主级**的 ⇒ PAC 能强制的边界是 `host + tenant`
。
*
服务级密钥用于系统间认证,PAC 仍按 `host + tenant` 读取
。
* `orgScope` 是我们**自己声明**的,PAC 验不了越界。
* ⇒ 诊所/品牌级收窄是 **friday-ai 的责任**(由 ScopeService 算出来),
* 不是 PAC 给的保证。⛔ 别在别处手拼 orgScope。
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment