Files
labweb/supabase-stack/docs/README_CN.md
zly 1f7a2ed1e4 feat: 迁移 Storage 后端从 MinIO 到文件系统
## 主要变更

### 1. Storage 配置修改
- 修改 docker-compose.yml: STORAGE_BACKEND 从 s3 改为 file
- 注释所有 GLOBAL_S3_* 环境变量
- 启用 FILE_STORAGE_BACKEND_PATH=/var/lib/storage
- 停止使用 MinIO 容器(docker-compose.s3.yml)

### 2. 文档更新
- 新增 docs/STORAGE_FILE_BACKEND_MIGRATION.md - 迁移详细文档
- 新增 docs/STORAGE_TROUBLESHOOTING.md - 故障排查指南
- 更新 README.md - 反映新的架构

### 3. 存储架构变更
- 从 MinIO S3 对象存储 -> 本地文件系统
- 存储路径: volumes/storage/undefined/stub/{bucket}/{file}/{version}
- 不再需要额外的 MinIO 容器

## 测试结果
-  上传文件 - 正常
-  下载文件 - 正常
-  删除文件 - 正常
-  签名 URL - 正常
- ⚠️ 更新文件 - 已知bug(使用删除+上传代替)

## 注意事项
- 旧的 S3 后端数据需要清理数据库元数据
- 文件更新操作有已知bug,需使用删除+重新上传
- 备份文件保存在 *.backup-before-rustfs

## 回滚方法
如需回滚到 MinIO:
```bash
cp docker-compose.yml.backup-before-rustfs docker-compose.yml
docker compose -f docker-compose.s3.yml up -d
docker compose restart storage
```

日期: 2025-12-05
状态:  测试通过 (4/5 功能正常)
2025-12-05 19:44:11 +08:00

10 KiB
Raw Blame History

Supabase 部署完成

恭喜Supabase 后端已成功部署在 https://amiap.hzau.edu.cn/supa


🚀 服务启动

完整启动命令

Supabase 服务包含核心服务S3 对象存储两部分,使用 Docker Compose 的 override 功能同时启动:

# 进入目录
cd /vol1/1000/docker_server/traefik/supabase-stack

# 🔥 推荐:使用 override 方式启动(同时启动核心服务 + S3
docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d

# 查看服务状态
docker compose ps

服务组成说明

核心服务docker-compose.yml

  • PostgreSQL: 数据库
  • Kong: API 网关
  • REST API: PostgREST 自动 API
  • Auth: 用户认证
  • Storage: 文件存储
  • Realtime: 实时订阅
  • Studio: 管理面板
  • Analytics: 数据分析
  • Pooler: 连接池(可选,见下方说明)

S3 对象存储docker-compose.s3.yml

  • MinIO: S3 兼容的对象存储后端
  • 为 Storage API 提供文件存储能力
  • 数据持久化到 /vol1/1000/s3/stub/

启动流程

# 1. 确保 Traefik 已启动
cd /vol1/1000/docker_server/traefik
docker compose ps traefik

# 2. 启动 Supabase核心 + S3
cd supabase-stack
docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d

# 3. 等待服务就绪(约 30-60 秒)
watch -n 2 'docker compose ps'

# 4. 验证服务
curl -s https://amiap.hzau.edu.cn/supa/rest/v1/ | jq
python3 examples/test_https_storage.py

快速管理命令

# 查看所有服务状态
docker compose ps

# 查看特定服务日志
docker compose logs -f kong
docker compose logs -f storage
docker compose logs -f rest

# 重启服务
docker compose restart

# 停止服务(保留数据)
docker compose down

# 完全清理(删除所有数据,慎用!)
docker compose down -v

🎯 快速开始

访问地址

API 端点(用于开发)

https://amiap.hzau.edu.cn/supa

Dashboard管理界面

http://100.64.0.2:18000
用户名: lab-admin
密码: 017b7076cfb25bd18410d1e5f4f7ec5a

