使用 Docker 快速启动完整的 Supabase 服务栈。一键启动,自动配置,开箱即用!
Linux/Mac:
chmod +x start.sh
./start.sh
Windows:
start.bat
首次运行会自动:
.env 配置文件启动成功后,可以通过以下地址访问:
| 服务 | 地址 | 说明 |
|---|---|---|
| Studio | http://localhost:3000 | Web 管理控制台 |
| API | http://localhost:8000 | REST API 端点 |
| Database | localhost:5432 | PostgreSQL 数据库 |
| Analytics | http://localhost:4000 | 日志分析服务 |
默认登录信息(查看 .env 文件):
supabase.env 中的 DASHBOARD_PASSWORD./start.sh start # 启动服务(默认)
./start.sh stop # 停止服务
./start.sh restart # 重启服务
./start.sh down # 停止并删除所有容器
./start.sh reset # 完全重置(删除所有数据和容器)
./start.sh logs # 查看日志(可指定服务名)
./start.sh status # 查看服务状态
./start.sh config # 打开配置文件
./start.sh help # 显示帮助信息
示例:
./start.sh logs db # 查看数据库日志
./start.sh logs auth # 查看认证服务日志
./start.sh logs kong # 查看 API 网关日志
start.bat start # 启动服务(默认) start.bat stop # 停止服务 start.bat restart # 重启服务 start.bat down # 停止并删除所有容器 start.bat reset # 完全重置(删除所有数据和容器) start.bat logs # 查看日志 start.bat status # 查看服务状态 start.bat config # 打开配置文件 start.bat help # 显示帮助信息
Linux/Mac:
./start.sh config
# 或直接编辑
nano .env
Windows:
start.bat config # 或直接编辑 notepad .env
修改配置后需要重启服务:
./start.sh restart # Linux/Mac
start.bat restart # Windows
# PostgreSQL 数据库密码
POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password
# JWT 密钥(用于身份验证,至少 32 字符)
JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long
# API 密钥
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
# Dashboard 登录信息
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=your-dashboard-password
生成安全密钥的方法:
# 生成 JWT 密钥
openssl rand -base64 50
# 或
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1
# API 外部访问地址
API_EXTERNAL_URL=http://localhost:8000
# Supabase 公开地址
SUPABASE_PUBLIC_URL=http://localhost:8000
# 站点地址(用于邮件验证链接等)
SITE_URL=http://localhost:3000
# 额外的重定向 URL(多个用逗号分隔)
ADDITIONAL_REDIRECT_URLS=http://localhost:3001,http://example.com
生产环境示例:
API_EXTERNAL_URL=https://api.yourdomain.com SUPABASE_PUBLIC_URL=https://api.yourdomain.com SITE_URL=https://yourdomain.com ADDITIONAL_REDIRECT_URLS=https://app.yourdomain.com
POSTGRES_DB=postgres
POSTGRES_HOST=db
POSTGRES_PORT=5432
# 连接池配置
POOLER_DEFAULT_POOL_SIZE=20
POOLER_MAX_CLIENT_CONN=100
POOLER_DB_POOL_SIZE=5
# 是否禁止新用户注册
DISABLE_SIGNUP=false
# 是否启用邮箱注册
ENABLE_EMAIL_SIGNUP=true
# 是否启用匿名用户
ENABLE_ANONYMOUS_USERS=false
# 是否自动确认邮箱
ENABLE_EMAIL_AUTOCONFIRM=false
# JWT 过期时间(秒)
JWT_EXPIRY=3600
场景配置示例:
公开注册(社交应用):
DISABLE_SIGNUP=false
ENABLE_EMAIL_SIGNUP=true
ENABLE_ANONYMOUS_USERS=true
ENABLE_EMAIL_AUTOCONFIRM=true
需邮箱验证(企业应用):
DISABLE_SIGNUP=false
ENABLE_EMAIL_SIGNUP=true
ENABLE_ANONYMOUS_USERS=false
ENABLE_EMAIL_AUTOCONFIRM=false
仅管理员添加用户(内部系统):
DISABLE_SIGNUP=true
ENABLE_EMAIL_SIGNUP=false
ENABLE_ANONYMOUS_USERS=false
使用真实 SMTP 服务器:
# 管理员邮箱
SMTP_ADMIN_EMAIL=admin@yourdomain.com
# SMTP 服务器
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
# SMTP 认证
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
# 发件人名称
SMTP_SENDER_NAME=Your App Name
常用 SMTP 配置:
Gmail:
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password # 需要在 Google 账户生成应用专用密码
Outlook:
SMTP_HOST=smtp.office365.com SMTP_PORT=587 SMTP_USER=your-email@outlook.com SMTP_PASS=your-password
腾讯企业邮箱:
SMTP_HOST=smtp.exmail.qq.com SMTP_PORT=465 SMTP_USER=your-email@company.com SMTP_PASS=your-password
阿里云邮件推送:
SMTP_HOST=smtpdm.aliyun.com SMTP_PORT=80 SMTP_USER=your-username SMTP_PASS=your-password
# 默认组织名称
STUDIO_DEFAULT_ORGANIZATION=My Company
# 默认项目名称
STUDIO_DEFAULT_PROJECT=My Project
用于 Studio SQL Editor 的 AI 助手:
OPENAI_API_KEY=sk-...
获取方式:
如果默认端口被占用,可以在 .env 中修改:
# 修改 API 端口
KONG_HTTP_PORT=8000
KONG_HTTPS_PORT=8443
# 修改数据库端口
POSTGRES_PORT=5432
POOLER_PROXY_PORT_TRANSACTION=6543
注意:修改端口后需要重启服务。
数据存储在 volumes/ 目录:
volumes/ ├── db/data/ # PostgreSQL 数据 ├── storage/ # 文件存储 ├── api/ # Kong 配置 ├── functions/ # Edge Functions ├── logs/ # Vector 日志配置 └── pooler/ # Supavisor 配置
⚠️ 生产环境必须做以下配置:
检查端口占用:
# Linux/Mac
lsof -i :3000
lsof -i :8000
# Windows
netstat -ano | findstr ":3000"
netstat -ano | findstr ":8000"
解决方案: 停止占用端口的程序,或修改 .env 中的端口配置。
检查数据库容器是否健康:
./start.sh status ./start.sh logs db
./start.sh reset
# 或
docker compose down -v --remove-orphans
rm -rf volumes/db/data/*
rm -rf volumes/storage/*
⚠️ 警告:此操作会删除所有数据,不可恢复!
备份数据库:
# 导出数据库
docker compose exec -T db pg_dump -U postgres postgres > backup.sql
# 导入数据库
docker compose exec -T db psql -U postgres postgres < backup.sql
备份文件存储:
# 复制整个 storage 目录
cp -r volumes/storage backup_storage/
# 拉取最新镜像
docker compose pull
# 重启服务
docker compose down
docker compose up -d
确保 Studio 容器的端口已映射:
docker compose ps studio
# 应该显示: 0.0.0.0:3000->3000/tcp
如果没有端口映射,检查 docker-compose.yml 中的 studio 服务是否包含:
ports:
- 3000:3000/tcp
编辑 docker-compose.yml 中的 db 服务:
db:
environment:
# 共享缓冲区(默认 128MB,可增加到内存的 25%)
shared_buffers: 256MB
# 有效缓存大小(默认 4GB)
effective_cache_size: 4GB
# 最大工作进程数(默认 CPU 核心数)
max_worker_processes: 4
# 工作内存(默认 4MB)
work_mem: 16MB
# 并发连接数
POOLER_DEFAULT_POOL_SIZE=20
# 最大客户端数
POOLER_MAX_CLIENT_CONN=200
调整建议:
POOLER_DEFAULT_POOL_SIZE=30, POOLER_MAX_CLIENT_CONN=200POOLER_DEFAULT_POOL_SIZE=50, POOLER_MAX_CLIENT_CONN=500将 SQL 脚本放在 volumes/db/init/ 目录:
volumes/db/init/ ├── 01_create_tables.sql ├── 02_insert_data.sql └── 03_create_functions.sql
编辑 volumes/api/kong.yml 文件,添加自定义路由和插件。
将函数文件放在 volumes/functions/ 目录:
volumes/functions/ └── my-function/ └── index.ts
创建 nginx.conf:
server { listen 80; server_name api.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name api.yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
API_EXTERNAL_URL=https://api.yourdomain.com SUPABASE_PUBLIC_URL=https://api.yourdomain.com SITE_URL=https://yourdomain.com
# 克隆项目
git clone <your-repo>
cd supabase-docker
# 配置环境变量
cp .env.example .env
nano .env # 修改密码和密钥
# 启动服务
./start.sh
# 或使用 docker compose
docker compose up -d
腾讯云轻量应用服务器:
# 安装 Docker
curl -fsSL https://get.docker.com | sh
# 安装 Docker Compose
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 上传项目文件
scp -r supabase-docker root@your-server:/opt/
# 连接服务器
ssh root@your-server
# 启动服务
cd /opt/supabase-docker
./start.sh
阿里云 ECS:
# 安装 Docker
yum install -y docker
systemctl start docker
# 启动服务
cd /path/to/supabase-docker
./start.sh
安装 Nginx:
# Ubuntu/Debian
apt install -y nginx
# CentOS/RHEL
yum install -y nginx
配置 Nginx (/etc/nginx/sites-available/supabase):
# Studio server { listen 80; server_name studio.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name studio.yourdomain.com; ssl_certificate /etc/ssl/certs/studio.crt; ssl_certificate_key /etc/ssl/private/studio.key; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } # API server { listen 80; server_name api.yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name api.yourdomain.com; ssl_certificate /etc/ssl/certs/api.crt; ssl_certificate_key /etc/ssl/private/api.key; client_max_body_size 50M; location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
启用配置:
ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
更新 Supabase 配置 (.env):
API_EXTERNAL_URL=https://api.yourdomain.com SUPABASE_PUBLIC_URL=https://api.yourdomain.com SITE_URL=https://studio.yourdomain.com
重启服务:
./start.sh restart
使用 Let's Encrypt 免费证书:
# 安装 Certbot
apt install -y certbot python3-certbot-nginx
# 获取证书
certbot --nginx -d api.yourdomain.com -d studio.yourdomain.com
# 证书自动续期
certbot renew --dry-run
证书位置:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem/etc/letsencrypt/live/yourdomain.com/privkey.pem更新 Nginx 配置使用这些证书。
使用 UFW (Ubuntu):
# 启用防火墙
ufw enable
# 允许 SSH
ufw allow 22/tcp
# 允许 HTTP/HTTPS
ufw allow 80/tcp
ufw allow 443/tcp
# 查看状态
ufw status
使用 firewalld (CentOS):
# 启用防火墙
systemctl start firewalld
systemctl enable firewalld
# 允许服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
# 重载配置
firewall-cmd --reload
创建备份脚本 /opt/backup-supabase.sh:
#!/bin/bash
# 配置
BACKUP_DIR="/opt/backups/supabase"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份数据库
docker compose exec -T db pg_dump -U postgres postgres > $BACKUP_DIR/db_$DATE.sql
# 备份存储
tar -czf $BACKUP_DIR/storage_$DATE.tar.gz volumes/storage/
# 删除旧备份
find $BACKUP_DIR -type f -mtime +$RETENTION_DAYS -delete
# 上传到云存储(可选)
# aws s3 sync $BACKUP_DIR s3://your-backup-bucket/supabase/
添加定时任务:
# 编辑 crontab
crontab -e
# 每天凌晨 2 点备份
0 2 * * * /opt/backup-supabase.sh
本项目配置了 cnb.yaml,支持在腾讯云 CODING 等支持 Cloud Native Buildpacks 的平台上部署。
cnb.yaml 配置.env.example)在 CODING 部署配置中设置以下变量:
| 变量名 | 说明 |
|---|---|
POSTGRES_PASSWORD | 数据库密码 |
JWT_SECRET | JWT 密钥 |
ANON_KEY | 匿名访问密钥 |
SERVICE_ROLE_KEY | 服务端密钥 |
DASHBOARD_PASSWORD | Dashboard 密码 |
API_EXTERNAL_URL | API 外部地址 |
SUPABASE_PUBLIC_URL | 公开访问地址 |
SITE_URL | 站点地址 |
Apache-2.0
| 端口 | 服务 | 说明 |
|---|---|---|
| 3000 | Studio | Web 管理界面 |
| 8000 | Kong HTTP | API 网关 |
| 8443 | Kong HTTPS | API 网关(SSL) |
| 5432 | PostgreSQL | 数据库 |
| 4000 | Analytics | 日志分析 |
# 启动服务
./start.sh
# 查看状态
./start.sh status
# 查看日志
./start.sh logs [服务名]
# 重启服务
./start.sh restart
# 停止服务
./start.sh stop
# 编辑配置
./start.sh config
# 完全重置
./start.sh reset
| 配置 | 位置 |
|---|---|
| 环境变量 | .env |
| Docker Compose | docker-compose.yml |
| Kong 配置 | volumes/api/kong.yml |
| 数据库数据 | volumes/db/data/ |
| 文件存储 | volumes/storage/ |
| Edge Functions | volumes/functions/ |