运营一个系统 Supabase 自托管 赋予您对数据和成本的绝对控制权。然而,总有一天,您当前的 VPS 可能会超载,或者您找到另一个性能更好、价格更优惠的 VPS 提供商。那就是您需要考虑 迁移(Di-dời) 您系统到新家的时刻。.
很多人担心这次迁移会很复杂,容易导致数据丢失或破坏已稳定运行的配置。特别是当您已经有大量用户数据(Users)、数据库和存储时。另外还有对转换过程中停机时间(服务中断)过长的担忧。.
别担心!这篇文章将是详细的指南,指导您一步步安全地将 Supabase Docker 从旧 VPS 迁移到新 VPS。特别是,我们将使用方法 VPS-到-VPS 传输 来确保最快的速度,并设置 Nginx Proxy Manager 来管理域名以及为您的仪表板(Studio)提供安全。.
步骤 1:了解 Supabase 自托管的“心脏”
在动手之前,您需要了解 Supabase 的文件结构,以便知道需要复制什么以及可以跳过什么。当您使用 Docker 安装 Supabase 时,您会在目录中看到 /opt/supabase 有很多子文件夹,如 apps, packages, examples…

事实是: 99% 最重要的是东西都打包在文件夹中 docker. 。其余文件夹大多是 Supabase 项目源代码(Next.js 应用、库等),Docker 容器 并不直接使用 来运行。Docker 基于已构建的“镜像”运行(例如: supabase/studio:latest, supabase/postgres:15),因此复制源代码是不必要的。.
在文件夹 docker, 我们有 3 个“不可侵犯”的组件:
docker-compose.yml: 这是系统的设计。它规定了将运行哪些服务(Database、Auth、Storage、Realtime…),哪些端口打开,以及哪些卷被挂载。..env: 这是存储您所有秘密的地方。数据库密码(POSTGRES_PASSWORD)、JWT Secret(用于创建令牌)、API 密钥(Anon Key、Service Role Key)。丢失此文件就相当于失去了对系统的控制权。.volumes/:最重要的是volumes/db/data. 。这是 PostgreSQL 实时数据的存储位置。如果您只复制配置文件而忘记这个文件夹,您将得到一个全新的 Supabase,但是…空的。.
步骤 2:准备“新家”(目标 VPS)
您需要准备一个干净的新 VPS(全新安装)。推荐操作系统是 Ubuntu 20.04 LTS 广告管理器 22.04 LTS 以确保稳定性和与 Docker 的最佳兼容性。.
首先,请 SSH 登录到新 VPS 并更新系统:
sudo apt update && sudo apt upgrade -y接下来,安装 Docker 和 Docker Compose 插件。最快速和最标准的方法是使用 Docker 官方的自动安装脚本:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh安装完成后,请检查 Docker 是否已运行:
sudo docker --version
sudo docker compose version如果看到完整的版本信息,说明您已准备好接收数据。.
步骤 3:传输数据(通过 Rsync “发射”数据)
而不是传统方式: 将 10GB 数据下载到个人电脑(网络慢) -> 将 10GB 数据上传到新 VPS(网络慢), 我们将使用 Rsync 在两个 VPS 之间直接传输数据。速度极快,因为充分利用了数据中心的带宽。.

为什么使用 Rsync 而不是 SCP?
- 恢复 (Resume): 如果正在复制 90% 时网络断开,再次运行 Rsync 命令,它将从 90% 继续。SCP 将从头开始。.
- 保留属性: Rsync 保留文件的权限 (permissions)、时间戳 (timestamps),这对数据库文件非常重要。.
- 压缩数据: 标志
-z有助于在传输时压缩数据,节省带宽。.
执行:
1. 在新 VPS 上: 请先创建父目录,以避免复制错误的路径:
# 创建目录 /opt/supabase
mkdir -p /opt/supabase2. 在旧 VPS 上: 运行以下 Rsync 命令。该命令将要求输入新 VPS 的 root 密码。.
# 从旧 VPS 运行此命令
# IP_VPS_MOI: 替换为新服务器的 IP(例如:116.118.x.x)
rsync -avzP /opt/supabase/docker/ root@IP_VPS_MOI:/opt/supabase/docker/注意源路径末尾的 / 非常重要。如果写错,文件夹 docker 可能会嵌套(例如 docker/docker)。上面的命令是最标准的。.
步骤 4:在新家启动 Supabase
Rsync 进度条完成后(达到 100%),恭喜您,旧系统的整个灵魂已迁移到新家。现在请唤醒它。.
在 新 VPS:
cd /opt/supabase/docker
# (可选)检查 .env 文件是否需要编辑
cat .env
# 启动容器
docker compose up -d第一次运行需要几分钟让 Docker 下载镜像。请耐心等待。完成后,检查日志以确保没有错误:
docker compose logs -f步骤 5:配置 Nginx Proxy Manager & SSL
Supabase 默认只开放本地端口(如 8000、3000)或内部端口。要让用户通过漂亮域名(https://api.your-domain.com) 访问并启用 SSL 安全,您需要一个反向代理。. Nginx Proxy Manager (NPM) 是一个绝佳选择,因为它有直观的界面。.

您需要创建 2 个 Proxy Hosts :
1. API 网关(最重要的)
- Domain Names:
api.your-domain.com(或您的 API 域名) - Forward Hostname / IP:
172.17.0.1(这是 Docker 的默认网关 IP,有助于 NPM 反向指向同一主机上的容器)。. - Forward Port:
8008(这是 Supabase 中的 Kong/API Gateway 的端口)。. - Websockets 支持: 必须开启(Supabase Realtime 使用这个)。.
- SSL 选项卡: 请求新的 Let’s Encrypt 证书,强制 SSL,HTTP/2 支持。.
2. Studio 仪表板(管理界面)
- Domain Names:
studio.your-domain.com - Forward Hostname / IP:
172.17.0.1 - Forward Port:
3003(Studio 的默认端口)。. - Websockets 支持: 开启。.
- SSL 选项卡: 配置类似于上面。.
配置 NPM 完成后,最后一步是进入您的域名管理页面(DNS),将上述 2 个子域名指向 新 VPS 的 IP. 。等待大约 5-10 分钟让 DNS 更新。.
步骤 6:高级安全(访问列表)
Supabase 自托管社区版的一个重大漏洞是 Studio 仪表板没有登录页面. 。任何知道路径的人 studio.your-domain.com 都可以进入查看和修改您的数据。这极度危险。.
但是使用 Nginx Proxy Manager,我们可以轻松修补这个漏洞,使用功能 访问列表 (限制访问)。.

实施方法:
- 在 NPM 中,进入选项卡 访问列表, 点击 添加访问列表.
- 名称设置为
仅管理员. - 在选项卡 授权, 请添加只有您知道的用户名和密码。.
- (高级提示) 在选项卡 访问, 您可以填写公司/家庭的静态 IP 并选择 操作:允许. 。然后启用选项 满足任意.
- 意思是:如果正确输入“家庭”IP,直接进入无需询问。.
- 如果陌生 IP(去咖啡店),系统会弹出密码询问窗口。.
- 保存(Save)。.
- 返回 Proxy Hosts, 修改行
studio.your-domain.com. 。在 Details 标签页,项目 访问列表, 选择仅管理员.
结论
将服务器迁移并不像你想象的那么可怕,如果我们清楚了解 Docker 的本质并知道如何使用 Rsync 等工具。通过上面的指南,你不仅能成功迁移,还能提升 Supabase 的系统安全性。.
请记得定期备份数据(cronjob 备份文件夹 docker) 以防万一。祝大家成功!

