supabase 旅程预备 - 自部署
1. 什么是 supabase
Supabase 是一个基于 PostgreSQL 的开源开发平台
提供了易于使用的 API 来处理常见的后端任务,如用户认证、数据库操作、文件存储和服务器端函数等,还可以和对接 AI 相关边缘函数,很酷很智能
Supabase 的目标是简化 Web 和移动应用的开发过程,让开发者能够专注于核心业务逻辑
白话说就是,借助 supabase 的能力开发 web 应用不需要后端服务啦,通过 supabase 可以 CURD 管理权限等,有可视化的数据库交互界面。此外也还有很多丰富有趣的功能待探索实践
2. Docker 部署
2.1 部署准备
安装 Docker 和 Docker compose,配好镜像源
正好实操时镜像源这里卡壳了,找到了个可用的贴一下
{
"registry-mirrors": ["https://docker.1ms.run", "https://docker.xuanyuan.me"]
}
2.2 安装和运行
先执行官网文档的部分命令
# 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
pull 可能会比较长时间,这时候我们来看一下/supabase/docker/.env
中的内容,里面有一些关键的配置项
POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password
JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=this_password_is_insecure_and_should_be_updated
SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
VAULT_ENC_KEY=your-encryption-key-32-chars-min
POSTGRES_PASSWORD
:数据库密码,自己设置即可JWT_SECRET
: JWT 密钥- 来到密钥生成地址
- 这里每次进入页面都会生成一个随机的
JWT Secret
,复制当前的即可
ANON_KEY
: 根据JWT_SECRET
生成,下拉框选中后点击下方Generate JWT
按钮生成SERVICE_ROLE_KEY
: 根据JWT_SECRET
生成,下拉框选中后点击下方Generate JWT
按钮生成DASHBOARD_USERNAME
: 面板用户名DASHBOARD_PASSWORD
: 面板密码SECRET_KEY_BASE
: 可用openssl rand -base64 48
随机数生成器生成VAULT_ENC_KEY
: 可用openssl rand -base64 24
随机数生成器生成
VAULT_ENC_KEY
这里有个大坑,就是官网文档说最少 32 位,其实是必需 32 位,否则supabase-pooler
容器就会起不来,官方挖坑可还行...😵
下方 General 部分也很重要需要修改
## General
SITE_URL=http://localhost:3000
ADDITIONAL_REDIRECT_URLS=
JWT_EXPIRY=3600
DISABLE_SIGNUP=false
API_EXTERNAL_URL=http://localhost:8000
SITE_URL
: 项目地址,看自己项目ADDITIONAL_REDIRECT_URLS
: 重定向地址,看自己项目JWT_EXPIRY
:JWT 过期时间,可以改大一点DISABLE_SIGNUP
: 禁用注册API_EXTERNAL_URL
:API URL
再往下看到 Email auth 部分,也需要手动修改
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=false
SMTP_ADMIN_EMAIL=admin@example.com
SMTP_HOST=supabase-mail
SMTP_PORT=2500
SMTP_USER=fake_mail_user
SMTP_PASS=fake_mail_password
SMTP_SENDER_NAME=fake_sender
ENABLE_ANONYMOUS_USERS=false
SMTP_ADMIN_EMAIL
: 邮箱账号SMTP_HOST
: 邮箱服务器 host,不同邮箱不一样需要查询配置SMTP_PORT
: 端口,也是不同邮箱不一样需要查询配置SMTP_USER
: 同邮箱账号SMTP_PASS
: 邮箱授权码,这个不同邮箱配置方式有不同,以腾讯邮箱举例- 点击设置,进入账号页面
- 开启服务
- 点击生成授权码(需要短信验证)
- get √ 授权码
SMTP_SENDER_NAME
: 发送人名称,随便写
下面是自己的腾讯邮箱示例:
## Email auth
ENABLE_EMAIL_SIGNUP=true
ENABLE_EMAIL_AUTOCONFIRM=false
SMTP_ADMIN_EMAIL= xxxxxxxxxxx@qq.com
SMTP_HOST=smtp.qq.com
SMTP_PORT=465
SMTP_USER=xxxxxxxxxxx@qq.com
SMTP_PASS=xxxxxxxxxxxx
SMTP_SENDER_NAME=fxpby-supabase
ENABLE_ANONYMOUS_USERS=false
至此,.env
文件配置完成
然后就可以运行docker compose up -d
了,嗯,很好,我的服务器挂了,滚去修了
macOS 请运行如下命令,使用 MinIO(S3 兼容) 文件存储才能正常使用
docker compose -f docker-compose.yml -f docker-compose.s3.yml up -d
滚回来了...🤧,这个玩意咋这么占内存...好家伙,一下子内存就满了 ?我服务器 2g 内存都不够啊啊啊...去想想办法了...🤕
查到资料说,跑这个需要 4g 内存...emmm 这服务器不便宜搞不来,本机跑吧
本机跑时遇到 supabase-analytics
容器 error
问题
supabase-analytics
容器 error
问题做以下处理可解决,即重置初始化环境,删除所有持久化数据
docker compose down -v
rm -rf volumes/db/data/
一定要确认所有容器都启动了,看了下刚跑起来什么都没做就用了 2g 多,真的好吃内存...后面 3g 打不住的(后续旅程补,用了 4.5g 左右)
在浏览器中访问http://localhost:8000/
或http://<your-ip>:8000
后输入上面配置的用户名和密码即可访问我们的 supabase 管理面板~
至此,我们的自部署旅程准备就完成啦~🥳