自托管指南
以下内容适用于任何 fork 或 clone。不假定任何特定的托管平台——前端是一个静态 Vite 构建,可以用同样的方式部署到 Amplify、Vercel、Netlify 或 Cloudflare Pages,采集器是一个 Node 脚本,可以通过已提交的 GitHub Actions 定时任务或任何其他调度器以同样的方式运行。
- 安装 Docker Desktop 并确保它正在运行。
- 运行
npx supabase start——启动一个包含所有迁移和种子数据的本地 Postgres/Auth/REST 环境。 - 将本地
.env指向打印出来的API_URL、ANON_KEY和SERVICE_ROLE_KEY。 - 创建一个本地登录用户和允许列表行(本地环境启动时没有用户):
Terminal window curl -X POST "http://127.0.0.1:54321/auth/v1/admin/users" \-H "apikey: <本地 service_role key>" \-H "Authorization: Bearer <本地 service_role key>" \-H "Content-Type: application/json" \-d '{"email":"you@example.com","password":"<仅限本地使用的密码>","email_confirm":true}'INSERT INTO public.dashboard_users (email, note)VALUES ('you@example.com', 'local dev')ON CONFLICT (email) DO NOTHING;
1. 创建 Supabase 项目
Section titled “1. 创建 Supabase 项目”- 为你的仪表盘实例创建一个 Supabase 项目。
- 应用
supabase/migrations/中的迁移。 - 运行
supabase/seed.sql(提供商注册表),然后插入你自己的项目行——使用一个被 git 忽略的supabase/seed.local.sql,这样真实的 slug、名称和 URL 不会进入 git。 - 在 Supabase Auth 中,如果你想要单用户访问,请禁用公开注册。
- 在 Supabase 后台手动创建你的 Auth 用户。
- 将同一邮箱添加到允许列表:
INSERT INTO public.dashboard_users (email, note)VALUES ('you@example.com', 'owner')ON CONFLICT (email) DO NOTHING;
你需要在 Supabase 中手动创建登录用户。应用会将已登录用户的邮箱与 VITE_DASHBOARD_ALLOWED_EMAIL 进行比对,数据库通过 RLS 将同一邮箱与 dashboard_users 进行比对。如果需要允许多人访问,请使用逗号分隔的列表,并将每个邮箱添加到两个关卡中。
2. 配置采集器
Section titled “2. 配置采集器”真实的 ID 和密钥不应该出现在 git 中——将它们放在 .env 文件或调度器的密钥存储中。
- 将
projects.example.json复制为projects.config.json(已被 git 忽略)。 - 将占位符 URL 和资源 ID 替换为你自己的。任何字段都可以使用
${ENV_VAR}占位符——采集器会在运行时从环境中解析它们。 - 将密钥添加到你的本地环境或调度器中。
- 运行
npm test,然后运行npm run collect:status。 - 在本地验证通过后,将相同的配置/密钥添加到你的定时工作流中。
完整的必需和可选密钥列表请参阅环境变量。
3. 设置前端密钥
Section titled “3. 设置前端密钥”在你的托管平台的环境变量中设置以下内容:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_DASHBOARD_ALLOWED_EMAIL
4. 部署静态网站
Section titled “4. 部署静态网站”npm run build输出目录:dist
任何静态主机都可以——Amplify、Vercel、Netlify、Cloudflare Pages。大多数主机还提供分支级别的访问控制作为可选的第一层防护;无论如何都要保留 Supabase Auth 和 RLS。
5. 将仪表盘添加到自身
Section titled “5. 将仪表盘添加到自身”仪表盘可以监控自身:在你的项目表中添加一行,并在采集器配置中设置 "hubSupabase": true,这样自检采集器就会将其作为目标。
6. 运行定时采集器
Section titled “6. 运行定时采集器”已提交的 .github/workflows/collect.yml 通过每日定时任务运行 npm run collect:status,在任何 fork 上都可以直接使用——只需添加所需的密钥。任何其他可以运行 npm run collect:status 的调度器也同样适用。
npm testnpm run lintnpm run build然后打开已部署的网站并检查:
- 未登录 → 出现登录表单
- 错误邮箱 → 登录被拒绝
- 允许的邮箱 → 仪表盘正常渲染
- 浏览器匿名查询 → RLS 只返回允许列表用户的数据行