zly d6f40cc488 docs: 全面更新根目录 README.md 文档
完整重写根目录 README.md,提供系统级文档说明:

📝 新增内容:

1. 系统架构说明
   - 添加完整的架构图(Traefik → Supabase/Web Apps/Derper)
   - 详细的目录结构说明
   - 清晰的服务组织关系

2. 🚀 Supabase 启动说明
   - 完整的 docker compose override 启动命令
   - docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d
   - 详细的启动流程和验证步骤

3. 🌐 URL 路由规划
   - 所有服务的访问地址和状态
   - Supabase API 端点树状结构
   - 路径前缀方案说明

4. Web 应用架构
   - web/ws (ABM 数据库项目) 详细说明
   - web/gzy, web/zz 待部署项目说明
   - 每个项目的启动和配置方法

5. 📊 完整的运维指南
   - 服务状态检查命令
   - 日志查看方法
   - 重启/停止/更新服务流程
   - 故障排查步骤

6. 📚 文档导航
   - Traefik 部署策略文档链接
   - Supabase 完整文档链接
   - 示例代码路径

7. ⚙️ 配置说明
   - Traefik 核心配置
   - Supabase 环境变量
   - Web 应用 Traefik 标签配置

8. 🔒 安全配置
   - SSL/TLS 证书管理
   - API 密钥说明
   - 访问控制建议

9. 📝 开发指南
   - 添加新 Web 应用的方法
   - Vue 项目集成 Supabase 示例
   - Storage API 使用示例 (Python/JavaScript)

10. 🎯 最佳实践
    - 部署流程
    - 备份策略
    - 监控和日志
    - 性能优化建议

变更统计:
  - 新增 529 行
  - 删除 26 行
  - 从简单说明扩展为完整的系统文档

目标受众:
  - 新加入的运维工程师
  - 需要部署新服务的开发者
  - 系统维护人员

相关文档:
  - supabase-stack/README_CN.md (Supabase 详细指南)
  - supabase-stack/README_STORAGE.md (Storage 使用)
  - docs/strategy-*.md (部署策略文档)
2025-11-22 21:54:33 +08:00
2025-11-22 21:29:00 +08:00

Traefik 反向代理 + 多服务部署平台

基于 Traefik 的统一网关架构,支持多个 Web 应用和后端服务的集中管理和部署。

🏗️ 系统架构

整体架构图

┌─────────────────────────────────────────────────────────┐
│                    Internet (HTTPS)                     │
│              https://amiap.hzau.edu.cn                  │
└────────────────────┬────────────────────────────────────┘
                     │
          ┌──────────▼──────────┐
          │   Traefik Gateway   │  ← Let's Encrypt 自动证书
          │   (反向代理+路由)    │
          └──────────┬──────────┘
                     │
        ┌────────────┼────────────┐
        │            │            │
   ┌────▼───┐  ┌────▼────┐  ┌───▼────┐
   │Supabase│  │Web Apps │  │Derper  │
   │ Stack  │  │  (多项目)│  │        │
   └────────┘  └─────────┘  └────────┘

目录结构

/vol1/1000/docker_server/traefik/
│
├── 📁 核心配置
│   ├── docker-compose.yml              # Traefik 网关 + Derper
│   ├── .gitignore                      # Git 忽略规则
│   └── README.md                       # 本文档
│
├── 📁 docs/                            # 部署策略文档
│   ├── strategy-1-path-prefix.md      # 路径前缀方案
│   ├── strategy-2-subdomain.md        # 子域名方案
│   ├── strategy-3-hybrid.md           # 混合方案
│   └── strategy-comparison-report.md  # 策略对比
│
├── 📁 supabase-stack/                  # 🔥 Supabase 后端服务
│   ├── docker-compose.yml             # 核心服务PostgreSQL, Auth, REST, etc.)
│   ├── docker-compose.s3.yml          # MinIO 对象存储
│   ├── README_CN.md                   # 中文使用指南
│   ├── README_STORAGE.md              # Storage 对象存储指南
│   ├── docs/                          # 详细文档
│   │   ├── QUICK_START.md            # 快速入门
│   │   ├── OPERATIONS_GUIDE.md       # 运维指南
│   │   └── VUE_API_INTEGRATION.md    # Vue 集成教程
│   └── examples/                      # 示例代码
│       ├── storage_client.py         # Python 客户端
│       ├── storage_client.js         # JavaScript 客户端
│       └── test_https_storage.py     # 测试脚本
│
└── 📁 web/                             # Web 应用项目
    ├── ws/                            # ABM 数据库项目
    │   ├── docker-compose.yml        # 项目配置
    │   ├── backend/                  # Go 后端
    │   └── postgres_data/            # PostgreSQL 数据
    ├── gzy/                           # GZY 项目(待部署)
    └── zz/                            # ZZ 项目(待部署)

