安装配置
本章节介绍如何创建 Supabase 项目、配置开发环境,以及安装各种客户端 SDK。
创建 Supabase 项目
注册账号
访问 supabase.com,你可以选择以下方式注册:
- 使用 GitHub 账号直接登录(推荐)
- 使用邮箱注册
Supabase 免费套餐提供:
- 500MB 数据库存储
- 1GB 文件存储
- 2GB 出站流量/月
- 50,000 月活用户
- 500MB Edge Functions 执行时间
创建新项目
登录后,点击 "New Project" 创建项目:
- 选择组织:如果是首次使用,会自动创建一个个人组织
- 填写项目信息:
- Name:项目名称,如 "my-first-app"
- Database Password:数据库密码,请妥善保存
- Region:选择离你最近的区域,如 "Northeast Asia (Tokyo)"
- 点击创建:等待 2-3 分钟,系统会自动初始化项目
项目初始化完成后,你会看到项目仪表板,包含数据库、认证、存储等功能的入口。
获取 API 密钥
在项目设置中可以找到 API 密钥:
- 点击左侧菜单 "Settings" → "API"
- 记录以下信息:
- Project URL:项目的 API 地址
- anon public:匿名公钥,可以在客户端使用
- service_role:服务密钥,拥有完全权限,只能在服务端使用
Project URL: https://abcdefghijklmnop.supabase.co
anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
service_role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
安全提示:
anon密钥可以公开,但受 RLS 策略保护service_role密钥拥有完全权限,绝对不能暴露在客户端代码中
安装客户端 SDK
Supabase 提供了多种语言的客户端 SDK,你可以根据项目需求选择。
JavaScript / TypeScript
最常用的 SDK,支持浏览器和 Node.js 环境:
npm install @supabase/supabase-js
基本使用:
import { createClient } from '@supabase/supabase-js'
const supabaseUrl = 'https://your-project.supabase.co'
const supabaseKey = 'your-anon-key'
const supabase = createClient(supabaseUrl, supabaseKey)
// 测试连接
async function testConnection() {
const { data, error } = await supabase.from('todos').select('*')
if (error) {
console.error('连接失败:', error)
} else {
console.log('连接成功:', data)
}
}
React
针对 React 的封装,提供钩子和组件:
npm install @supabase/supabase-js @supabase/auth-helpers-react
创建 Supabase 上下文:
// lib/supabase.js
import { createClient } from '@supabase/supabase-js'
export const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
)
在组件中使用:
// components/TodoList.jsx
import { useState, useEffect } from 'react'
import { supabase } from '../lib/supabase'
function TodoList() {
const [todos, setTodos] = useState([])
useEffect(() => {
fetchTodos()
}, [])
async function fetchTodos() {
const { data } = await supabase.from('todos').select('*')
setTodos(data || [])
}
return (
<ul>
{todos.map(todo => (
<li key={todo.id}>{todo.task}</li>
))}
</ul>
)
}
Next.js
Next.js 集成需要考虑服务端和客户端的不同环境:
npm install @supabase/supabase-js @supabase/ssr
创建客户端实例:
// utils/supabase/client.ts
import { createBrowserClient } from '@supabase/ssr'
export function createClient() {
return createBrowserClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)
}
创建服务端实例:
// utils/supabase/server.ts
import { createServerClient } from '@supabase/ssr'
import { cookies } from 'next/headers'
export async function createClient() {
const cookieStore = await cookies()
return createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
getAll() {
return cookieStore.getAll()
},
setAll(cookiesToSet) {
try {
cookiesToSet.forEach(({ name, value, options }) =>
cookieStore.set(name, value, options)
)
} catch {
// Server Component 中调用 setAll 会失败
// 这是预期行为,可以忽略
}
},
},
}
)
}
Vue.js
Vue 3 组合式 API 集成:
npm install @supabase/supabase-js
创建 Supabase 插件:
// plugins/supabase.ts
import { createClient } from '@supabase/supabase-js'
import type { SupabaseClient } from '@supabase/supabase-js'
const supabaseUrl = import.meta.env.VITE_SUPABASE_URL
const supabaseKey = import.meta.env.VITE_SUPABASE_ANON_KEY
export const supabase: SupabaseClient = createClient(supabaseUrl, supabaseKey)
在组件中使用:
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { supabase } from '../plugins/supabase'
const todos = ref([])
onMounted(async () => {
const { data } = await supabase.from('todos').select('*')
todos.value = data || []
})
</script>
<template>
<ul>
<li v-for="todo in todos" :key="todo.id">
{{ todo.task }}
</li>
</ul>
</template>
Flutter
移动应用开发:
dependencies:
supabase_flutter: ^2.0.0
初始化:
import 'package:supabase_flutter/supabase_flutter.dart';
Future<void> main() async {
await Supabase.initialize(
url: 'https://your-project.supabase.co',
anonKey: 'your-anon-key',
);
runApp(MyApp());
}
final supabase = Supabase.instance.client;
使用:
// 查询数据
final response = await supabase
.from('todos')
.select();
// 插入数据
await supabase.from('todos').insert({
'task': '学习 Supabase',
'is_complete': false,
});
Python
服务端 Python 应用:
pip install supabase
使用:
from supabase import create_client, Client
url: str = "https://your-project.supabase.co"
key: str = "your-anon-key"
supabase: Client = create_client(url, key)
# 查询数据
response = supabase.table('todos').select("*").execute()
print(response.data)
# 插入数据
data = supabase.table('todos').insert({
"task": "学习 Supabase",
"is_complete": False
}).execute()
Go
Go 语言客户端:
go get github.com/nedpals/supabase-go
使用:
package main
import (
"fmt"
"github.com/nedpals/supabase-go"
)
func main() {
supabaseUrl := "https://your-project.supabase.co"
supabaseKey := "your-anon-key"
client := supabase.CreateClient(supabaseUrl, supabaseKey)
// 查询数据
var result map[string]interface{}
err := client.DB.From("todos").Select("*").Execute(&result)
if err != nil {
panic(err)
}
fmt.Println(result)
}
安装 Supabase CLI
Supabase CLI 是一个强大的命令行工具,可以帮助你在本地开发和管理项目。
安装方式
macOS:
brew install supabase/tap/supabase
Windows:
scoop bucket add supabase https://github.com/supabase/scoop-bucket.git
scoop install supabase
Linux:
curl -fsSL https://cli.supabase.com/install.sh | sh
npm(跨平台):
npm install -g supabase
登录认证
安装后需要登录 Supabase 账号:
supabase login
这会打开浏览器进行 OAuth 认证,完成后 CLI 会保存你的登录状态。
初始化本地项目
在项目目录中初始化 Supabase:
mkdir my-supabase-app
cd my-supabase-app
supabase init
这会创建以下目录结构:
my-supabase-app/
├── supabase/
│ ├── config.toml # 项目配置
│ ├── migrations/ # 数据库迁移文件
│ ├── seed.sql # 种子数据
│ └── functions/ # Edge Functions
└── .gitignore
启动本地开发环境
启动本地 Supabase 服务:
supabase start
首次启动会下载 Docker 镜像,可能需要几分钟。启动成功后会显示本地服务地址:
Started supabase local development setup.
API URL: http://localhost:54321
DB URL: postgresql://postgres:postgres@localhost:54322/postgres
Studio URL: http://localhost:54323
Inbucket URL: http://localhost:54324
JWT secret: super-secret-jwt-token-with-at-least-32-characters-long
anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
service_role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
连接到远程项目
将本地项目关联到远程 Supabase 项目:
supabase link --project-ref your-project-ref
项目 ID 可以在项目设置的 General 页面找到。
环境变量配置
在实际项目中,应该使用环境变量存储敏感信息。
Next.js / React
创建 .env.local 文件:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
# 服务端使用,不要暴露给客户端
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
Vue.js / Vite
创建 .env 文件:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
Node.js
使用 dotenv 包:
npm install dotenv
创建 .env 文件:
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
在代码中加载:
require('dotenv').config()
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_ANON_KEY
)
数据库迁移
使用 CLI 管理数据库迁移:
创建迁移
supabase migration new create_todos_table
这会在 supabase/migrations/ 目录创建一个新的迁移文件。
编写迁移 SQL
编辑迁移文件:
-- supabase/migrations/20240101000000_create_todos_table.sql
create table todos (
id bigint primary key generated always as identity,
task text not null,
is_complete boolean default false,
created_at timestamptz default now(),
user_id uuid references auth.users(id)
);
-- 启用 RLS
alter table todos enable row level security;
-- 创建策略
create policy "Users can view own todos"
on todos for select
using (auth.uid() = user_id);
应用迁移
在本地应用迁移:
supabase db reset
推送到远程项目:
supabase db push
常见问题
连接超时
如果遇到连接超时,可能是网络问题:
- 检查网络连接
- 确认项目区域选择正确
- 检查防火墙设置
API 密钥无效
确认使用的是正确的密钥:
- 客户端使用
anon密钥 - 服务端使用
service_role密钥 - 密钥没有多余的空格或换行
本地开发环境启动失败
确保 Docker 已安装并运行:
docker --version
docker ps
如果 Docker 正常但启动失败,尝试重置:
supabase stop
supabase start
下一步
完成环境配置后,你可以继续学习: