使用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配置由两大部分构成:静态配置+动态配置。
静态配置由几部分组成:
- certificatesResovers:证书相关配置。
- entryPoints: 入口。
- provider:配置发现的几种方式。
路由配置(动态配置):
- 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。
在动态配置中增加对应的证书.
并在对应静态配置配置证书验证方式:
个人项目中,已经使用 腾讯云+acme 生成&自动更新了证书(参考这里 )。所以直接选择了使用已有tls证书方案。
方案二:托管给traefik申请acme免费证书
ACME(Automatic Certificate Management Environment)是一种用于自动化处理X.509数字证书签发请求的协议。通过ACME协议,可以自动验证证书申请者的域名所有权,然后为其签发证书。Let's Encrypt是一个非营利性的公共CA(证书颁发机构),支持ACME协议。
步骤:
- 静态配置中配置支持的解析器Resover,用于证书获取。
- 在entryPoint中开启tls,并指定证书解析器Resolver。
provider可以根据自己的域名自行选择,支持多种方式。详见官方配置文档。
Loading...
3、配置dnsChallenge所需的环境变量。
注意环境变量不是在shell中配置,而是在管理台的 “Traefix” → “Modify Environment” 中配置。
可以通过 View Logs 查看是否成功、失败原因。配置完毕后就可以通过 https 方式访问 dekploy 管理台来部署我们自己的服务了。
服务部署
第一次部署服务,不太熟悉,记录下部署supabase过程。
使用模板部署
dokploy模板中提供了supabase的部署模板,所以简单方案就是直接采用模板来部署,除了改下自己的域名外,基本不需要怎么操作,这是最简单的方案。但是存在两个问题:
- 模板中的容器版本较老。如果更改版本,那么相关的配置也要变更,跟自定义部署没啥区别。
- 没法自定义部署。个人部署示例中进行了一系列自定义操作,去掉了一些冗余的容器,详见https://github.com/alex-guoba/supabase-docker。模板中就没办法随意变更了。
自定义部署
采用docker-compose的方式来实现自定义部署,原来的docker-compose文件是没办法直接拿过来使用的,需要做一些修改。
与原生docker-compose的差异
- auth的其他配置项与docker-compose部署时保持一致。包括provider配置。realtime、imgproxy、storage、functions仍然注释。
- 去掉对外的端口映射。此时 suapbase 无需开放host上的端口。
- 去掉之前的证书配置
个人项目之前直接使用了supabase.kong作为网关,所以配置了证书。这里因为直接使用 traefik 作为网关,kong不再使用证书了。
- db 端口号放开
看原镜像也没有放开端口,不知道这里为啥要放开端口。可能跟docker-compose版本有关。
- volumes:所有volumes 都将docker当前目录改为 ../files/volumnes 。猜测这里跟dokploy的映射方式有关。
详见文档说明。
- 网络
添加deploy-network
- 用途:通常用于将Compose项目中的服务连接到其他Compose项目或独立容器共享的网络中。
- 外部网络:external: true 告诉 Docker 不需要为这个服务创建新的网络,而是直接使用已经存在的名为 dokploy-network 的网络。
- supabase-analytics 把native端口关闭。
修改后的文件放在这里了。
环境变量
在 Environment Settings 中贴入之前的 .env 文件内容。
mount

需要将docker-compose中依赖的mount文件添加到 dokploy 中。
supabase的docker-compose依赖10来个左右的文件,需要逐个添加到dokploy,内容不用变更,文件路径改为 /volumes/ 下的绝对路径。
docker network
开启 Isolate Deployment ,在Preview中可以看到,各个容器的配置中增加了一条networks的配置。
如果没有此配置,访问supabase时会dns路由报错,因为dokploy和supabase属于两个不同的docker网络。
最后添加自定义域名,开始部署。部署完毕后就可以访问自己的supabase实例了。