🌐 URL 路由规划

基于 Traefik 的统一入口,所有服务通过路径前缀区分:

服务 URL 说明 状态
主站 https://amiap.hzau.edu.cn/ 实验室主页(待部署) 🔜
Supabase API https://amiap.hzau.edu.cn/supa 后端服务Auth/REST/Storage/Realtime
Supabase Dashboard http://100.64.0.2:18000 管理面板(仅内网)
ABM 数据库 https://amiap.hzau.edu.cn/ABM WebSocket 项目
Derper https://amiap.hzau.edu.cn/derp Tailscale DERP 中继
Decoy Site https://amiap.hzau.edu.cn/ (fallback) 默认页面

Supabase API 端点

https://amiap.hzau.edu.cn/supa/
├── auth/v1/         # 用户认证
├── rest/v1/         # 数据库 REST API
├── storage/v1/      # 文件存储
└── realtime/v1/     # 实时订阅

🚀 快速开始

1. 启动 Traefik 网关

cd /vol1/1000/docker_server/traefik

# 启动 Traefik + Derper
docker compose up -d

# 查看状态
docker compose ps

2. 启动 Supabase 后端

cd supabase-stack

# 🔥 推荐:同时启动核心服务 + S3 对象存储
docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d

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

# 测试 API
python3 examples/test_https_storage.py

详细文档

3. 部署 Web 应用

ABM 数据库项目

cd web/ws

# 启动服务Go 后端 + PostgreSQL
docker compose up -d

# 查看日志
docker compose logs -f

访问:https://amiap.hzau.edu.cn/ABM

其他项目(待部署)

# GZY 项目
cd web/gzy
# 待添加 docker-compose.yml

# ZZ 项目
cd web/zz
# 待添加 docker-compose.yml

4. 诱饵站(可选)

Traefik 包含一个简单的 Nginx 诱饵站:

# 编辑首页
nano derper/decoy-site/index.html

# 重新构建
docker compose up -d --build decoy-site

📊 服务状态检查

查看所有服务

# Traefik + Derper
cd /vol1/1000/docker_server/traefik
docker compose ps

# Supabase
cd supabase-stack
docker compose ps

# Web 应用
cd web/ws
docker compose ps

测试 API

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

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

# 测试 ABM
curl https://amiap.hzau.edu.cn/ABM

查看日志

# Traefik 日志
docker compose logs -f traefik

# Supabase 日志
cd supabase-stack
docker compose logs -f kong
docker compose logs -f storage

# Web 应用日志
cd web/ws
docker compose logs -f

🔧 管理命令

重启服务

# 重启 Traefik
docker compose restart traefik

# 重启 Supabase 特定服务
cd supabase-stack
docker compose restart kong
docker compose restart storage

# 重启 Web 应用
cd web/ws
docker compose restart

停止服务

# 停止所有服务
docker compose down

# 停止并删除数据卷(慎用!)
docker compose down -v

更新服务

# 拉取最新镜像
docker compose pull

# 重新构建和启动
docker compose up -d --build

📚 详细文档

Traefik 部署策略

Supabase 文档

示例代码

⚙️ 配置说明

Traefik 配置

docker-compose.yml 关键配置:

services:
  traefik:
    image: traefik:v3.0
    command:
      - "--api.dashboard=true"
      - "--providers.docker=true"
      - "--entrypoints.websecure.address=:443"
      - "--certificatesresolvers.myresolver.acme.email=lyzeng@hzau.edu.cn"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"  # Dashboard

访问 Traefik Dashboardhttp://服务器IP:8080

Supabase 配置

主要配置文件:

  • .env - 环境变量(密钥、数据库配置等)
  • docker-compose.yml - 核心服务
  • docker-compose.s3.yml - MinIO 对象存储

关键环境变量

# API 密钥
ANON_KEY=eyJhbGc...    # 前端使用
SERVICE_ROLE_KEY=eyJ...  # 后端使用

# 数据库
POSTGRES_PASSWORD=your-password

# 对象存储
MINIO_ROOT_USER=supabase-minio
MINIO_ROOT_PASSWORD=your-minio-password

Web 应用配置

每个项目独立配置示例web/ws

services:
  webws:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.webws.rule=Host(`amiap.hzau.edu.cn`) && PathPrefix(`/ABM`)"
      - "traefik.http.routers.webws.entrypoints=websecure"
      - "traefik.http.routers.webws.tls.certresolver=myresolver"

🔒 安全配置