API Keys

// 公开密钥 - 可在前端使用
const ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzYzODAyNjY5LCJleHAiOjIwNzkxNjI2Njl9.ltGXvQKpguLaf8Vzomn310hLgOZbrjqZT-F3rR00ulg"

// 私密密钥 - 仅后端使用
const SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIiwiaXNzIjoic3VwYWJhc2UiLCJpYXQiOjE3NjM4MDI2NjksImV4cCI6MjA3OTE2MjY2OX0.gQWUaTkZ6mjjlv2TED0cODp2meqqWuCGKZR1ptIbovg"

📚 文档

文档 说明
README_STORAGE.md 🔥 Storage 对象存储使用指南
docs/QUICK_START.md Storage API 快速入门
docs/OPERATIONS_GUIDE.md 完整运维指南
docs/VUE_API_INTEGRATION.md Vue 前端集成教程
docs/DEPLOYMENT_INFO.md 部署配置详情

可用的功能

功能 端点 状态
REST API https://amiap.hzau.edu.cn/supa/rest/v1/ 可用
Auth API https://amiap.hzau.edu.cn/supa/auth/v1/ 可用
Storage API https://amiap.hzau.edu.cn/supa/storage/v1/ 可用
Realtime wss://amiap.hzau.edu.cn/supa/realtime/v1/ 可用
Dashboard http://100.64.0.2:18000 可用(内网)
MinIO 内部 S3 后端 运行中

所有核心功能都正常工作,可以开始开发!


🚀 Vue 集成示例

1. 安装

npm install @supabase/supabase-js

2. 配置

// src/lib/supabaseClient.js
import { createClient } from '@supabase/supabase-js'

export const supabase = createClient(
  'https://amiap.hzau.edu.cn/supa',
  'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzYzODAyNjY5LCJleHAiOjIwNzkxNjI2Njl9.ltGXvQKpguLaf8Vzomn310hLgOZbrjqZT-F3rR00ulg'
)

3. 使用

<script setup>
import { supabase } from '@/lib/supabaseClient'
import { ref, onMounted } from 'vue'

const users = ref([])

onMounted(async () => {
  const { data } = await supabase.from('users').select('*')
  users.value = data
})
</script>

详细教程请查看 docs/VUE_API_INTEGRATION.md


🧪 测试 API

运行测试脚本:

cd /vol1/1000/docker_server/traefik/supabase-stack

# 测试 Storage API
python3 examples/test_https_storage.py

或手动测试:

# 测试 Storage API
curl https://amiap.hzau.edu.cn/supa/storage/v1/bucket

# 测试 Auth API
curl https://amiap.hzau.edu.cn/supa/auth/v1/health

# 测试 REST API
curl https://amiap.hzau.edu.cn/supa/rest/v1/

⚠️ 重要提示

1. Dashboard 访问

  • https://amiap.hzau.edu.cn/supa 无法访问 Dashboard子路径问题
  • 使用内网地址:http://100.64.0.2:18000

2. Pooler 服务重启问题 ⚠️

问题现象

docker compose ps
# supabase-pooler    Restarting (1) 40 seconds ago

原因分析

  • supabase-pooler (Supavisor) 是数据库连接池服务
  • 主要用于高并发场景的连接优化
  • 在开发和小规模部署中不是必需的
  • 可能因配置或依赖问题导致重启

解决方案

方案 1忽略推荐

连接池服务不影响任何核心功能,可以安全忽略:

# 所有 API 功能正常工作,无需处理

方案 2禁用 Pooler

如果持续重启影响日志查看,可以禁用:

# 停止 pooler 服务
docker compose stop supavisor

# 或在 docker-compose.yml 中注释掉 supavisor 服务后重启
docker compose up -d

创建禁用配置

# 创建 docker-compose.override.yml
cat > docker-compose.override.yml << 'OVERRIDE'
services:
  supavisor:
    restart: "no"
    # 或完全禁用
    # profiles: ["disabled"]
