使用dokploy部署supabase

April 5, 2025

之前个人的自定义supabase实例采用的是docker-compose的方式来部署的,随着vps机器上部署docker服务的增加,这种方式带来了一定的维护问题。所以确定迁移到dokploy的方式。

个人的部署方案参考这里:

安装dokploy

安装完毕后可以通过 http://your-ip-from-your-vps:3000 访问管理台了(注意需要开启3000端口防火墙)。初始阶段通过上面的访问方式即可,然后配置好相关证书以及域名解析后就可以通过域名访问traefix管理台了。

  • 支撑服务:包括一个pg和一个redis。
  • dokploy/dokploy:管理台(nextjs开发的服务)
  • traefik:v3.1.2:网关。开启80、443端口。用于对外提供反向代理服务,包括dokploy管理台本身。

安装方式见官方文档。dokploy安装完毕后可以通过 docker ps 查看,由几个docker服务构成。

配置

traefix配置

 

静态配置:

traefix配置由两大部分构成:静态配置+动态配置。

Loading...

静态配置由几部分组成:

  • certificatesResovers:证书相关配置。
  • entryPoints: 入口。
  • provider:配置发现的几种方式。

 

路由配置(动态配置):

Loading...
  • services:服务列表。
  • routers:路由列表及对应规则等。

traefik的详细配置说明参考 traefik 官网

 

管理台域名+https

配置域名

在管理台web server中配置指定相关的域名,并设置好dns解析。就可以通过http访问相关页面了。此时就可以关闭上面的 http://your-ip-from-your-vps:3000 的防火墙了,避免next服务直接暴露在外网。

管理台https

traefix证书配置有多种方式,常见的包括使用已有证书和acme自动申请的免费证书。

方案一:使用已有证书

可以在动态配置中指定证书。参考https://doc.traefik.io/traefik/https/tls/#default-certificate

在动态配置中增加对应的证书.

Loading...

并在对应静态配置配置证书验证方式:

Loading...

个人项目中,已经使用 腾讯云+acme 生成&自动更新了证书(参考这里 )。所以直接选择了使用已有tls证书方案。

 

方案二:托管给traefik申请acme免费证书

ACME(Automatic Certificate Management Environment)是一种用于自动化处理X.509数字证书签发请求的协议。通过ACME协议,可以自动验证证书申请者的域名所有权,然后为其签发证书。Let's Encrypt是一个非营利性的公共CA(证书颁发机构),支持ACME协议。

步骤:

  1. 静态配置中配置支持的解析器Resover,用于证书获取。
  2. 在entryPoint中开启tls,并指定证书解析器Resolver。

    provider可以根据自己的域名自行选择,支持多种方式。详见官方配置文档

    Loading...

3、配置dnsChallenge所需的环境变量。

注意环境变量不是在shell中配置,而是在管理台的 “Traefix” → “Modify Environment” 中配置。

可以通过 View Logs 查看是否成功、失败原因。配置完毕后就可以通过 https 方式访问 dekploy 管理台来部署我们自己的服务了。

 

服务部署

第一次部署服务,不太熟悉,记录下部署supabase过程。

使用模板部署

dokploy模板中提供了supabase的部署模板,所以简单方案就是直接采用模板来部署,除了改下自己的域名外,基本不需要怎么操作,这是最简单的方案。但是存在两个问题:

  1. 模板中的容器版本较老。如果更改版本,那么相关的配置也要变更,跟自定义部署没啥区别。
  2. 没法自定义部署。个人部署示例中进行了一系列自定义操作,去掉了一些冗余的容器,详见https://github.com/alex-guoba/supabase-docker。模板中就没办法随意变更了。

自定义部署

采用docker-compose的方式来实现自定义部署,原来的docker-compose文件是没办法直接拿过来使用的,需要做一些修改。

与原生docker-compose的差异

  • auth的其他配置项与docker-compose部署时保持一致。包括provider配置。realtime、imgproxy、storage、functions仍然注释。
  • 去掉对外的端口映射。此时 suapbase 无需开放host上的端口。
Loading...
  • 去掉之前的证书配置

个人项目之前直接使用了supabase.kong作为网关,所以配置了证书。这里因为直接使用 traefik 作为网关,kong不再使用证书了。

Loading...
  • db 端口号放开
Loading...

看原镜像也没有放开端口,不知道这里为啥要放开端口。可能跟docker-compose版本有关。

  • volumes:所有volumes 都将docker当前目录改为 ../files/volumnes 。猜测这里跟dokploy的映射方式有关。
Loading...

详见文档说明。

  • 网络

添加deploy-network

Loading...
  1. 用途:通常用于将Compose项目中的服务连接到其他Compose项目或独立容器共享的网络中。
  2. 外部网络external: true 告诉 Docker 不需要为这个服务创建新的网络,而是直接使用已经存在的名为 dokploy-network 的网络。
  • supabase-analytics 把native端口关闭。
Loading...

修改后的文件放在这里了。

环境变量

Environment Settings 中贴入之前的 .env 文件内容。

mount

需要将docker-compose中依赖的mount文件添加到 dokploy 中。

supabase的docker-compose依赖10来个左右的文件,需要逐个添加到dokploy,内容不用变更,文件路径改为 /volumes/ 下的绝对路径。

docker network

开启 Isolate Deployment ,在Preview中可以看到,各个容器的配置中增加了一条networks的配置。

Loading...

如果没有此配置,访问supabase时会dns路由报错,因为dokploy和supabase属于两个不同的docker网络。

最后添加自定义域名,开始部署。部署完毕后就可以访问自己的supabase实例了。

See all postsSee all posts