10分钟上手Supabase CLI:从安装到云函数部署的全流程指南
引言:为什么选择Supabase CLI?
你是否还在为Firebase的封闭生态感到受限?是否正在寻找一个开源、灵活且功能完备的后端解决方案?Supabase CLI(命令行界面)正是为解决这些痛点而生。作为Supabase生态系统的重要组成部分,这个强大的工具允许开发者在本地环境中高效管理Supabase项目,从数据库迁移到云函数部署,一应俱全。
读完本文后,你将能够:
- 快速安装和配置Supabase CLI
- 在本地启动和管理Supabase服务
- 创建、迁移和版本控制数据库
- 开发、测试和部署云函数
- 利用类型生成提升开发效率
1. Supabase CLI简介
Supabase CLI是一个功能强大的命令行工具,它为开发者提供了一套完整的本地开发和云部署工作流。通过这个工具,你可以轻松管理Supabase项目的各个方面,而无需依赖复杂的图形界面。
1.1 核心功能概览
| 功能 | 描述 | 重要性 |
|---|---|---|
| 本地开发环境 | 在本地启动完整的Supabase服务栈 | ⭐⭐⭐⭐⭐ |
| 数据库迁移 | 版本控制和部署数据库模式变更 | ⭐⭐⭐⭐⭐ |
| 云函数管理 | 创建、测试和部署边缘函数 | ⭐⭐⭐⭐ |
| 类型生成 | 从数据库模式自动生成TypeScript类型 | ⭐⭐⭐⭐ |
| 项目管理 | 连接和管理远程Supabase项目 | ⭐⭐⭐ |
1.2 工作流程概览
flowchart LR
A[安装CLI] --> B[初始化项目]
B --> C[启动本地服务]
C --> D[开发数据库]
C --> E[开发云函数]
D --> F[创建迁移]
E --> G[测试函数]
F --> H[部署迁移]
G --> I[部署函数]
H --> J[监控和调试]
I --> J
2. 安装与配置
2.1 系统要求
在开始安装前,请确保你的系统满足以下要求:
- Docker Engine (20.10.0或更高版本)
- Git
- 至少2GB可用内存
- 稳定的互联网连接
2.2 多平台安装指南
2.2.1 使用NPM安装(推荐)
对于Node.js开发者,使用NPM安装是最简单的方式:
npm i supabase --save-dev
如需安装测试版通道:
npm i supabase@beta --save-dev
注意:使用Bun版本低于v1.0.17时,需要先将
supabase添加为可信依赖:bun add -D --trusted supabase
2.2.2 macOS (Homebrew)
# 安装稳定版
brew install supabase/tap/supabase
# 安装测试版
brew install supabase/tap/supabase-beta
brew link --overwrite supabase-beta
# 升级
brew upgrade supabase
2.2.3 Windows (Scoop)
# 添加Supabase仓库
scoop bucket add supabase https://github.com/supabase/scoop-bucket.git
# 安装
scoop install supabase
# 升级
scoop update supabase
2.2.4 Linux
使用Homebrew:
brew install supabase/tap/supabase
brew upgrade supabase
使用系统包管理器:
# Debian/Ubuntu
sudo dpkg -i <下载的.deb文件>
# Fedora/RHEL
sudo rpm -i <下载的.rpm文件>
# Arch Linux
sudo pacman -U <下载的.pkg.tar.zst文件>
2.2.5 从源码安装
对于Go开发者,可以直接从源码安装:
# 需要Go 1.22或更高版本
go install github.com/supabase/cli@latest
# 创建符号链接以便全局访问
ln -s "$(go env GOPATH)/bin/cli" /usr/bin/supabase
2.3 验证安装
安装完成后,运行以下命令验证是否成功:
supabase --version
你应该能看到类似以下的输出:
supabase version 1.160.0
2.4 配置国内镜像(针对中国用户)
为了提高国内用户的访问速度,可以配置GitCode镜像:
# 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/cli23/cli.git
cd cli
# 安装依赖
go mod download
# 构建并安装
go install .
3. 快速入门:第一个项目
3.1 初始化项目
让我们通过一个简单的命令创建并配置你的第一个Supabase项目:
# 创建项目目录
mkdir my-supabase-project
cd my-supabase-project
# 使用bootstrap命令快速设置项目
supabase bootstrap
bootstrap命令会引导你完成项目设置,包括:
- 选择项目模板
- 配置数据库
- 设置认证选项
- 初始化Git仓库(可选)
3.2 启动本地开发环境
项目初始化完成后,启动本地Supabase服务:
supabase start
首次运行时,这个命令会下载所需的Docker镜像,可能需要几分钟时间。成功启动后,你将看到类似以下的输出:
Started supabase local development setup.
API URL: http://localhost:54321
GraphQL URL: http://localhost:54321/graphql/v1
DB URL: postgresql://postgres:postgres@localhost:54322/postgres
Studio URL: http://localhost:54323
Inbucket URL: http://localhost:54324
JWT secret: <your-jwt-secret>
anon key: <your-anon-key>
service_role key: <your-service-role-key>
现在,你可以通过Studio URL(通常是http://localhost:54323)访问Supabase Studio,这是一个基于Web的数据库管理界面。
3.3 项目结构解析
supabase bootstrap命令创建的项目结构如下:
my-supabase-project/
├── .env.local # 本地环境变量
├── .gitignore # Git忽略文件
├── README.md # 项目说明文档
├── supabase/ # Supabase配置目录
│ ├── config.toml # 项目配置
│ ├── migrations/ # 数据库迁移文件
│ ├── functions/ # 边缘函数
│ ├── seed.sql # 数据库种子数据
│ └── schema.sql # 数据库模式定义
└── package.json # 项目依赖
4. 数据库管理
4.1 数据库连接
Supabase CLI提供了多种连接数据库的方式:
# 使用psql连接数据库
supabase db remote connect
# 直接执行SQL命令
supabase db sql "SELECT NOW();"
# 执行SQL文件
supabase db sql -f path/to/file.sql
4.2 数据库迁移
数据库迁移是版本控制数据库模式变更的关键功能。使用Supabase CLI,你可以轻松创建和应用迁移:
# 创建新的迁移文件
supabase db new add_users_table
# 这会创建一个类似 supabase/migrations/20231101000000_add_users_table.sql 的文件
编辑生成的SQL文件,添加你的表定义:
-- Create users table
CREATE TABLE public.users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT UNIQUE NOT NULL,
full_name TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Set up Row Level Security (RLS)
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow read access for authenticated users" ON public.users
FOR SELECT USING (auth.role() = 'authenticated');
应用迁移:
# 应用所有未应用的迁移
supabase db push
# 查看迁移历史
supabase db migration list
4.3 数据导入与导出
# 导出数据库
supabase db dump -f backup.sql
# 导入数据
supabase db reset --import backup.sql
# 仅导入种子数据
supabase db seed
4.4 数据库分支管理
Supabase CLI支持创建数据库分支,用于并行开发:
# 创建新分支
supabase branches create feature-branch
# 切换分支
supabase branches activate feature-branch
# 列出所有分支
supabase branches list
# 删除分支
supabase branches delete feature-branch
5. 云函数开发
Supabase Edge Functions是基于Deno的无服务器函数,可以在全球边缘网络上运行。
5.1 创建你的第一个云函数
# 创建新函数
supabase functions new hello-world
这会在supabase/functions/hello-world目录下创建一个新的函数模板:
// supabase/functions/hello-world/index.ts
Deno.serve(async (req) => {
const { name } = await req.json();
const data = {
message: `Hello ${name}!`,
};
return new Response(
JSON.stringify(data),
{ headers: { "Content-Type": "application/json" } },
);
});
5.2 本地测试云函数
# 启动函数本地服务器
supabase functions serve hello-world --no-verify-jwt
使用curl或Postman测试函数:
curl -i --location --request POST 'http://localhost:54321/functions/v1/hello-world' \
--header 'Content-Type: application/json' \
--data '{"name":"Supabase"}'
5.3 部署云函数
测试通过后,部署到Supabase:
# 部署单个函数
supabase functions deploy hello-world
# 部署所有函数
supabase functions deploy --all
# 部署时设置环境变量
supabase functions deploy hello-world --env-file .env.production
5.4 云函数高级配置
函数可以通过supabase/functions/hello-world/config.json文件进行配置:
{
"noVerifyJwt": false,
"environment": {
"API_KEY": "your-api-key"
},
"schedule": {
"type": "cron",
"value": "0 0 * * *"
}
}
6. 类型生成
Supabase CLI可以从你的数据库模式自动生成TypeScript类型,提高开发效率和代码质量。
6.1 生成类型定义
# 生成类型
supabase gen types typescript --local > types/supabase.ts
6.2 在项目中使用生成的类型
import { Database } from '../types/supabase';
// 类型化的数据库客户端
const supabaseClient = createClient<Database>(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
// 使用类型提示
const getUsers = async () => {
const { data, error } = await supabaseClient
.from('users')
.select('id, email, full_name')
.order('created_at', { ascending: false });
if (error) throw error;
return data;
};
7. 项目部署与协作
7.1 连接到远程项目
# 登录Supabase
supabase login
# 链接到远程项目
supabase link --project-ref <your-project-ref>
项目引用(project-ref)可以在Supabase项目控制台的设置 > API中找到。
7.2 部署数据库变更
# 将本地迁移推送到远程
supabase db push
# 从远程拉取最新变更
supabase db pull
7.3 团队协作工作流
sequenceDiagram
participant Dev1
participant Dev2
participant Git
participant Supabase Cloud
Dev1->>Dev1: 创建迁移文件
Dev1->>Git: 提交迁移
Dev2->>Git: 拉取迁移
Dev2->>Dev2: 本地测试迁移
Dev1->>Supabase Cloud: 部署迁移
Dev2->>Supabase Cloud: 验证部署
8. 高级功能
8.1 备份与恢复
# 创建数据库备份
supabase backups create
# 列出所有备份
supabase backups list
# 恢复备份
supabase backups restore <backup-id>
8.2 自定义域名配置
# 添加自定义域名
supabase domains add api.example.com
# 验证域名
supabase domains verify api.example.com
# 列出所有域名
supabase domains list
8.3 监控与日志
# 查看函数日志
supabase functions logs hello-world
# 实时监控函数
supabase functions logs hello-world --follow
# 查看数据库性能指标
supabase inspect db-table-sizes
9. 常见问题与解决方案
9.1 本地开发环境问题
| 问题 | 解决方案 |
|---|---|
| 端口冲突 | 使用--port参数指定自定义端口,如supa base start --port 55000 |
| Docker镜像拉取缓慢 | 配置Docker国内镜像源,或优化网络连接 |
| 服务启动失败 | 检查Docker是否正在运行,执行supa base stop后再试 |
9.2 数据库迁移问题
| 问题 | 解决方案 |
|---|---|
| 迁移冲突 | 使用supa base db diff生成冲突解决迁移 |
| 迁移回滚 | 创建反向迁移文件,使用supa base db new rollback_migration |
| 数据丢失风险 | 始终在迁移前创建备份,使用supa base backups create |
9.3 云函数部署问题
| 问题 | 解决方案 |
|---|---|
| 部署超时 | 增加函数内存或超时时间配置 |
| 依赖问题 | 使用import_map.json管理函数依赖 |
| 权限错误 | 检查函数服务角色权限,确保有足够权限访问资源 |
10. 总结与下一步
通过本文,你已经掌握了Supabase CLI的核心功能,包括项目初始化、本地开发、数据库管理、云函数开发和项目部署。Supabase CLI提供了一个完整的开发工作流,让你能够在本地环境中高效开发,然后无缝部署到云端。
10.1 进阶学习资源
- 官方文档:Supabase CLI参考
- 示例项目:Supabase示例库
- 社区论坛:Supabase社区
10.2 推荐工作流
- 使用
supabase start启动本地开发环境 - 使用Supabase Studio设计数据库模式
- 使用
supabase db new创建迁移文件 - 使用
supabase functions new开发云函数 - 使用
supabase functions serve测试函数 - 提交代码到Git仓库
- 使用
supabase db push和supabase functions deploy部署变更 - 使用
supabase inspect和日志监控应用性能
10.3 结语
Supabase CLI彻底改变了后端开发的方式,让开发者能够以更高的效率构建全栈应用。无论你是个人开发者还是大型团队的一员,Supabase CLI都能为你提供一致、可靠的开发体验。
立即开始使用Supabase CLI,体验开源Firebase替代品的强大功能吧!
如果觉得本文对你有帮助,请点赞、收藏并关注作者,获取更多Supabase开发技巧和最佳实践。下期预告:《Supabase实时订阅高级用法》。
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00