OVERRIDE

# 重启服务
docker compose up -d

方案 3查看详细日志

如果需要修复,查看错误详情:

docker logs supabase-pooler --tail 100

结论:对于开发和小规模使用,建议使用方案 1忽略方案 2禁用

3. REST API Schema Cache

  • 首次访问可能提示 "schema cache retrying"
  • 这是正常的初始化过程
  • 等待几秒会自动恢复,或重启 rest 服务

4. MinIO 存储

  • S3 数据存储在 /vol1/1000/s3/stub/
  • 不要直接访问 MinIO统一通过 Storage API
  • 详见 README_STORAGE.md

🔧 常用管理命令

服务管理

# 查看所有服务状态
docker compose ps

# 查看资源使用
docker compose stats

# 重启特定服务
docker compose restart kong
docker compose restart storage
docker compose restart rest

# 停止服务
docker compose stop

# 启动服务
docker compose start

# 完全重启
docker compose down && docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d

日志查看

# 实时查看所有日志
docker compose logs -f

# 查看特定服务日志
docker compose logs -f kong
docker compose logs -f storage
docker compose logs -f rest
docker compose logs -f db

# 查看最近 100 行
docker compose logs --tail=100

# 查看 MinIO 日志
docker logs supabase-minio

数据库管理

# 连接数据库
docker exec -it supabase-db psql -U postgres

# 备份数据库
docker exec supabase-db pg_dump -U postgres postgres > backup.sql

# 恢复数据库
docker exec -i supabase-db psql -U postgres postgres < backup.sql

清理和重置

# 停止服务(保留数据)
docker compose down

# 完全清理(删除所有数据,慎用!)
docker compose down -v

# 清理未使用的容器和镜像
docker system prune -a

📖 开发流程

  1. 启动服务

    docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d
    
  2. 访问 Dashboard(内网)

    • 打开 http://100.64.0.2:18000
    • 登录后创建数据库表
  3. 配置 RLS 策略

    • 在 SQL Editor 中设置权限
    • 参考文档中的示例
  4. Vue 应用集成

    • 按照 docs/VUE_API_INTEGRATION.md 配置
    • 使用 https://amiap.hzau.edu.cn/supa 作为 API 地址
  5. Storage 使用

    • 查看 README_STORAGE.md
    • 使用 Python 或 JavaScript 客户端
  6. 开发测试

    • 所有 API 都通过 HTTPS 访问
    • Dashboard 通过内网管理数据

🎓 学习资源


💡 常见问题

Q: 为什么 Dashboard 不能通过 HTTPS 访问? A: Supabase Studio 是单页应用,不支持子路径部署。使用内网地址访问。

Q: API 都可以正常使用吗? A: 是的!所有核心 APIREST/Auth/Storage/Realtime都可以通过 HTTPS 正常使用。

Q: pooler 一直重启有影响吗? A: 没有影响。pooler 是连接池优化组件,非核心功能。可以忽略或禁用。

Q: 如何远程访问 Dashboard A: 使用 SSH 端口转发:ssh -L 18000:100.64.0.2:18000 user@server

Q: 如何使用对象存储功能? A: 查看 README_STORAGE.mdexamples/ 目录中的示例代码。

Q: MinIO 一定要启动吗? A: 如果使用 Storage API 上传文件MinIO 必须启动。使用 override 方式会自动启动。


🎉 总结

Supabase 后端已完整部署!

所有 API 功能正常
对象存储S3正常
可以开始 Vue 应用开发
Dashboard 可通过内网管理
完整的开发文档已准备好

启动命令

docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d

开始你的 Supabase 开发之旅吧!🚀


部署日期: 2025-11-22
服务器: amiap.hzau.edu.cn
维护文档: 本目录下的 README_STORAGE.md 和 docs/ 文件夹