返回 导航

Docker / K8s

hangge.com

Docker - 后端即服务平台Supabase的私有化部署教程

作者:hangge | 2024-02-22 08:53
    Supabase 是一个开源的后端即服务(Backend-as-a-ServiceBaaS)平台,提供了实时数据库和身份验证等功能。虽然其官方也提供了在线的 supabase 服务,并且在国内也是可以直接访问,但是部署地域只能选择韩国,日本,新加坡,印度等亚洲地区。而且后续如果需要对内置功能进行扩展,或者嵌入自己的后端服务的场景时可能会存在问题。因此我们可以在自己的服务器上进行私有化部署,从而保证更好的可维护性。

1,获取项目

(1)首先我们通过 git 命令将 Supabase 项目 clone 到本地:
git clone --depth 1 https://github.com/supabase/supabase

(2)进入其中的 docker 文件夹:
cd supabase/docker

(3)我们直接使用默认提供的环境配置:
注意:如果我们需要修改数据库默认的密码,请参考文章最下方的附三内容提前进行修改。否则部署后再次修改比较麻烦。
cp .env.example .env

2,启动服务

(1)执行如下命令拉去所有需要的镜像:
docker compose pull

(2)拉取后执行如下命令启动容器:
docker compose up -d

(3)查看各容器是否均正常启动:
注意:我这里部署时发现有时 supabase-studiounhealthy,但是不影响使用。

(4)各个容器服务的功能介绍如下:
  • Kong 是一个云原生 API 网关。
  • GoTrue 是一个基于 JWTAPI,用于管理用户和发放 JWT 令牌。
  • PostgREST 是一个 Web 服务器,可将我们的 PostgreSQL 数据库直接转换为 RESTful API
  • Realtime 是一个 Elixir 服务器,允许我们通过 Websockets 监听 PostgreSQL 的插入、更新和删除操作。实时使用 Postgres 内置的复制功能轮询数据库更改,将更改转换为 JSON,然后通过 Websockets 广播 JSON 给授权的客户端。
  • Storage 提供一个 RESTful 接口,用于管理存储在 S3 中的文件,并使用 Postgres 管理权限。
  • postgres-meta 是一个用于管理您的 PostgresRESTful API,允许我们获取表、添加角色和运行查询等。
  • PostgreSQL 是一个具有超过 30 年积极开发历史的面向对象关系数据库系统,以其可靠性、功能强大和性能而赢得了强大的声誉。

3,访问 Supabase

(1)容器启动后,我们可以通过 8000 端口上的 API 网关访问 Supabase Dashboard 页面。例如宿主机 IP121.40.205.237, 那么地址则为 http://121.40.205.237:8000/
API 网关提供的服务接口:
  • RESThttp://<your-ip>:8000/rest/v1/
  • Authhttp://<your-domain>:8000/auth/v1/
  • Storagehttp://<your-domain>:8000/storage/v1/
  • Realtimehttp://<your-domain>:8000/realtime/v1/

(2)访问时系统会提示我们输入用户名和密码,系统默认的用户密码分别如下:
  • 用户名supabase
  • 密码this_password_is_insecure_and_should_be_updated

(3)登录后,显示的 Supabase Dashboard 主页面如下,至此整个服务已经部署成功。

附一:修改 Supabase Dashboard 的登录密码

(1)在生产中使用 Supabase 我们必须修改默认用户和密码以确保系统安全,编辑 .env 文件:
vi .env

(2)修改其中的 DASHBOARD_USERNAME和DASHBOARD_PASSWORD 属性值:

(3)修改并保存后执行如下命令重启服务即可
docker compose stop
docker compose up -d

附二:修改 API 密钥

(1)在生产环境中,我们可以修改系统默认的 API 密钥,确保系统更加安全。我们可以访问 Supabase 网关自动生成密钥(点击访问),其中 JWT Secret 每次打开页面都不一样,我们可以直接使用,也可以自定义一个。然后点击“Generate JWT”按钮生成 ANON_KEY,记下它: 

(2)然后将“Preconfigured Payload”下拉框切换成“SERVICE_KEY”,然后点击“Generate JWT”按钮生成 SERVICE_KEY,记下它:

(3)编辑 .env 文件:
vi .env

(4)修改其中的 JWT_SECRETANON_KEY 和 SERVICE_ROLE_KEY 属性值:

(5)修改并保存后执行如下命令重启服务即可
docker compose stop
docker compose up -d

附三、修改 PostgreSQL 数据库密码

(1)在宿主机上,我们可以使用如下命令连接访问 Postgres 数据库:
注意:如果提示找不到 psql 命令,可以执行如下命令进行安装。
  • yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  • yum install postgresql12
psql -h 127.0.0.1 -p 5432 -d postgres -U postgres

(2)数据库默认的密码如下:
your-super-secret-and-long-postgres-password

(3)要修改默认密码,我们需要编辑 .env 文件:
vi .env

(4)将其中 POSTGRES_PASSWORD 属性值修改成新密码即可:

(5)密码修改后重启服务会发现服务无法正常启动,这是由于数据库已经用我们之前的密码初始化完成了,只该配置文件服务是服务连上数据库的。我们可以直接把项目 docker 文件夹下的数据库的持久化文件删除:
注意:删除持久化文件会造成数据库数据全部丢失,记得提前备份必要的数据。
rm -rf volumes/db/data

(6)然后重启部署服务即可
docker compose down
docker compose up -d

附四、修改配置文件中服务器 IP,解决新增用户报错问题

(1)如果我们从外部通过浏览器访问 Supabase Dashboard 页面,创建一个用户并提交时,会报“Failed to create user: An error has occurred: Failed to fetch”错误。

(2)这是由于默认配置文件中的服务地址都是 localhost,我们编辑 .env 文件,将其改成实际的 IP 地址即可:

(3)修改并保存后执行如下命令重启服务即可
docker compose stop
docker compose up -d

附五:配置邮箱 SMTP 协议

1,注册确认功能

    Supabase 提供用户注册功能,即将要注册的邮箱和需要设置的密码发送给客户端接口进行注册,Supabase 服务会发送一封确认邮件给该用户邮箱进行激活。为了确保激活邮件的正常发出,我们需要进行 SMTP 相关配置。
(1)假设我们使用 QQ 邮箱进行激活邮件发送。首先,登录我们的 QQ 邮箱,然后进入设置,找到 IMAP/SMTP 服务相关设置:

(2)获取授权码:

(3)编辑 .env 文件,配置 SMTP 相关的环境变量:
## Email auth
# 你的邮箱
SMTP_ADMIN_EMAIL=123456789@qq.com
# 固定的
SMTP_HOST=smtp.qq.com
# 固定的
SMTP_PORT=465
# 你的邮箱
SMTP_USER=123456789@qq.com
# 刚刚获取的授权码
SMTP_PASS=mhbkedkqloodpwx
# 发信人姓名
SMTP_SENDER_NAME=hangge

(4)修改并保存后执行如下命令重启服务即可
docker compose stop
docker compose up -d

(5)这样用户注册后就会收到激活邮件,点击激活链接后账号即可生效。

2,自动激活

(1)如果需要注册时自动激活,而不需要邮件进行二次确认,可以将配置文件中的 ENABLE_EMAIL_AUTOCONFIRM 设置为 true

(2)修改并保存后执行如下命令重启服务即可
docker compose stop
docker compose up -d
评论

全部评论(0)

回到顶部