首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Supabase 云服务迁移到自部署实践:踩坑经验与解决方案

Supabase 云服务迁移到自部署实践:踩坑经验与解决方案

作者头像
埃兰德欧神
发布2025-11-14 13:50:32
发布2025-11-14 13:50:32
6720
举报
文章被收录于专栏:开源地带开源地带
community_day_og.jpg
community_day_og.jpg

为什么选择自部署?

在之前的分享中我还点赞过 Supabase 云服务免费版本的慷慨,但在使用 Supabase 作为微信小程序后端服务时,发现从国内访问云服务存在显著的延迟问题:

  • 普通 PostgREST RESTful 接口:700ms+
  • Edge Function 调用:1.5s+

即使尝试使用腾讯云 EdgeOne 加速服务,效果仍不理想。基于性能考量,我决定进行自部署。

自部署实施指南

参考官方文档:https://supabase.com/docs/guides/self-hosting/docker[1]

代码语言:javascript
复制
# Get the code
git clone --depth 1 https://github.com/supabase/supabase

# Make your new supabase project directory
mkdir supabase-project

# Tree should look like this
# .
# ├── supabase
# └── supabase-project

# Copy the compose files over to your project
cp -rf supabase/docker/* supabase-project

# Copy the fake env vars
cp supabase/docker/.env.example supabase-project/.env

# Switch to your project directory
cd supabase-project

# Pull the latest images
docker compose pull

# Start the services (in detached mode)
docker compose up -d

踩坑经验与解决方案

1. 数据迁移挑战

问题:免费版云服务无法获取 IPv4 数据库连接信息

解决方案

  • 使用 CLI 工具备份数据库结构:
代码语言:javascript
复制
supabase db dump > init.sql
  • 数据迁移:使用控制台导出数据,选择一行后会出现选择所有数据,之前导出 600 多行数据分了7次,被自己蠢哭了🤦‍♂️
391adec1f655cd2fb758bf8280084ec7.png
391adec1f655cd2fb758bf8280084ec7.png

2. Storage 迁移

自定义迁移工具

  • 使用 Deno 编写迁移程序,迁移代码[2]
  • 保持云端与本地文件结构完全一致
  • 保留文件创建时间、文件名等元数据

图片预览问题排查:

如果控制台图片无法预览,请检查 .env 文件中的 SUPABASE_PUBLIC_URL 参数配置。

3. Edge Functions 迁移

本地部署的版本没有 Edge Functions 的控制操作面板,我初次还以为自部署不支持 Functions,后来在官网功能在自部署版本中仍支持,但需要通过文件系统管理;

部署步骤

将本地调试的 functions 目录拷入部署目录中 volumes/functions,你就可以在客户端进行调用,就这么简单😊

代码语言:javascript
复制
await supabase.functions.invoke('functions-name', {})

对于之前在Edge Functions中的 Secrets 参数,需要配置在docker-compose.yml

代码语言:javascript
复制
functions:
    container_name:supabase-edge-functions
    image:supabase/edge-runtime:v1.69.6
    restart:unless-stopped
    volumes:
      -./volumes/functions:/home/deno/functions:Z
    depends_on:
      analytics:
        condition:service_healthy
    environment:
      JWT_SECRET:${JWT_SECRET}
      SUPABASE_URL:http://kong:8000
      SUPABASE_ANON_KEY:${ANON_KEY}
      SUPABASE_SERVICE_ROLE_KEY:${SERVICE_ROLE_KEY}
      SUPABASE_DB_URL:postgresql://postgres:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
      # TODO: Allow configuring VERIFY_JWT per function. This PR might help: https://github.com/supabase/cli/pull/786
      VERIFY_JWT:"${FUNCTIONS_VERIFY_JWT}"
      # Secrets 参数 START
      FOO_BAR:value
      # Secrets 参数 END
    command:
      [
        "start",
        "--main-service",
        "/home/deno/functions/main"
      ]

⚠️ 特别说明

  • 参数更新后需要重启服务生效
  • 目前还没发现云服务中的不重启热更新功能

4. 配置管理差异

自部署版本中有很多功能不会像云服务在Supabase Studio那么方便,大部分需要设置和更新.env的参数,例如:

  1. 变更暴露给 PostgREST 的 schemas,在 Studio 中只需在Settings->Data api ->Exposed schemas中设置,在自部署版本中就需要在.env中更新
代码语言:javascript
复制
############
# API - Configuration for PostgREST.
############

PGRST_DB_SCHEMAS=public,storage,graphql_public,expose_schema_name

版本更新流程

备份并编辑docker-compose.yml中的版本镜像版本

代码语言:javascript
复制
# 备份
cp docker-compose.yml "docker-compose.yml.bak.$(date +%Y%m%d%H%M%S)" && echo "备份完成"
# 更新镜像
docker compose pull
# 重启服务
docker compose down
docker compose up -d

性能提升效果

自部署后实测数据:

  • RESTful 接口延迟:从 700ms+ 降至 50ms-100ms
  • Edge Functions 调用:从 1.5s+ 降至 200ms-500ms
  • 图片等静态资源加载速度提升 3-5 倍

自部署版本虽然需要更多运维工作,但对于国内访问Supabase云服务的场景性能提升是显著的。希望这些经验能帮助遇到类似问题的同学顺利迁移,有问题或者经验也欢迎在评论区交流讨论。

参考资料

[1]

https://supabase.com/docs/guides/self-hosting/docker: https://supabase.com/docs/guides/self-hosting/docker

[2]

迁移代码: https://code.juejin.cn/api/raw/7555439299173941267?id=7555439299173957651

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源地带 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么选择自部署?
  • 自部署实施指南
  • 踩坑经验与解决方案
    • 1. 数据迁移挑战
    • 2. Storage 迁移
    • 3. Edge Functions 迁移
    • 4. 配置管理差异
  • 版本更新流程
  • 性能提升效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档