Supabase是一个开源的Firebase替代方案,提供身份验证、实时数据库、存储和边缘函数等功能。在本教程中,你将学习如何在Ubuntu 24.04服务器上使用Docker安装和配置Supabase,包括通过Nginx反向代理进行安全配置。
前提条件
在开始本教程之前,请确保你具备以下条件:
- 一台Ubuntu 24.04服务器
- 一个具有管理员权限的非root用户
- 一个已指向服务器IP地址的域名
安装Docker引擎
要在服务器上部署Supabase,你需要在机器上安装Docker引擎。Supabase应用程序将作为容器在服务器上运行。
在本节中,你将通过官方Docker仓库安装Docker引擎。
首先,运行以下命令更新Ubuntu软件包索引并安装ca-certificates、curl和git等软件包。
sudo apt update
sudo apt install -y ca-certificates curl git

现在运行以下命令添加Docker引擎仓库的GPG密钥。
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
通过执行以下命令为你的Ubuntu服务器添加Docker引擎仓库。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

添加了Docker GPG密钥和仓库后,运行以下apt命令刷新软件包索引并安装Docker引擎。同时还会安装Docker Compose和buildx插件。
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
输入Y确认安装。

将用户添加到Docker组
在本教程中,你将以非root用户运行Supabase,因此请确保已创建一个专用用户。然后需要将用户添加到docker组,这将允许用户运行容器。
使用以下命令将用户添加到docker组。这将允许你的用户执行和运行容器。
sudo usermod -aG docker username
使用以下su命令登录到你的用户。
su - username
最后,执行以下docker命令运行hello-world容器。
docker run hello-world
如果一切正常,你将看到来自Docker的Hello World消息。

下载和安装Supabase
现在已经安装了Docker,下一步是下载Supabase并将其作为容器运行。在本节中,你将学习如何启动Supabase,稍后还将学习如何对其进行安全配置。
使用以下git命令下载Supabase源代码。
git clone --depth 1 https://github.com/supabase/supabase
进入supabase/docker目录,并将.env.example文件复制为.env。此文件将用于配置你的Supabase安装。
cd supabase/docker
cp .env.example .env
接下来,运行以下docker compose命令从Docker仓库下载Supabase镜像。这将下载多个Supabase相关的镜像。
docker compose pull
你可以看到Supabase Docker镜像的下载过程。

下载完成后,执行以下命令启动Supabase容器。使用-d选项将在后台运行容器,因此不会显示Supabase容器的日志。
docker compose up -d

最后,运行以下docker compose命令检查Supabase容器的状态。
docker compose ps
在下面的输出中,你可以看到supabase-auth、supabase-kong、supabase-rest和supabase-studio等Supabase容器正在运行。

安全配置Supabase
目前Supabase已经在你的系统上运行,但没有适当的密码和身份验证。因此现在需要通过修改.env文件中的凭据来保护Supabase安装。
在开始之前,让我们为PostgreSQL服务器和Supabase仪表板生成密码,然后生成JWT密钥和令牌。
执行以下命令两次,为Supabase仪表板和PostgreSQL服务器生成安全密码。
openssl rand -hex 16

现在访问Supabase官方文档生成两个JWT令牌。确保记录以下信息:
- JWT Secret密钥
- ANON_KEY和SERVICE_KEY的密钥
- 为两者生成的JWT令牌

