HiCyou 开源网址导航/目录 用 Supabase 和 Vercel 不花一分钱部署详细教程 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alanying
V2EX    推广

HiCyou 开源网址导航/目录 用 Supabase 和 Vercel 不花一分钱部署详细教程

  •  
  •   alanying 2025 年 12 月 11 日 1014 次点击
    这是一个创建于 97 天前的主题,其中的信息可能已经有所发展或是发生改变。

    HiCyou 是一个免费开源的工具目录平台,旨在帮助用户发现、整理并提交各类有用的工具和资源。 基于 Vercel 、Supabase 和 Cloudflare R2 等服务,你可以在几乎零成本的前提下,搭建一个专属的网址导航 / 资源目录站点,用来集中管理优质链接、为主站导流、推荐优秀网站等。

    HiCyou 适合个人开发者、站长和团队快速搭建“工具库 / 资源库”类网站,可用于展示、收录,也可以开放给用户自主提交资源,打造持续更新的高质量目录。

    HiCyou Free Open Source-SaaS Directory Platform

    应用场景示例:

    1. 构建专属行业网址导航
      • 如 AI 工具导航、独立开发者资源导航、设计师常用网站导航等
      • 按行业、功能、标签等方式归档,方便自己和用户快速查找
    2. 提升域名 DR / DA 等权重指标
      • 将导航站作为主站或其他项目的“资源中转站”
      • 合理布局外链与内容,有助于提升域名权重,利好二手域名交易和站群运营
    3. 打造个人 / 团队资源中心
      • 统一收纳团队常用工具、内部系统入口、文档链接等
      • 让新成员或合作方可以一键获取所有重要链接
    4. 对外展示精选网站与工具
      • 作为博客、个人主页或品牌官网的“推荐资源”子站
      • 用精选资源提升专业形象与信任度

    前置准备

    在开始之前,请确保你已经拥有以下账号和服务:

    1. 代码仓库:如果是 Fork 的本项目,确保你的 GitHub 账号下有该仓库。
    2. Vercel 账号:用于托管前端和 API 。
    3. Supabase 账号:用于提供 PostgreSQL 数据库和 Auth 服务。
    4. Cloudflare 账号:用于 R2 对象存储(存储图片)。

    第一步:配置 Supabase (数据库与认证)

    更详细的图文教程:《 Supabase 实战指南:从零开始搭建数据库、配置 Auth 并接入 Resend 邮件服务》

    1. 登录 Supabase Dashboard 并创建一个新项目。
    2. 获取数据库连接信息
      • 进入 Project Settings -> Database.
      • 在 Connection string 部分,复制 URI 模式的链接。此时你应该能得到 DATABASE_URL
      • 注意:生产环境建议使用 Connection Pooler (端口 6543) 以获得更好的连接管理。
    3. 获取 API Keys

    img

    • 进入 Project Settings -> API Keys -> Legacy anon, service_role API keys.
    • 复制 anon``public key (NEXT_PUBLIC_SUPABASE_ANON_KEY)。
      • 复制 service_role secret key (SUPABASE_SERVICE_ROLE_KEY)。
    • 复制 Project URL (NEXT_PUBLIC_SUPABASE_URL)。

    第二步:配置 Cloudflare R2 (图片存储)

    更详细的图文教程:《 Cloudflare R2 实战指南:配置免费 10G 存储和免费流量的对象存储与 S3 兼容 API Key 》

    1. 登录 Cloudflare Dashboard
    2. 进入左侧菜单的 R2
    3. **创建存储桶 (Bucket)**:
      • 点击 "Create bucket",输入名称(例如 hicyou-assets),位置选择 "Automatic" 或离你目标用户最近的区域。
      • 记录下 R2_BUCKET_NAME
    4. 配置公开访问
      • 进入刚创建的 Bucket ,点击 "Settings" -> "Public Access"。
      • 你可以绑定自定义域名(推荐)或开启 R2.dev 子域名。
      • 记录下你的公开访问域名,这将是 R2_PUBLIC_URL
    5. 获取 API Token
      • 回到 R2 主页,点击右侧的 "Manage R2 API Tokens"。
      • 点击 "Create API token"。
      • 权限选择:Object Read & Write (读写权限)。
      • 创建后,记录以下三个值:
        • Access Key ID (R2_ACCESS_KEY_ID)
        • Secret Access Key (R2_SECRET_ACCESS_KEY)
        • Endpoint (只需取类似 https://<ACCOUNT_ID>.r2.cloudflarestorage.com 中的 <ACCOUNT_ID> 部分作为 R2_ACCOUNT_ID)。

    第三步:本地配置与数据库同步

    在部署到 Vercel 之前,我们需要在本地配置好相关环境变量,并将数据库结构和初始数据同步到 Supabase 。

    1. 配置本地环境变量

    1. 在项目根目录下,复制示例配置文件:cp .env.example .env
    2. 打开 .env 文件,填入之前获取的 Supabase 和 Cloudflare R2 信息,以及你的 AI Key:# Supabase NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJh... SUPABASE_SERVICE_ROLE_KEY=eyJh... # Database (推荐使用 Connection Pooler 端口 6543, 并在末尾加 ?pgbouncer=true) DATABASE_URL="postgresql://postgres.[ref]:[password]@aws-0-[region].pooler.supabase.com:6543/postgres?pgbouncer=true" # Cloudflare R2 R2_ACCOUNT_ID=... R2_ACCESS_KEY_ID=... R2_SECRET_ACCESS_KEY=... R2_BUCKET_NAME=... R2_PUBLIC_URL=...

    全部变量名的介绍:

    变量名 说明
    数据库配置
    NEXT_PUBLIC_SUPABASE_URL Supabase Project URL
    NEXT_PUBLIC_SUPABASE_ANON_KEY Supabase Anon Key
    SUPABASE_SERVICE_ROLE_KEY Supabase Service Role Key
    DATABASE_URL Postgres 连接字符串
    存储配置 (R2)
    R2_ACCOUNT_ID Cloudflare Account ID
    R2_ACCESS_KEY_ID R2 Access Key
    R2_SECRET_ACCESS_KEY R2 Secret Key
    R2_BUCKET_NAME R2 Bucket 名称
    R2_PUBLIC_URL R2 公开访问域名
    R2_UPLOAD_DIR 上传目录前缀,可以默认不变
    R2_LOGO_DIR Logo 目录名,可以默认不变
    R2_COVER_DIR 封面目录名,可以默认不变
    网站基础配置
    NEXT_PUBLIC_SITE_URL 你的生产环境域名
    NEXT_PUBLIC_SITE_NAME 网站名称
    NEXT_PUBLIC_MAIL 联系邮箱
    NEXT_PUBLIC_Blog 博客地址
    安全与管理
    ADMIN_EMAILS 管理员邮箱 (逗号分隔)
    CRON_SECRET 定时任务密钥 (任意长字符串),可以用openssl rand -hex 32 生成
    赞助商配置 (可选)
    NEXT_PUBLIC_SPONSOR_IMAGE_URL 赞助商图片地址
    NEXT_PUBLIC_SPONSOR_LINK 赞助商跳转链接
    NEXT_PUBLIC_SPONSOR_TEXT 赞助商文案
    其他 (可选)
    EXASEARCH_API_KEY Exa 搜索 API Key
    NEXT_PUBLIC_TURNSTILE_SITE_KEY Cloudflare Turnstile ,留默认的就是 CF 官网测试 Key
    TURNSTILE_SECRET_KEY Cloudflare Turnstile Secret Key
    AI 配置(可选) Qwen 、DeepSeek 、Kimi 这些国产的都是支持的
    AI_API_KEY AI 服务商 Key
    AI_BASE_URL AI API 地址
    AI_MODEL 模型名称

    2. 同步数据库结构 (Schema Migration)

    此步骤将在 Supabase 数据库中创建所需的表结构。

    # 推送迁移到远程数据库 pnpm db:migrate 

    3. 写入初始数据 (Data Seeding)

    此步骤将写入默认分类和示例数据,帮助你快速开始。

    # 运行 Seed 脚本 pnpm db:seed 

    第四步:Vercel 项目配置与部署

    img

    img

    1. 登录 Vercel Dashboard
    2. 点击 "Add New..." -> **"Project"**。
    3. 选择你的 GitHub 仓库并点击 **"Import"**。
    4. Framework Preset:Vercel 会自动识别为 Next.js ,无需修改。
    5. Environment Variables(关键步骤): 展开 Environment Variables 区域,将你本地 .env 文件中配置好的变量逐一填入。
    6. 点击 **"Deploy"**。

    第五步:部署后验证

    1. 等待构建完成:Vercel 会自动执行 next build
    2. 检查首页:访问分配的域名,确保首页正常加载。
    3. 检查数据库:尝试浏览分类或详情页,确保数据能从数据库读取(因为第三步已经进行了 Seed ,此时你应该能看到数据)。
    4. 检查认证:点击登录,测试 Supabase Auth 是否工作正常(需要在 Supabase Auth settings 中配置你的 生产环境域名 作为 Redirect URL )。
    5. 检查图片上传:登录管理员账号,尝试提交一个工具,测试图片能否成功上传到 R2 。
    6. Cron Jobs:在 Vercel Dashboard 的 Project Settings -> Cron Jobs 中检查定时任务状态。

    常见问题

    • Supabase Auth 登录后跳转错误:请务必在 Supabase 后台 Authentication -> URL Configuration -> Site URL / Redirect URLs 中添加你的 Vercel 域名。
    • 图片上传失败:检查 R2 的 Access Key 权限是否包含 "Write",以及 R2_PUBLIC_URL 是否配置正确且公网可访问。
    • 数据库连接错误:如果使用 Transaction Pooler (端口 6543),需要 URL 包含 ?pgbouncer=true
    • 本地开发:以后每次本地开发前,确保 .env 中的 DATABASE_URL 能正常连接,然后运行 pnpm dev

    祝你部署顺利!

    其他参考教程:

    Cloudflare R2 Hands-On Guide: Set Up Free 10GB Storage, Zero-Egress Object Storage, and S3-Compatible API Keys

    A Practical Guide to Supabase: Setting up a Database, Auth, and Integrating Resend

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4624 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:00 PVG 18:00 LAX 03:00 JFK 06:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86