HiCyou 是一个开源的、致力于收集全球最新 SaaS 和 AI 工具的发现平台。我们通过 AI 技术实时捕捉、分析并结构化刚发布的新产品,为用户提供零时差的工具导航服务。
本文档详细介绍了如何将 HiCyou 部署到阿里云 ESA (Edge Security Acceleration) 的边缘程序(Edge Routine / Pages)上,并规划了从 Cloudflare R2 迁移到阿里云 OSS 的后续步骤。
1. 部署到阿里云 ESA Pages
阿里云 ESA Pages (边缘网页) 类似于 Cloudflare Pages,允许我们将 Next.js 应用部署到全球边缘节点。由于 HiCyou 是基于 Next.js 构建的,我们可以利用 ESA 的静态导出或 Node.js 兼容模式(视 ESA 具体支持情况而定,推荐使用静态导出 output: 'export' 或使用适配器)。
前置准备

- 开通 ESA 服务:在阿里云控制台开通边缘安全加速 ESA 服务。
- 创建站点:在 ESA 控制台创建一个新的站点(Site),绑定你的域名(如
hicyou.com)。 - 代码准备:确保本地代码可以正常 build。
部署步骤
Github 开源项目地址:
https://github.com/hicyoucom/hicyou
Demo地址:

方案 A: 静态导出 (推荐,适用于纯静态部分)
如果 HiCyou 的核心功能不依赖复杂的服务器端渲染 (SSR) 或 Edge Runtime,最简单的方法是使用 Next.js 的静态导出。
修改 next.config.mjs:
const nextConfig = { output: 'export', // ... 其他配置 };构建项目:
npm run build这会生成一个
out目录。
上传到 ESA Pages:
- 进入 ESA 控制台 -> 边缘网页 (Pages)。
- 创建新项目,连接你的 GitHub 仓库。
- 配置构建命令:
npm run build。 - 配置输出目录:
out。 - 点击部署。
方案 B: 使用 Node.js / 容器化部署 (适用于完整功能)
如果需要 SSR (Server-Side Rendering) 和 API Routes,建议使用 ESA 的计算服务或搭配阿里云 FC (函数计算)。但为了最接近 "Pages" 的体验,我们可以使用 ESA CLI 进行部署(假设 ESA 即将支持或已经支持 Next.js 适配器)。
目前最稳妥的生产级部署方案是 Docker 容器化 + ESA 边缘容器(如果支持)或 阿里云 FC + ESA 回源。此处仅介绍通用的 ESA Pages 静态托管流程,动态 API 建议通过独立服务部署。
环境配置
在 ESA Pages 的项目设置中,添加以下环境变量(参考
.env.example):
NEXT_PUBLIC_SITE_URL: 你的线上域名NEXT_PUBLIC_SUPABASE_URL: Supabase URLNEXT_PUBLIC_SUPABASE_ANON_KEY: Supabase Key- (其他必要的公开变量)
2. 下一步计划:兼容阿里云 OSS (替代 R2)
当前 HiCyou 使用 Cloudflare R2 存储图片(Logo 和 Cover),为了全面迁移到阿里云生态,我们需要将 R2 替换为阿里云 OSS (Object Storage Service)。
由于 R2 和 OSS 都兼容 S3 协议,迁移成本相对较低,但仍需进行以下改造。
待办事项 (Todo List)
[ ] 1. 基础设施准备
- 在阿里云 OSS 控制台创建 Bucket (例如
hicyou-assets). - 配置跨域访问 (CORS) 规则,允许
hicyou.com访问。 - 获取 AccessKey ID 和 AccessKey Secret。
- 配置自定义域名 (CDN 加速域名),例如
assets.hicyou.com,并开启 HTTPS。
[ ] 2. 代码改造 (fetcher/src/index.ts & app/api/...)
需要修改使用 @aws-sdk/client-s3 的地方。OSS 虽然兼容 S3,但 Endpoint 格式不同。
修改 S3 Client 配置:
```
// 当前 R2 配置const r2Client = new S3Client({
region: "auto", endpoint: `https://${process.env.R2_ACCOUNT_ID}.r2.cloudflarestorage.com`, credentials: { ... }});
// 目标 OSS 配置
const ossClient = new S3Client({
region: process.env.OSS_REGION, // e.g., "oss-cn-hangzhou"
endpoint: `https://${process.env.OSS_REGION}.aliyuncs.com`, // 使用外网 Endpoint
credentials: {
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
secretAccessKey: process.env.OSS_ACCESS_KEY_SECRET,
},
});
#### [ ] 3. 环境变量更新
在
.env 中添加新的 OSS 变量,废弃 R2 变量:
DELETE
R2_ACCOUNT_ID=...
R2_ACCESS_KEY_ID=...
R2_SECRET_ACCESS_KEY=...
R2_BUCKET_NAME=...
R2_PUBLIC_URL=...
NEW (OSS)
OSS_REGION="oss-cn-shenzhen"
OSS_ACCESS_KEY_ID="LTAI..."
OSS_ACCESS_KEY_SECRET="xk3..."
OSS_BUCKET_NAME="hicyou-assets"
OSS_PUBLIC_URL="https://assets.hicyou.com"
```
[ ] 4. 数据迁移 (可选但推荐)
如果需要保留旧数据,需要将 R2 中的数据迁移到 OSS。
- 可以使用
rclone工具进行从 R2 到 OSS 的在线同步。
[ ] 5. 测试验证
- 验证图片上传功能 (Logo/Cover) 是否正常写入 OSS。
- 验证前端图片加载是否正常 (CDN 域名解析、HTTPS 证书)。
- 验证图片处理 (OSS 自带图片处理参数
?x-oss-process=...) 是否需要适配 (如果我们使用了 R2 的特定转换功能)。
总结
部署到 ESA Pages 能够提供更好的国内访问速度(如果有国内节点),而迁移到 OSS 则能更好地整合阿里云的 CDN 和图片处理能力。完成上述 Todo 后,HiCyou 就可以完全运行在阿里云基础设施之上。