现在已经为Supabase生成了密码和令牌,让我们通过编辑.env文件来应用这些配置。
使用vim编辑器打开.env文件。
vim .env
将生成的OpenSSL密码粘贴到POSTGRES_PASSWORD选项中。
POSTGRES_PASSWORD=f489d6f61514eb90fbf57fb574c3d367
将你的JWT密钥输入到JWT_SECRET选项中。
JWT_SECRET=PUaiJLm1PKAebJJRIdXylVJrfgGbRWdWvzN0EUgh
将ANON_KEY的值替换为为anon用户生成的JWT令牌。
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzM2MzU1NjAwLAogICJleHAiOiAxODk0MTIyMDAwCn0.f8_wST3WX1bmvsHttRokJPCz7-rpyjU8HMNnYH7kSd4
将SERVICE_ROLE_KEY的值替换为为service_role用户生成的JWT令牌。
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogInNlcnZpY2Vfcm9sZSIsCiAgImlzcyI6ICJzdXBhYmFzZSIsCiAgImlhdCI6IDE3MzYzNTU2MDAsCiAgImV4cCI6IDE4OTQxMjIwMDAKfQ.DOo1lqH76AR_jCx0N9QDZBEdrQ8T_JBQqc7CagD1mWM
如果你在公共服务器上部署,请输入你的SMTP服务器详细信息。
Email auth ENABLE_EMAIL_SIGNUP=true ENABLE_EMAIL_AUTOCONFIRM=false [email protected] SMTP_HOST=smtp.server.address SMTP_PORT=2500 SMTP_USER=username SMTP_PASS=password SMTP_SENDER_NAME=sender_name ENABLE_ANONYMOUS_USERS=false
在DASHBOARD_USERNAME和DASHBOARD_PASSWORD选项中输入你的用户名和密码。此用户将用于登录Supabase。
DASHBOARD_USERNAME=supabase DASHBOARD_PASSWORD=91521851a4e1375145959eecddfaff45
将你的域名输入到SITE_URL、API_EXTERNAL_URL和SUPABASE_PUBLIC_URL选项中。在本示例中,将使用域名https://supabase.example.com。
SITE_URL=https://supabase.example.com API_EXTERNAL_URL=https://supabase.example.com SUPABASE_PUBLIC_URL=https://supabase.example.com
完成后保存文件并退出编辑器。
现在运行以下docker命令停止并删除Supabase容器。
docker compose down
然后使用以下命令重新创建Supabase容器。
docker compose up -d
一切运行后,使用以下命令检查每个容器服务。
docker compose ps
你可以在下面看到Supabase的每个容器都在运行。

设置Nginx作为Supabase反向代理
现在Supabase已经安全配置完成,让我们安装Nginx Web服务器并将其配置为Supabase的反向代理。请确保你已经准备好了域名并将其指向服务器IP地址。
使用以下apt命令安装Nginx。
sudo apt install nginx -y
现在使用vim编辑器创建新的Nginx服务器块配置文件/etc/nginx/sites-available/supabase。
sudo vim /etc/nginx/sites-available/supabase
粘贴以下配置,确保修改server_name选项中的域名。
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream kong {
server localhost:8000;
}
server {
listen 80;
server_name supabase.example.com;
# REST
location ~ ^/rest/v1/(.*)$ {
proxy_set_header Host $host;
proxy_pass http://kong;
proxy_redirect off;
}
# AUTH
location ~ ^/auth/v1/(.*)$ {
proxy_set_header Host $host;
proxy_pass http://kong;
proxy_redirect off;
}
# REALTIME
location ~ ^/realtime/v1/(.*)$ {
proxy_redirect off;
proxy_pass http://kong;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
}
# STUDIO
location / {
proxy_set_header Host $host;
proxy_pass http://kong;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
}
}
完成后保存文件并退出编辑器。
接下来,执行以下命令激活Supabase服务器块并验证Nginx配置。如果没有错误,你将得到输出syntax is ok - test is successful。
sudo ln -s /etc/nginx/sites-available/supabase /etc/nginx/sites-enabled/
sudo nginx -t

现在运行以下systemctl命令重启Nginx Web服务器并应用更改。这样你的Supabase安装将在Nginx反向代理下运行。
sudo systemctl restart nginx
最后,执行以下systemctl命令验证Nginx服务并确保服务正在运行。
sudo systemctl status nginx
如果一切正常,你将看到类似以下的输出。

使用HTTPS保护Supabase
Nginx作为反向代理运行后,让我们生成SSL证书并启用HTTPS来保护Supabase安装。
如果你处于开发模式,可以跳过此部分,保留HTTP即可。对于生产环境,你必须实现HTTPS来保护你的Supabase服务器。
使用以下apt命令安装Certbot和Nginx Certbot插件。输入Y确认安装。
sudo apt install certbot python3-certbot-nginx
安装完成后,执行以下certbot命令为你的域名生成SSL证书。确保修改命令中的域名和邮箱地址。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d supabase.example.com
完成后,你的SSL证书将保存在/etc/letsencrypt/live/domain.com目录中,Supabase将通过Nginx Certbot插件自动启用HTTPS保护。
访问Supabase Studio
要访问Supabase,打开Web浏览器并访问https://supabase.example.com。如果安装成功,你将看到基本的密码身份验证页面。
输入DASHBOARD_USERNAME和DASHBOARD_PASSWORD选项中的用户名和密码,然后点击Login。

如果成功,你将看到Supabase仪表板。

恭喜!你已经在Ubuntu 24.04服务器上通过Docker完成了Supabase的安装。你已经部署并保护了Supabase,配置了密码身份验证和JWT令牌,安装并配置了Nginx作为反向代理,最后通过Certbot和Let's Encrypt实现了HTTPS安全保护。现在你可以尝试创建新数据库,向Supabase插入数据,然后使用Supabase模块创建简单的应用程序通过REST API进行通信。