SSL/TLS 证书

  • 使用 Let's Encrypt 自动申请和续期
  • 证书存储在 acme-data Docker volume 中
  • 自动 HTTP 到 HTTPS 重定向

访问控制

  • Supabase Dashboard 仅内网访问(http://100.64.0.2:18000
  • Traefik Dashboard 端口 8080建议配置认证
  • 生产环境建议配置防火墙规则

API 密钥

  • ANON_KEY - 前端使用,权限受 RLS 限制
  • SERVICE_ROLE_KEY - 后端使用,完全权限,需保密

🛠️ 故障排查

Traefik 无法启动

# 检查端口占用
sudo netstat -tlnp | grep ':80\|:443\|:8080'

# 查看日志
docker compose logs traefik

Supabase 服务问题

cd supabase-stack

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

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

# 重启服务
docker compose restart

常见问题

  1. supabase-pooler 一直重启 - 可以忽略,不影响功能(详见 README_CN.md
  2. Storage API 403 错误 - 检查 RLS 策略和 API 密钥
  3. 数据库连接失败 - 检查 PostgreSQL 是否正常运行

Web 应用问题

cd web/ws

# 查看容器状态
docker compose ps

# 查看日志
docker compose logs -f

# 进入容器调试
docker compose exec webws /bin/sh

SSL 证书问题

# 查看证书状态
docker compose logs traefik | grep -i "certificate"

# 删除旧证书重新申请(慎用)
docker volume rm traefik_acme-data
docker compose up -d

📝 开发指南

添加新的 Web 应用

  1. web/ 下创建项目目录
  2. 创建 docker-compose.yml
  3. 配置 Traefik 标签

示例:

services:
  myapp:
    image: myapp:latest
    networks:
      - frontend
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.rule=Host(`amiap.hzau.edu.cn`) && PathPrefix(`/myapp`)"
      - "traefik.http.routers.myapp.entrypoints=websecure"
      - "traefik.http.routers.myapp.tls.certresolver=myresolver"
      - "traefik.http.middlewares.myapp-stripprefix.stripprefix.prefixes=/myapp"
      - "traefik.http.routers.myapp.middlewares=myapp-stripprefix"

networks:
  frontend:
    external: true

前端开发集成

Vue 项目集成 Supabase

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

export const supabase = createClient(
  'https://amiap.hzau.edu.cn/supa',
  'your-anon-key'
)

详细教程:VUE_API_INTEGRATION.md

Storage API 使用

Python:

from examples.storage_client import SupabaseStorageClient

client = SupabaseStorageClient(
    'https://amiap.hzau.edu.cn/supa',
    'your-service-role-key'
)

# 上传文件
client.upload_file('bucket', 'photo.jpg', 'uploads/photo.jpg')

# 生成临时下载链接
url = client.create_signed_url('bucket', 'uploads/photo.jpg', 3600)

JavaScript:

const client = new SupabaseStorageClient(
    'https://amiap.hzau.edu.cn/supa',
    'your-service-role-key'
);

// 上传文件
await client.uploadFile('bucket', fileObject, 'uploads/photo.jpg');

// 生成临时下载链接
const url = await client.createSignedUrl('bucket', 'uploads/photo.jpg', 3600);

🎯 最佳实践

部署流程

  1. 开发环境 → 本地测试
  2. 测试环境 → 内网测试
  3. 生产环境 → 公网部署

备份策略

# 备份 Supabase 数据库
cd supabase-stack
docker exec supabase-db pg_dump -U postgres postgres > backup_$(date +%Y%m%d).sql

# 备份 MinIO 数据
tar -czf minio_backup_$(date +%Y%m%d).tar.gz /vol1/1000/s3/stub/

# 备份配置文件
tar -czf config_backup_$(date +%Y%m%d).tar.gz .env docker-compose*.yml

监控和日志

# 实时监控资源使用
docker stats

# 查看所有容器日志
docker compose logs -f --tail=100

# 日志持久化(可选)
mkdir -p /var/log/docker
docker compose logs > /var/log/docker/traefik_$(date +%Y%m%d).log

性能优化

  1. 数据库连接池 - Supabase pooler可选
  2. CDN 加速 - 静态资源使用 CDN
  3. 缓存策略 - Traefik 支持缓存中间件
  4. 负载均衡 - 多实例部署

📞 技术支持

相关链接

项目维护

  • 部署日期: 2025-11-22
  • 服务器: amiap.hzau.edu.cn
  • 维护团队: Lab Admin

快速导航

🎉 开始使用 Traefik + Supabase 部署平台!

Description
No description provided
Readme 2.1 GiB
Languages
HTML 68.8%
JavaScript 13.6%
Python 12.6%
Shell 4.3%
Dockerfile 0.7%