Administrator
Published on 2025-02-27 / 23 Visits
0
0

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

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

1,获取项目

(1)首先我们通过 git 命令将 Supabase 项目 clone 到本地:

1

git clone --depth 1 https://github.com/supabase/supabase

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

1

cd supabase/docker

(3)我们直接使用默认提供的环境配置: 

注意:如果我们需要修改数据库默认的密码,请参考文章最下方的附三内容提前进行修改。否则部署后再次修改比较麻烦。

1

cp .env.example .env


2,启动服务 

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

1

docker compose pull

(2)拉取后执行如下命令启动容器: 

1

docker compose up -d

(3)查看各容器是否均正常启动: 

注意:我这里部署时发现有时 supabase-studio 为 unhealthy,但是不影响使用。

(4)各个容器服务的功能介绍如下:

  • Kong 是一个云原生 API 网关。

  • GoTrue 是一个基于 JWT 的 API,用于管理用户和发放 JWT 令牌。

  • PostgREST 是一个 Web 服务器,可将我们的 PostgreSQL 数据库直接转换为 RESTful API

  • Realtime 是一个 Elixir 服务器,允许我们通过 Websockets 监听 PostgreSQL 的插入、更新和删除操作。实时使用 Postgres 内置的复制功能轮询数据库更改,将更改转换为 JSON,然后通过 Websockets 广播 JSON 给授权的客户端。

  • Storage 提供一个 RESTful 接口,用于管理存储在 S3 中的文件,并使用 Postgres 管理权限。

  • postgres-meta 是一个用于管理您的 Postgres 的 RESTful API,允许我们获取表、添加角色和运行查询等。

  • PostgreSQL 是一个具有超过 30 年积极开发历史的面向对象关系数据库系统,以其可靠性、功能强大和性能而赢得了强大的声誉。

3,访问 Supabase

(1)容器启动后,我们可以通过 8000 端口上的 API 网关访问 Supabase Dashboard 页面。例如宿主机 IP 为 121.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 文件:

1

vi .env

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

(3)修改并保存后执行如下命令重启服务即可

1

2

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 文件: 

1

vi .env

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

(5)修改并保存后执行如下命令重启服务即可

1

2

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

1

psql -h 127.0.0.1 -p 5432 -d postgres -U postgres

(2)数据库默认的密码如下: 

1

your-super-secret-and-long-postgres-password

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

1

vi .env

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

(5)密码修改后重启服务会发现服务无法正常启动,这是由于数据库已经用我们之前的密码初始化完成了,只该配置文件服务是服务连上数据库的。我们可以直接把项目 docker 文件夹下的数据库的持久化文件删除:

注意:删除持久化文件会造成数据库数据全部丢失,记得提前备份必要的数据。

1

rm -rf volumes/db/data

(6)然后重启部署服务即可

1

2

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)修改并保存后执行如下命令重启服务即可

1

2

docker compose stop

docker compose up -d

附五:配置邮箱 SMTP 协议 

1,注册确认功能

    Supabase 提供用户注册功能,即将要注册的邮箱和需要设置的密码发送给客户端接口进行注册,Supabase 服务会发送一封确认邮件给该用户邮箱进行激活。为了确保激活邮件的正常发出,我们需要进行 SMTP 相关配置。

(1)假设我们使用 QQ 邮箱进行激活邮件发送。首先,登录我们的 QQ 邮箱,然后进入设置,找到 IMAP/SMTP 服务相关设置:

(2)获取授权码:

(3)编辑 .env 文件,配置 SMTP 相关的环境变量: 

1

2

3

4

5

6

7

8

9

10

11

12

13

## 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)修改并保存后执行如下命令重启服务即可

1

2

docker compose stop

docker compose up -d

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

2,自动激活

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

(2)修改并保存后执行如下命令重启服务即可

1

2

docker compose stop

docker compose up -d

www.hangge.com


Comment