293 lines
5.9 KiB
Markdown
293 lines
5.9 KiB
Markdown
# 部署指南 - Academic Search Proxy
|
||
|
||
## 前置要求
|
||
|
||
1. **Cloudflare 账号**
|
||
- 注册地址:https://dash.cloudflare.com/sign-up
|
||
- Workers 免费套餐:100,000 请求/天
|
||
|
||
2. **Wrangler CLI**
|
||
```bash
|
||
npm install -g wrangler
|
||
|
||
# 登录
|
||
wrangler login
|
||
```
|
||
|
||
## 部署步骤
|
||
|
||
### 1. 本地测试
|
||
|
||
```bash
|
||
cd workers/academic-search-proxy
|
||
|
||
# 本地开发模式
|
||
npx wrangler dev
|
||
|
||
# 测试健康检查
|
||
curl http://localhost:8787/health
|
||
```
|
||
|
||
### 2. 首次部署
|
||
|
||
```bash
|
||
# 部署到 Cloudflare
|
||
npx wrangler deploy
|
||
|
||
# 输出示例:
|
||
# ✨ Published academic-search-proxy
|
||
# https://academic-search-proxy.your-subdomain.workers.dev
|
||
```
|
||
|
||
### 3. 配置环境变量
|
||
|
||
#### 3.1 公开变量(wrangler.toml)
|
||
|
||
编辑 `wrangler.toml`:
|
||
|
||
```toml
|
||
[vars]
|
||
ENABLE_AUTH = "false" # 改为 "true" 启用认证
|
||
ALLOWED_ORIGINS = "http://localhost:8080,https://yourdomain.com"
|
||
```
|
||
|
||
重新部署:
|
||
```bash
|
||
npx wrangler deploy
|
||
```
|
||
|
||
#### 3.2 密钥变量(Secrets)
|
||
|
||
```bash
|
||
# Semantic Scholar API Key(可选)
|
||
# 获取:https://www.semanticscholar.org/product/api
|
||
npx wrangler secret put SEMANTIC_SCHOLAR_API_KEY
|
||
# 输入你的 API Key 并回车
|
||
|
||
# PubMed API Key(可选)
|
||
# 获取:https://www.ncbi.nlm.nih.gov/account/settings/
|
||
npx wrangler secret put PUBMED_API_KEY
|
||
|
||
# 认证密钥(如果 ENABLE_AUTH = "true")
|
||
npx wrangler secret put AUTH_SECRET
|
||
# 输入一个强密码,客户端需要使用这个密钥
|
||
```
|
||
|
||
### 4. 自定义域名(可选)
|
||
|
||
#### 4.1 通过 Cloudflare Dashboard
|
||
|
||
1. 进入 Dashboard:https://dash.cloudflare.com
|
||
2. 选择你的 Worker:`academic-search-proxy`
|
||
3. 点击 **Triggers** → **Custom Domains**
|
||
4. 添加域名,如:`academic-search.yourdomain.com`
|
||
|
||
#### 4.2 通过 wrangler.toml
|
||
|
||
```toml
|
||
[[routes]]
|
||
pattern = "academic-search.yourdomain.com/*"
|
||
zone_name = "yourdomain.com"
|
||
```
|
||
|
||
```bash
|
||
npx wrangler deploy
|
||
```
|
||
|
||
## 客户端配置
|
||
|
||
### 修改前端代码
|
||
|
||
找到 `js/processing/reference-doi-resolver.js`,添加代理配置:
|
||
|
||
```javascript
|
||
// 在文件顶部添加
|
||
const ACADEMIC_PROXY = {
|
||
enabled: true, // 是否启用代理
|
||
baseUrl: 'https://academic-search-proxy.your-subdomain.workers.dev',
|
||
authKey: null // 如果启用了认证,填入 AUTH_SECRET
|
||
};
|
||
```
|
||
|
||
修改各个 Resolver 的请求 URL(示例见下方)。
|
||
|
||
## 验证部署
|
||
|
||
### 1. 健康检查
|
||
|
||
```bash
|
||
curl https://your-worker.workers.dev/health
|
||
```
|
||
|
||
预期输出:
|
||
```json
|
||
{
|
||
"status": "ok",
|
||
"timestamp": 1234567890,
|
||
"services": {
|
||
"semanticscholar": { "enabled": true, "hasApiKey": false },
|
||
"pubmed": { "enabled": true, "hasApiKey": false },
|
||
"crossref": { "enabled": true },
|
||
"openalex": { "enabled": true },
|
||
"arxiv": { "enabled": true }
|
||
},
|
||
"authentication": {
|
||
"required": false
|
||
}
|
||
}
|
||
```
|
||
|
||
### 2. 测试各个服务
|
||
|
||
```bash
|
||
# Semantic Scholar
|
||
curl "https://your-worker.workers.dev/api/semanticscholar/graph/v1/paper/search?query=test&limit=1"
|
||
|
||
# PubMed
|
||
curl "https://your-worker.workers.dev/api/pubmed/esearch.fcgi?db=pubmed&term=cancer&retmode=json&retmax=1"
|
||
|
||
# CrossRef
|
||
curl "https://your-worker.workers.dev/api/crossref/works?query.title=test&rows=1"
|
||
|
||
# OpenAlex
|
||
curl "https://your-worker.workers.dev/api/openalex/works?search=test"
|
||
|
||
# arXiv
|
||
curl "https://your-worker.workers.dev/api/arxiv/query?search_query=ti:test&max_results=1"
|
||
```
|
||
|
||
## 更新部署
|
||
|
||
修改代码后重新部署:
|
||
|
||
```bash
|
||
npx wrangler deploy
|
||
```
|
||
|
||
查看部署历史和回滚:
|
||
|
||
```bash
|
||
# 查看部署历史
|
||
npx wrangler deployments list
|
||
|
||
# 回滚到上一个版本
|
||
npx wrangler rollback
|
||
```
|
||
|
||
## 监控和日志
|
||
|
||
### 实时日志
|
||
|
||
```bash
|
||
npx wrangler tail
|
||
```
|
||
|
||
### Cloudflare Dashboard
|
||
|
||
1. 进入:https://dash.cloudflare.com
|
||
2. Workers & Pages → `academic-search-proxy`
|
||
3. 查看:
|
||
- 请求统计
|
||
- 错误率
|
||
- CPU 时间
|
||
- 带宽使用
|
||
|
||
## 安全配置
|
||
|
||
### 生产环境建议
|
||
|
||
1. **启用认证**
|
||
```toml
|
||
[vars]
|
||
ENABLE_AUTH = "true"
|
||
```
|
||
|
||
2. **限制来源**
|
||
```toml
|
||
[vars]
|
||
ALLOWED_ORIGINS = "https://yourdomain.com,https://app.yourdomain.com"
|
||
```
|
||
|
||
3. **设置强密钥**
|
||
```bash
|
||
# 生成随机密钥
|
||
openssl rand -base64 32
|
||
|
||
# 设置为 AUTH_SECRET
|
||
npx wrangler secret put AUTH_SECRET
|
||
```
|
||
|
||
4. **添加速率限制**(需要付费计划)
|
||
- 在 Cloudflare Dashboard 设置 Rate Limiting 规则
|
||
|
||
## 故障排查
|
||
|
||
### 部署失败
|
||
|
||
```bash
|
||
# 检查配置
|
||
npx wrangler whoami
|
||
|
||
# 重新登录
|
||
npx wrangler login
|
||
|
||
# 清理缓存
|
||
rm -rf node_modules .wrangler
|
||
npx wrangler deploy
|
||
```
|
||
|
||
### CORS 错误
|
||
|
||
确认 `ALLOWED_ORIGINS` 包含你的域名:
|
||
```toml
|
||
[vars]
|
||
ALLOWED_ORIGINS = "http://localhost:8080,https://yourdomain.com"
|
||
```
|
||
|
||
### 401 错误
|
||
|
||
检查认证配置:
|
||
```bash
|
||
# 查看当前变量
|
||
npx wrangler secret list
|
||
|
||
# 重新设置
|
||
npx wrangler secret put AUTH_SECRET
|
||
```
|
||
|
||
### 速率限制
|
||
|
||
添加 API Keys:
|
||
```bash
|
||
npx wrangler secret put SEMANTIC_SCHOLAR_API_KEY
|
||
npx wrangler secret put PUBMED_API_KEY
|
||
```
|
||
|
||
## 成本
|
||
|
||
### 免费套餐
|
||
|
||
- **请求数**: 100,000 请求/天
|
||
- **CPU 时间**: 10ms/请求(免费额度:10ms x 100,000 = 1,000秒/天)
|
||
- **足够覆盖**: 中小型应用
|
||
|
||
### 付费套餐($5/月)
|
||
|
||
- **请求数**: 10,000,000 请求/月
|
||
- **CPU 时间**: 30,000,000 CPU 毫秒/月
|
||
- **适合**: 大型应用
|
||
|
||
## 下一步
|
||
|
||
1. ✅ 部署 Worker
|
||
2. ✅ 配置环境变量
|
||
3. ✅ 测试所有端点
|
||
4. ⏭️ 修改前端代码使用代理(见 README.md)
|
||
5. ⏭️ 在设置界面添加配置选项
|
||
|
||
## 参考资料
|
||
|
||
- [Cloudflare Workers 文档](https://developers.cloudflare.com/workers/)
|
||
- [Wrangler CLI 文档](https://developers.cloudflare.com/workers/wrangler/)
|
||
- [Workers 定价](https://developers.cloudflare.com/workers/platform/pricing/)
|