541 lines
24 KiB
Markdown
541 lines
24 KiB
Markdown
# 自然写科技互联网服务体系规划建设
|
||
|
||
## 一、域名定位
|
||
|
||
自然写科技拥有四个域名,各自承担明确的角色分工:
|
||
|
||
| 域名 | 角色 | 注册/托管 | 说明 |
|
||
|------|------|----------|------|
|
||
| **yink.ai** | **品牌主域 / 全球前端** | **阿里云** | 解析到阿里云新加坡服务器,对外统一宣传,所有营销材料、名片、包装统一使用此域名 |
|
||
| writech.ai | 品牌辅助域 | 阿里云 | 与 yink.ai 指向同一站点,301 跳转至 yink.ai,保留完整品牌名的可达性 |
|
||
| writech.cn | 大陆数据服务 | 腾讯云 | ICP 备案已完成,承载 API、存储、AI 处理,所有用户数据留存于大陆 |
|
||
| writech.hk | 备用 / 香港节点 | 阿里云 | 可作 yink.ai 的 CNAME 或备用入口 |
|
||
|
||
**为什么选择 yink.ai 作为品牌主域**:
|
||
|
||
- **更简洁**:yink.ai 仅 7 个字符(writech.ai 为 10 个字符),输入更快,记忆更容易
|
||
- **品牌基因一致**:yink 延续 ink 系列命名基因(Y 可代表 "Your ink"),与硬件产品(Bink / Cink / Mink / Tink …)的命名体系高度统一
|
||
- **视觉友好**:短域名在二维码、产品丝印、名片、APP 启动页等印刷空间受限场景下显示效果更佳
|
||
- **域名后缀**:.ai 后缀体现公司 AI 智能教育的技术定位
|
||
|
||
**writech.ai 的辅助角色**:writech.ai 保留不弃用,所有通过 writech.ai 的访问自动 301 永久跳转至 yink.ai,确保历史链接和搜索引擎收录不失效,同时将 SEO 权重集中到 yink.ai。
|
||
|
||
**核心设计原则**:品牌形象与数据服务解耦。对外统一用 yink.ai 呈现品牌(writech.ai 自动跳转至 yink.ai),用户实际的数据读写全部落在 writech.cn 的大陆服务器上,符合数据安全合规要求。
|
||
|
||
---
|
||
|
||
## 二、网站与 API 架构
|
||
|
||
### 2.1 首页(yink.ai)
|
||
|
||
- 部署于阿里云新加坡服务器(47.84.109.13),并接入**阿里云 CDN** 全球加速
|
||
- 页面为纯静态(HTML / CSS / JS),内容基本不变,CDN 全球缓存后访问极快
|
||
- 大陆用户访问 yink.ai 属于"浏览境外网站",只要页面不含敏感内容,一般可正常访问(与 GitHub Pages、Notion 等性质相同)
|
||
- 访问 writech.ai 自动 301 跳转至 yink.ai,两个域名共享同一阿里云新加坡源站
|
||
- **首页服务器不存放任何用户数据**,仅作品牌展示与产品介绍
|
||
|
||
### 2.2 大陆数据服务(writech.cn)
|
||
|
||
writech.cn 已完成 ICP 备案,部署于腾讯云广州服务器(106.55.191.177),承载全部后端业务:
|
||
|
||
- 用户账号注册 / 登录 / 认证(OAuth2 / JWT)
|
||
- 智能笔笔迹数据上传 / 下载
|
||
- AI 手写识别推理(OCR、笔顺评分、数学识别)
|
||
- 文件对象存储(OSS / COS)
|
||
- MQTT / WebSocket 实时数据通道(笔迹实时同步)
|
||
- 设备管理、OTA 升级
|
||
|
||
大陆端 APP、SDK、设备固件的 API BaseURL 统一配置为:
|
||
|
||
```
|
||
https://api.writech.cn/v1/
|
||
```
|
||
|
||
### 2.3 前后端跨域调用(CORS)
|
||
|
||
yink.ai 首页中的前端 JS 调用大陆 API 涉及跨域,通过标准 CORS 机制解决:
|
||
|
||
```
|
||
yink.ai 前端 JS
|
||
└─ fetch("https://api.writech.cn/v1/...")
|
||
└─ 大陆 API 服务端响应头配置:
|
||
Access-Control-Allow-Origin: https://yink.ai
|
||
Access-Control-Allow-Credentials: true
|
||
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
|
||
```
|
||
|
||
配套要点:
|
||
|
||
- 大陆 API 网关(Nginx / API Gateway)统一拦截并注入 CORS 响应头,允许 `yink.ai` 和 `writech.ai` 两个来源,无需每个服务单独配置
|
||
- 用户 Token 使用 `Authorization: Bearer <token>` Header 方式传递,避免跨域 Cookie 的复杂性
|
||
- 敏感操作(注册、实名认证、支付)建议直接跳转至 `writech.cn` 页面完成,减少跨域风险面
|
||
|
||
### 2.4 海外数据服务(按需扩展)
|
||
|
||
当海外业务增长到需要独立节点时,通过阿里云 CDN 边缘脚本(EdgeScript)或 API 网关实现地区智能路由,无需改动客户端代码:
|
||
|
||
```
|
||
用户访问 yink.ai 首页
|
||
└─ 阿里云 CDN 边缘节点检测用户 IP 所在地区
|
||
├─ 大陆用户 → API BaseURL = https://api.writech.cn
|
||
└─ 海外用户 → API BaseURL = https://api-sg.yink.ai(新加坡)
|
||
或 https://api-us.yink.ai(美西)
|
||
```
|
||
|
||
- 海外 API 节点部署于新加坡 / 美西云服务器,用户数据按所在地合规存储
|
||
- 阿里云 CDN 边缘脚本提供地区检测能力,前端 JS 首次加载时调用一次,缓存地区信息后动态切换 API BaseURL
|
||
- 海外节点与大陆节点通过消息队列异步同步必要的公共数据(如产品目录、固件版本),用户私有数据不跨境传输
|
||
|
||
### 2.5 DNS 规划
|
||
|
||
.ai 和 .hk 域名 DNS 托管于**阿里云 DNS**,.cn 域名 DNS 托管于**腾讯云 DNSPod**:
|
||
|
||
| 记录 | 类型 | 指向 | DNS 平台 | 用途 |
|
||
|------|------|------|---------|------|
|
||
| **yink.ai** | **A** | **阿里云新加坡服务器** | **阿里云 DNS** | **品牌主域首页** |
|
||
| www.yink.ai | CNAME | yink.ai | 阿里云 DNS | 带 www 访问 |
|
||
| api.yink.ai | CNAME | api.writech.cn | 阿里云 DNS | 预留,转发至大陆 API |
|
||
| api-sg.yink.ai | A | 新加坡服务器 | 阿里云 DNS | 海外 API(按需) |
|
||
| writech.ai | A | 阿里云新加坡服务器 | 阿里云 DNS | 辅助域,301 跳转至 yink.ai |
|
||
| www.writech.ai | CNAME | writech.ai | 阿里云 DNS | 301 跳转至 yink.ai |
|
||
| writech.cn | A | 腾讯云广州服务器 | 腾讯云 DNSPod | 大陆数据服务(ICP 已备案) |
|
||
| api.writech.cn | A | 腾讯云广州服务器 | 腾讯云 DNSPod | 大陆数据 API |
|
||
| writech.hk | CNAME | yink.ai | 阿里云 DNS | 备用入口 |
|
||
|
||
---
|
||
|
||
## 三、电子邮件服务规划
|
||
|
||
### 3.1 可行性结论
|
||
|
||
**完全可行,推荐统一使用 `xxx@yink.ai`**。
|
||
|
||
电子邮件走 SMTP / IMAP 协议,与网站是否在大陆 ICP 备案没有任何关系。只要 yink.ai 域名的 DNS MX 记录指向合规的企业邮件服务器,全体员工和所有客服地址均可统一使用 `@yink.ai` 后缀,国内外用户侧完全一致,品牌形象统一。
|
||
|
||
> **备注**:如有历史 `@writech.ai` 邮箱地址在外部流通,可同步在 writech.ai 域名下配置 MX 记录,将 `xxx@writech.ai` 来信转发到对应的 `xxx@yink.ai` 邮箱,确保过渡期不丢信。
|
||
|
||
### 3.2 推荐方案
|
||
|
||
**方案 A — 免费邮件转发服务(适合早期)**
|
||
|
||
```
|
||
yink.ai DNS 托管于阿里云
|
||
└─ 配置 MX 记录指向免费邮件转发服务(如 ImprovMX / ForwardEmail.net)
|
||
└─ 将 xxx@yink.ai 转发到员工实际收件邮箱
|
||
├─ 个人员工:转发到各自的 Gmail / QQ 邮箱
|
||
└─ 客服角色:转发到飞书群邮箱 / 企业微信
|
||
└─ 发件配置:在 Gmail / Outlook 中添加"以其他地址发送"
|
||
配置 SMTP 凭据,对外显示 xxx@yink.ai 发出
|
||
```
|
||
|
||
优点:免费或极低成本,配置简单,无需购买额外服务
|
||
适合:公司初创期,人员 20 人以内
|
||
|
||
---
|
||
|
||
**方案 B — 腾讯企业邮箱(推荐,国内访问最稳定)**
|
||
|
||
```
|
||
yink.ai MX 记录 → 腾讯企业邮箱 MX 服务器(exmail.qq.com)
|
||
└─ 管理后台统一分配 xxx@yink.ai 邮箱账号
|
||
└─ 支持 Web 端、Outlook、iPhone / Android 原生邮件 APP
|
||
└─ 大陆访问极速稳定,海外员工同样可用
|
||
```
|
||
|
||
- 费用约 **8 元/人/月**,腾讯企业邮箱明确支持 `.ai` 后缀域名
|
||
- 提供邮件归档、反垃圾、大附件等企业级功能
|
||
- 适合团队规模 10 人以上,长期使用推荐此方案
|
||
|
||
---
|
||
|
||
**方案 C — Google Workspace(国际形象,大陆需 VPN)**
|
||
|
||
```
|
||
yink.ai MX 记录 → Google MX 服务器
|
||
└─ 全员 Google 账号,收发地址均为 xxx@yink.ai
|
||
└─ 大陆员工需通过 VPN 访问,不适合全员在国内的团队
|
||
```
|
||
|
||
适合:海外团队为主,或公司已有 VPN 基础设施
|
||
|
||
### 3.3 功能邮箱规划
|
||
|
||
| 用途 | 邮件地址 | 说明 |
|
||
|------|----------|------|
|
||
| 客户服务 | support@yink.ai | 统一对外,国内外用户均用此地址联系 |
|
||
| 商务合作 | bd@yink.ai | 渠道合作、商务洽谈 |
|
||
| 技术支持 | tech@yink.ai | 开发者、SDK 集成客户 |
|
||
| 媒体公关 | pr@yink.ai | 媒体采访、公关事务 |
|
||
| 管理员 | admin@yink.ai | 系统通知,内部使用 |
|
||
|
||
客服邮箱**国内外统一,不做地区区分**,后台由客服管理系统(如飞书、Zendesk)按用户语言或地区自动路由分派给对应客服人员处理。
|
||
|
||
### 3.4 必须配置的 DNS 邮件记录
|
||
|
||
邮件送达率依赖以下四类 DNS 记录,缺少任何一项都会导致邮件被对方标记为垃圾邮件:
|
||
|
||
```dns
|
||
# ===== yink.ai 主邮件域 =====
|
||
|
||
# 1. MX 记录 — 指定收件服务器(按选定方案填写)
|
||
yink.ai. MX 10 exmail.qq.com. # 腾讯企业邮箱示例
|
||
|
||
# 2. SPF — 声明授权发件服务器,防伪造发件人
|
||
yink.ai. TXT "v=spf1 include:spf.mail.qq.com ~all"
|
||
|
||
# 3. DKIM — 邮件内容数字签名,防篡改
|
||
selector._domainkey.yink.ai. TXT "v=DKIM1; k=rsa; p=<公钥由邮件服务商提供>"
|
||
|
||
# 4. DMARC — 声明 SPF/DKIM 验证失败时的处理策略
|
||
_dmarc.yink.ai. TXT "v=DMARC1; p=quarantine; rua=mailto:admin@yink.ai"
|
||
|
||
# ===== writech.ai 辅助邮件域(过渡期接收转发)=====
|
||
|
||
writech.ai. MX 10 exmail.qq.com. # 同一邮件服务商
|
||
writech.ai. TXT "v=spf1 include:spf.mail.qq.com ~all"
|
||
```
|
||
|
||
> **说明**:以上记录中的具体值(MX 主机名、SPF include、DKIM 公钥)在选定邮件服务商后,由服务商管理后台提供,按实际值填写到对应 DNS 托管平台(阿里云 DNS)即可。writech.ai 辅助域的 MX 配置确保历史 @writech.ai 邮件可正常接收并转发至对应 @yink.ai 邮箱。
|
||
|
||
---
|
||
|
||
## 四、SSL / TLS 证书规划
|
||
|
||
全站 HTTPS 是安全底线,四个域名及其子域均须配置 SSL 证书。统一采用 **ZeroSSL** 作为证书签发服务,由 **writech.hk 服务器**集中运行 acme.sh 脚本完成所有域名的证书申请与自动续期,再分发至各业务服务器。
|
||
|
||
### 4.1 统一证书方案:ZeroSSL
|
||
|
||
**为什么选择 ZeroSSL**:
|
||
|
||
- 免费 DV 证书,90 天有效期,通过 ACME 协议自动续期
|
||
- 根证书为 Sectigo(原 Comodo),全球浏览器和设备信任链完整,兼容性优于 Let's Encrypt 在部分老旧设备上的表现
|
||
- 提供 Web 管理面板(zerossl.com),可随时查看已签发证书状态
|
||
- 完整支持 ACME v2 协议,与 acme.sh 工具无缝集成
|
||
- 支持通配符证书(Wildcard)和多域名 SAN 证书
|
||
|
||
**证书覆盖范围**:
|
||
|
||
| 域名 / 子域 | 证书类型 | 费用 | 有效期 / 续期 |
|
||
|------------|---------|------|---------------|
|
||
| yink.ai / *.yink.ai | DV 通配符 | 免费 | 90 天,acme.sh 自动续期 |
|
||
| writech.ai / *.writech.ai | DV 通配符 | 免费 | 90 天,acme.sh 自动续期 |
|
||
| writech.cn / *.writech.cn | DV 通配符 | 免费 | 90 天,acme.sh 自动续期 |
|
||
| writech.hk / *.writech.hk | DV 通配符 | 免费 | 90 天,acme.sh 自动续期 |
|
||
|
||
> **DV**(Domain Validation)= 域名验证型证书,签发快、免费,满足绝大多数场景。若未来需要在浏览器地址栏显示企业名称(绿色标识),可升级为 OV/EV 证书。
|
||
|
||
### 4.2 证书管理架构
|
||
|
||
**writech.hk 服务器**承担证书集中管理节点的角色:
|
||
|
||
```
|
||
writech.hk 服务器(证书管理中心)
|
||
|
|
||
|-- acme.sh + ZeroSSL ACME
|
||
| |-- 申请/续期 yink.ai 通配符证书
|
||
| |-- 申请/续期 writech.ai 通配符证书
|
||
| |-- 申请/续期 writech.cn 通配符证书
|
||
| |-- 申请/续期 writech.hk 通配符证书
|
||
|
|
||
|-- cron 定时任务(每天凌晨 2:00 检查续期)
|
||
|
|
||
|-- 续期成功后自动分发证书文件
|
||
|-- SCP 推送至阿里云应用服务器
|
||
|-- SCP 推送至腾讯云应用服务器
|
||
|-- SCP 推送至私有云 Linux 服务器
|
||
|-- 各服务器执行 reload Nginx
|
||
```
|
||
|
||
**通配符证书验证方式**:通配符证书必须通过 DNS TXT 记录验证(DNS-01 Challenge)。acme.sh 内置阿里云 / 腾讯云(DNSPod)DNS API 插件,可全自动完成 DNS 记录的添加与清理,无需人工干预。
|
||
|
||
### 4.3 acme.sh 安装与配置(writech.hk)
|
||
|
||
**首次安装 acme.sh**:
|
||
|
||
```bash
|
||
# 安装 acme.sh(以普通用户身份运行,不要使用 root)
|
||
curl https://get.acme.sh | sh -s email=admin@yink.ai
|
||
|
||
# 将默认 CA 切换为 ZeroSSL
|
||
acme.sh --set-default-ca --server zerossl
|
||
|
||
# 注册 ZeroSSL 账号(首次使用需要)
|
||
acme.sh --register-account --server zerossl \
|
||
--eab-kid "<YOUR_EAB_KID>" \
|
||
--eab-hmac-key "<YOUR_EAB_HMAC_KEY>"
|
||
```
|
||
|
||
> **EAB 凭据获取**:在 zerossl.com 注册账号后,进入 Developer 页面生成 EAB KID 和 HMAC Key。
|
||
|
||
**申请通配符证书**(.ai / .hk 域名使用阿里云 DNS API):
|
||
|
||
```bash
|
||
# 配置阿里云 DNS API 凭据(用于 .ai 和 .hk 域名)
|
||
export Ali_Key="<YOUR_ALI_ACCESS_KEY>"
|
||
export Ali_Secret="<YOUR_ALI_SECRET_KEY>"
|
||
|
||
# 申请 yink.ai 通配符证书
|
||
acme.sh --issue --dns dns_ali \
|
||
-d "yink.ai" -d "*.yink.ai" \
|
||
--keylength ec-256
|
||
|
||
# 申请 writech.ai 通配符证书
|
||
acme.sh --issue --dns dns_ali \
|
||
-d "writech.ai" -d "*.writech.ai" \
|
||
--keylength ec-256
|
||
|
||
# 申请 writech.hk 通配符证书
|
||
acme.sh --issue --dns dns_ali \
|
||
-d "writech.hk" -d "*.writech.hk" \
|
||
--keylength ec-256
|
||
```
|
||
|
||
**申请 writech.cn 通配符证书**(使用腾讯云 DNSPod API):
|
||
|
||
```bash
|
||
# 配置腾讯云 DNSPod API 凭据(用于 .cn 域名)
|
||
export DP_Id="<YOUR_DNSPOD_ID>"
|
||
export DP_Key="<YOUR_DNSPOD_KEY>"
|
||
|
||
# 申请 writech.cn 通配符证书
|
||
acme.sh --issue --dns dns_dp \
|
||
-d "writech.cn" -d "*.writech.cn" \
|
||
--keylength ec-256
|
||
```
|
||
|
||
> **ec-256**:使用 ECC P-256 密钥,比传统 RSA 2048 握手更快、密钥更短,现代浏览器和服务器均已支持。
|
||
|
||
### 4.4 证书分发与部署
|
||
|
||
证书申请成功后,需要安装到各业务服务器。当前服务器清单:
|
||
|
||
| 服务器 | 角色 | 使用的证书 |
|
||
|-------|------|----------|
|
||
| **腾讯云应用服务器(广州)** | writech.cn 大陆数据服务 | writech.cn 通配符 |
|
||
| **阿里云应用服务器(新加坡)** | yink.ai / writech.ai 品牌站点及海外服务 | yink.ai + writech.ai 通配符 |
|
||
| **私有云 Linux 服务器** | 数据源站、用户账户信息源 | 按需部署各域名证书 |
|
||
| **writech.hk 服务器** | 证书管理中心 | yink.ai + writech.ai + writech.cn + writech.hk 通配符 |
|
||
|
||
**acme.sh 安装证书到本地(writech.hk 自身)**:
|
||
|
||
```bash
|
||
# 安装 yink.ai 证书到 Nginx 目录
|
||
acme.sh --install-cert -d "yink.ai" -d "*.yink.ai" \
|
||
--key-file /etc/ssl/private/yink_ai.key \
|
||
--fullchain-file /etc/ssl/certs/yink_ai.pem \
|
||
--reloadcmd "sudo systemctl reload nginx"
|
||
|
||
# 安装 writech.ai 证书
|
||
acme.sh --install-cert -d "writech.ai" -d "*.writech.ai" \
|
||
--key-file /etc/ssl/private/writech_ai.key \
|
||
--fullchain-file /etc/ssl/certs/writech_ai.pem \
|
||
--reloadcmd "sudo systemctl reload nginx"
|
||
|
||
# 安装 writech.hk 证书
|
||
acme.sh --install-cert -d "writech.hk" -d "*.writech.hk" \
|
||
--key-file /etc/ssl/private/writech_hk.key \
|
||
--fullchain-file /etc/ssl/certs/writech_hk.pem \
|
||
--reloadcmd "sudo systemctl reload nginx"
|
||
```
|
||
|
||
**自动分发脚本(deploy_certs.sh)**:
|
||
|
||
acme.sh 续期成功后通过 `--reloadcmd` 触发此脚本,将证书推送到远程服务器:
|
||
|
||
```bash
|
||
#!/bin/bash
|
||
# deploy_certs.sh — 证书续期后自动分发到各业务服务器
|
||
# 部署在 writech.hk 服务器上,由 acme.sh --reloadcmd 触发
|
||
|
||
LOG_FILE="/var/log/cert_deploy.log"
|
||
DATE=$(date '+%Y-%m-%d %H:%M:%S')
|
||
|
||
# === 远程服务器列表 ===
|
||
ALIYUN_HOST="root@<阿里云内网IP>"
|
||
TENCENT_HOST="root@<腾讯云内网IP>"
|
||
PRIVATE_HOST="root@<私有云IP>"
|
||
|
||
# === 证书源路径 ===
|
||
CERT_DIR="$HOME/.acme.sh"
|
||
|
||
# === 分发函数 ===
|
||
deploy_cert() {
|
||
local host=$1
|
||
local domain=$2
|
||
local remote_cert_dir="/etc/ssl/certs"
|
||
local remote_key_dir="/etc/ssl/private"
|
||
|
||
echo "[$DATE] 分发 $domain 证书到 $host" >> $LOG_FILE
|
||
|
||
scp -q "${CERT_DIR}/${domain}_ecc/fullchain.cer" \
|
||
"${host}:${remote_cert_dir}/${domain//\./_}.pem"
|
||
scp -q "${CERT_DIR}/${domain}_ecc/${domain}.key" \
|
||
"${host}:${remote_key_dir}/${domain//\./_}.key"
|
||
|
||
ssh -q "$host" "sudo systemctl reload nginx" && \
|
||
echo "[$DATE] $host ($domain) 部署成功" >> $LOG_FILE || \
|
||
echo "[$DATE] $host ($domain) 部署失败!" >> $LOG_FILE
|
||
}
|
||
|
||
# === 分发 writech.cn 证书到大陆服务器 ===
|
||
deploy_cert "$ALIYUN_HOST" "writech.cn"
|
||
deploy_cert "$TENCENT_HOST" "writech.cn"
|
||
|
||
# === 分发所有域名证书到私有云服务器 ===
|
||
for domain in yink.ai writech.ai writech.cn writech.hk; do
|
||
deploy_cert "$PRIVATE_HOST" "$domain"
|
||
done
|
||
|
||
# === 重载本地 Nginx(writech.hk 自身)===
|
||
sudo systemctl reload nginx
|
||
echo "[$DATE] 本地 writech.hk Nginx 已重载" >> $LOG_FILE
|
||
|
||
echo "[$DATE] === 证书分发完成 ===" >> $LOG_FILE
|
||
```
|
||
|
||
**配置 acme.sh 续期后自动触发分发**:
|
||
|
||
```bash
|
||
# 为每个域名设置续期后的部署钩子
|
||
acme.sh --install-cert -d "writech.cn" -d "*.writech.cn" \
|
||
--reloadcmd "/home/deploy/deploy_certs.sh"
|
||
```
|
||
|
||
> **SSH 免密登录**:writech.hk 需预先配置到各远程服务器的 SSH Key 免密登录(`ssh-copy-id`),确保 SCP 和 SSH 命令无需交互。
|
||
|
||
### 4.5 Nginx HTTPS 配置模板
|
||
|
||
各服务器的 Nginx 推荐配置(以 writech.cn API 服务器为例):
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name api.writech.cn writech.cn;
|
||
return 301 https://$host$request_uri; # HTTP 强制跳转 HTTPS
|
||
}
|
||
|
||
server {
|
||
listen 443 ssl http2;
|
||
server_name api.writech.cn;
|
||
|
||
ssl_certificate /etc/ssl/certs/writech_cn.pem;
|
||
ssl_certificate_key /etc/ssl/private/writech_cn.key;
|
||
|
||
# TLS 安全加固
|
||
ssl_protocols TLSv1.2 TLSv1.3; # 禁用 TLS 1.0/1.1
|
||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
|
||
ssl_prefer_server_ciphers on;
|
||
|
||
# HSTS — 告诉浏览器此后只允许 HTTPS 访问(建议上线稳定后开启)
|
||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||
|
||
# CORS 头(允许 yink.ai 和 writech.ai 前端跨域调用)
|
||
# 生产环境建议通过 Nginx map 动态匹配多个 Origin
|
||
add_header Access-Control-Allow-Origin "https://yink.ai" always;
|
||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
||
add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:8080; # 后端服务
|
||
}
|
||
}
|
||
```
|
||
|
||
> writech.hk 的 Nginx 配置类似,将 `ssl_certificate` 路径替换为对应域名的证书文件即可。
|
||
|
||
### 4.6 自动续期验证
|
||
|
||
acme.sh 安装时已自动注册 cron 任务,每天凌晨检查证书到期情况,距到期 30 天内自动续期:
|
||
|
||
```bash
|
||
# 查看 acme.sh 自动续期 cron
|
||
crontab -l | grep acme.sh
|
||
# 输出类似:0 2 * * * "/home/deploy/.acme.sh"/acme.sh --cron --home "/home/deploy/.acme.sh"
|
||
|
||
# 手动测试续期流程(不会真正续期,仅验证流程)
|
||
acme.sh --renew -d "yink.ai" -d "*.yink.ai" --force --dry-run
|
||
|
||
# 查看所有已管理证书的状态
|
||
acme.sh --list
|
||
```
|
||
|
||
### 4.7 证书监控与告警
|
||
|
||
证书过期是生产事故高频原因之一,建议配置多层监控:
|
||
|
||
| 方式 | 说明 |
|
||
|------|------|
|
||
| acme.sh cron 日志 | 续期脚本日志保存在 `~/.acme.sh/acme.sh.log`,可定期检查是否有续期失败记录 |
|
||
| deploy_certs.sh 日志 | 分发脚本日志保存在 `/var/log/cert_deploy.log`,记录每次推送结果 |
|
||
| ZeroSSL 管理面板 | 登录 zerossl.com 查看所有已签发证书的到期时间和状态 |
|
||
| 外部监控(推荐) | 使用 [UptimeRobot](https://uptimerobot.com)(免费)监控各域名 HTTPS 可用性,证书异常时自动邮件告警 |
|
||
| 脚本告警(推荐) | 在 deploy_certs.sh 中增加续期失败时发送邮件或企业微信/飞书通知的逻辑 |
|
||
|
||
---
|
||
|
||
## 五、整体架构
|
||
|
||
```
|
||
┌─────────────────────────────────┐
|
||
│ 用户(大陆 / 海外) │
|
||
└────────────────┬────────────────┘
|
||
│ HTTPS
|
||
┌─────────────┴─────────────┐
|
||
▼ ▼
|
||
┌───────────────────────┐ ┌───────────────────────┐
|
||
│ writech.cn │ │ yink.ai / writech.ai │
|
||
│ (大陆·ICP 已备案) │ │ (品牌站·海外服务) │
|
||
│ 腾讯云 · 广州 │ │ 阿里云 · 新加坡 │
|
||
│ 106.55.191.177 │ │ 47.84.109.13 │
|
||
│ │ │ │
|
||
│ · 用户认证 │ │ · 品牌首页 / 落地页 │
|
||
│ · 笔迹数据存储 │ │ · 海外用户服务 │
|
||
│ · AI 手写识别 │ │ · 算力 API 调用 │
|
||
│ · MQTT 实时通道 │ │ │
|
||
│ · OTA 固件升级 │ │ │
|
||
└───────────┬───────────┘ └───────────┬───────────┘
|
||
│ 数据读写 / 同步 │
|
||
└─────────────┬─────────────┘
|
||
▼
|
||
┌─────────────────────────────┐
|
||
│ 私有云数据源站 │
|
||
│ 118.141.37.23 │
|
||
│ · 核心数据存储 │
|
||
│ · 用户账户信息源 │
|
||
│ · 大容量存储 │
|
||
└─────────────────────────────┘
|
||
|
||
┌─────────────────────────────────┐
|
||
│ 企业邮件(@yink.ai 统一域名) │
|
||
│ MX → 腾讯企业邮箱 │
|
||
│ SPF + DKIM + DMARC 全配置 │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 六、实施路线图
|
||
|
||
| 阶段 | 任务 | 预计周期 |
|
||
|------|------|----------|
|
||
| **第一阶段** | yink.ai / writech.ai DNS 在阿里云配置,writech.cn DNS 在腾讯云 DNSPod 配置 | 第 1 周 |
|
||
| **第一阶段** | 阿里云新加坡服务器搭建,静态首页上线 | 第 1-2 周 |
|
||
| **第一阶段** | writech.cn ICP 备案已完成,腾讯云广州 API 服务器上线 | 同步进行 |
|
||
| **第一阶段** | 企业邮箱开通(腾讯企业邮箱),SPF / DKIM / DMARC 配置,分配员工邮箱 | 第 1 周 |
|
||
| **第二阶段** | 大陆 APP / SDK / 固件 API BaseURL 统一切换至 `api.writech.cn` | 第 3-6 周 |
|
||
| **第二阶段** | 大陆 API 网关配置 CORS,允许 yink.ai / writech.ai 前端跨域调用 | 同步 |
|
||
| **第二阶段** | 阿里云 CDN 边缘脚本实现地区检测与智能路由 | 第 4 周 |
|
||
| **第三阶段** | 海外 API 节点上线(新加坡),前端智能路由切换 | 按业务需求 |
|
||
| **第三阶段** | 数据合规审查,确认海外数据不跨境传输 | 配套进行 |
|
||
|
||
---
|
||
|
||
## 七、关键注意事项
|
||
|
||
1. **ICP 备案已完成**:writech.cn 已在腾讯云完成 ICP 备案,大陆数据服务正常运行
|
||
2. **yink.ai 首页内容合规**:首页面向全球,避免涉及敏感词汇,确保大陆用户可正常访问
|
||
3. **数据主权**:大陆用户产生的数据必须存储于 writech.cn 大陆服务器,不得将用户数据同步至香港或海外节点,符合《数据安全法》和《个人信息保护法》
|
||
4. **邮件发件域名一致性**:所有系统通知邮件(注册验证码、订单确认等)的发件地址统一使用 `noreply@yink.ai`,避免用 writech.cn 发信造成品牌形象分裂
|
||
5. **HTTPS 全站强制**:yink.ai、writech.ai 和 writech.cn 所有端点必须强制 HTTPS,通过 ZeroSSL 统一签发免费 TLS 证书
|
||
6. **writech.ai → yink.ai 301 跳转**:writech.ai 所有路径统一 301 永久跳转至 yink.ai 对应路径,集中 SEO 权重;确保历史链接、搜索引擎索引不失效
|