如何在 Debian 11 上使用 Docker 安装 Supabase如何在 Debian 11 上使用 Docker 安装 Supabase如何在 Debian 11 上使用 Docker 安装 Supabase如何在 Debian 11 上使用 Docker 安装 Supabase
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Debian 11 上使用 Docker 安装 Supabase

在此页

  1. 先决条件
  2. 第 1 步 - 配置防火墙
  3. 第 2 步 - 安装 Git
  4. 第 3 步 - 安装 Docker
  5. 第 4 步 - 安装 Docker Compose
  6. 第 5 步 - 下载并配置 Supabase
  7. 第 6 步 - 安装 Supabase
  8. 第 7 步 - 安装 SSL
  9. 第 8 步 - 安装和配置 Nginx
  10. 第 9 步 - 访问 Supabase
  11. 第 10 步 - 启用 HTTP 身份验证
  12. 第 11 步 - 更新 Supabase
  13. 结论

Supabase 是一种开源的 Firebase 替代品,可为您提供开发应用程序所需的所有工具。 Supabase 提供 PostgreSQL 数据库、用户身份验证、存储和实时 API,并与流行的框架和工具集成,例如 Angular、Flutter、Next.js、React、Svelte 和 Vue。

有两种使用 Supabase 的方法。第一个选择是注册他们的云托管应用程序,该应用程序提供更多功能。第二种选择是使用 Docker 自托管代码。不过,关于自托管有一些注意事项。您不能创建或管理项目。此外,整个项目处于测试阶段,您应该使用自托管版本仅用于测试和本地开发。对于所有其他目的,您应该使用他们的云应用程序。

在本教程中,您将学习如何在基于 Debian 11 的服务器上安装 Supabase 并通过 Nginx 服务器代理它。

先决条件

  • A server running Debian 11 with a minimum of 2GB RAM.

  • A non-root user with sudo privileges.

  • A Domain name (supabase.example.com) pointing to the server.

  • Everything is updated.

    $ sudo apt update && sudo apt upgrade
    
  • Few packages that your system needs.

    $ sudo apt install nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring -y
    

    Some of these packages may already be installed on your system.

第 1 步 - 配置防火墙

第一步是配置防火墙。 Debian 带有 ufw(简单防火墙)。

检查防火墙是否正在运行。

$ sudo ufw status

您应该得到以下输出。

Status: inactive

允许 SSH 端口,以便防火墙在启用时不会中断当前连接。

$ sudo ufw allow OpenSSH

也允许 HTTP 和 HTTPS 端口。

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

启用防火墙

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

再次检查防火墙的状态。

$ sudo ufw status

您应该会看到类似的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

第 2 步 - 安装 Git

安装 Git。

$ sudo apt install git

确认安装。

$ git --version
git version 2.30.2

第 3 步 - 安装 Docker

要安装最新版本的 Docker,请添加 Dockers 官方 GPG 密钥。

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

安装官方 Docker 存储库。

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新 Debian 系统存储库。

$ sudo apt update

安装最新版本的 Docker。

$ sudo apt install docker-ce docker-ce-cli containerd.io

验证 Docker 是否正在运行。

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-03-21 03:19:09 UTC; 9s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 15816 (dockerd)
      Tasks: 7
     Memory: 27.9M
        CPU: 566ms
     CGroup: /system.slice/docker.service
             ??15816 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

默认情况下,Docker 需要 root 权限。如果您想避免每次运行 docker 命令时都使用 sudo,请将您的用户名添加到 docker 组。

$ sudo usermod -aG docker $(whoami)

您需要注销服务器并以同一用户身份重新登录才能启用此更改。

第 4 步 - 安装 Docker Compose

Docker Compose 的最新可用版本是 2.0.x,但出于兼容性原因,我们将安装较旧且稳定的 v1.29.2。

运行以下命令以下载 Docker Compose 的稳定版本。

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

对二进制文件应用可执行权限。

$ sudo chmod +x /usr/local/bin/docker-compose

下载并安装 Docker Composes bash 完成脚本。

$ sudo curl \
    -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
    -o /etc/bash_completion.d/docker-compose

运行以下命令以应用更改。

$ source ~/.bashrc

第 5 步 - 下载并配置 Supabase

克隆 Supabase Github 存储库。

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

--depth 1 参数对存储库进行浅层克隆,即它只提取最新的提交,而不是整个历史记录。这样做是为了提高性能。

切换到 docker 目录。

$ cd supabase/docker

从示例文件创建环境文件。

$ cp .env.example .env

打开新创建的文件进行编辑。

$ nano .env

使用强生成的唯一密码更改变量 POSTGRES_PASSWORD 的值。

$ POSTGRES_PASSWORD=<yourpostgresqlpwd>

生成另一个超过 32 个字符且没有特殊字符的唯一密码。用此密码替换 JWT_SECRET 的值。

JWT_SECRET=<your32pluscharacterspwd>

您可以使用 1password 等在线密码生成器来创建上述密码。

打开 Supabase 网站并输入你的 JWT_SECRET 以生成一个 ANON_KEY。将您的 JWT_SECRET 粘贴到指定的框中,从 Preconfigured Payload 下拉菜单中选择 ANON_KEY,然后单击 Generate JWT 按钮以生成令牌。

将此标记复制并粘贴到 .env 文件中作为 ANON_KEY 的值。

同样,通过切换预配置负载并按下生成 JWT 按钮,重复生成 SERVICE_KEY 的相同步骤。

复制生成的令牌并将其作为 SERVICE_KEY 的值粘贴到 .env 文件中。

通过配置以下变量来配置电子邮件 SMTP 设置。我们在教程中使用亚马逊的 SES 服务。


SMTP_HOST=email-smtp.us-west-2.amazonaws.com
SMTP_PORT=587
SMTP_USER=<your_amazon_ses_user>
SMTP_PASS=<your_amazon_ses_password>
SMTP_SENDER_NAME=SupabaseAdmin

配置站点 URL。

SITE_URL=https://supabase.example.com

配置公共 REST URL。

PUBLIC_REST_URL=https://supabase.example.com/rest/v1/

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

由于 Supabase 中普遍存在的错误,通过 SMTP 发送的身份验证邮件将有断开的链接。要解决此问题,请打开 docker-compose.yml 文件。

$ nano docker-compose.yml

在 GOTRUE_SITE_URL 变量正下方添加变量 API_EXTERNAL_URL 如下所示。

 GOTRUE_SITE_URL: ${SITE_URL}
 API_EXTERNAL_URL: ${SITE_URL}

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。每次升级 Supabase 安装时,此文件都会被覆盖。希望下次能修复该错误。您将需要手动添加此变量以确保电子邮件错误不会重复出现。

打开 volumes/api/kong.yml 文件进行编辑。

$ nano volumes/api/kong.yml

在 consumers 部分下,将 anon 用户密钥替换为之前生成的 ANON_KEY。

consumers:
  - username: anon
    keyauth_credentials:
      - key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE

此外,将 service_role 的密钥替换为上面生成的 SERVICE_KEY。

- username: service_role
    keyauth_credentials:
      - key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

第 6 步 - 安装 Supabase

使用以下命令运行 Supabase。这个过程需要一些时间。

$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -d

检查正在运行的容器的状态。

$ docker ps
CONTAINER ID   IMAGE                            COMMAND                   CREATED              STATUS                        PORTS                                                                                                                             NAMES
d25393873731   supabase/storage-api:v0.10.0     "/bin/sh -c \"./stora…"   About a minute ago   Up About a minute             5000/tcp                                                                                                                          supabase-storage
e6df7dcdd45b   supabase/gotrue:v2.5.21          "gotrue"                  About a minute ago   Up About a minute                                                                                                                                               supabase-auth
b3a758592d10   supabase/postgres-meta:v0.29.0   "postgres-meta"           About a minute ago   Up About a minute             0.0.0.0:5555->8080/tcp, :::5555->8080/tcp                                                                                         supabase-meta
cdb18c248f79   supabase/realtime:v0.21.0        "bash -c './prod/rel…"    About a minute ago   Up About a minute                                                                                                                                               supabase-realtime
71417337efae   postgrest/postgrest:v9.0.0       "/bin/postgrest"          About a minute ago   Up About a minute             3000/tcp                                                                                                                          supabase-rest
2d51af16bd1f   kong:2.1                         "/docker-entrypoint.…"    2 minutes ago        Up About a minute             0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 8001/tcp, 0.0.0.0:8443->8443/tcp, :::8443->8443/tcp, 8444/tcp                          supabase-kong
d6490380e4e8   supabase/postgres:14.1.0         "docker-entrypoint.s…"    2 minutes ago        Up About a minute             0.0.0.0:5432->5432/tcp, :::5432->5432/tcp
                                              supabase-db
40a49d1482fa   supabase/studio:latest           "docker-entrypoint.s…"    2 minutes ago        Up About a minute             0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                                                         supabase-studio
3cce50db9782   inbucket/inbucket:stable         "/start-inbucket.sh …"    2 minutes ago        Up About a minute (healthy)   0.0.0.0:1100->1100/tcp, :::1100->1100/tcp, 0.0.0.0:2500->2500/tcp, :::2500->2500/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   supabase-mail

第 7 步 - 安装 SSL

要使用 Lets Encrypt 安装 SSL 证书,我们需要安装 Certbot 工具。

为此,我们将使用 Snapd 包安装程序。由于大多数 Debian 服务器不附带它,请安装 Snapd 安装程序。

$ sudo apt install snapd

确保您的 Snapd 版本是最新的。

$ sudo snap install core && sudo snap refresh core

安装 Certbot。

$ sudo snap install --classic certbot

使用以下命令确保可以通过创建指向 /usr/bin 目录的符号链接来运行 Certbot 命令。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

验证安装。

$ certbot --version
certbot 1.25.0

生成 SSL 证书。

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d supabase.example.com

上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/supabase.example.com 目录。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

为 Lets Encrypt 自动更新创建一个挑战 webroot 目录。

$ sudo mkdir -p /var/lib/letsencrypt

创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新。为此,首先,创建文件 /etc/cron.daily/certbot-renew 并打开它进行编辑。

$ sudo nano /etc/cron.daily/certbot-renew

粘贴以下代码。

#!/bin/sh
certbot renew --cert-name supabase.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

更改任务文件的权限以使其可执行。

$ sudo chmod +x /etc/cron.daily/certbot-renew

第 8 步 - 安装和配置 Nginx

Debian 附带旧版本的 Nginx。您需要下载官方 Nginx 存储库以安装最新版本。

导入官方 Nginx 签名密钥。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

添加 Nginx 稳定版本的存储库。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

更新 Debian 存储库。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装。确保每次在 Debian 上运行 Nginx 命令时都使用 sudo。否则,它不会工作。

$ sudo nginx -v
nginx version: nginx/1.20.2

创建并打开文件 /etc/nginx/conf.d/supabase.conf 进行编辑。

$ sudo nano /etc/nginx/conf.d/supabase.conf

将以下代码粘贴到其中。

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
upstream supabase {
  	server localhost:3000;
}
upstream kong {
  	server localhost:8000;
}
# enforce HTTPS
server {
    listen       80; 
    listen 		[::]:80;
    server_name  supabase.example.com;
    return 301   https://$host$request_uri;
}
server {
    listen       443 ssl http2;
    listen 		[::]:443 ssl http2;
    server_name  supabase.example.com;

    access_log  /var/log/nginx/supabase.access.log;
    error_log   /var/log/nginx/supabase.error.log;
    
    gzip on;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/supabase.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/supabase.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/supabase.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;
    
    client_max_body_size 100m;
    
    # REST API
	location ~ ^/rest/v1/(.*)$ {
    	proxy_set_header Host $host;
	    proxy_pass http://kong;
	    proxy_redirect off;
  	}

	# Authentication
	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://supabase;
	    proxy_redirect off;
	    proxy_set_header Upgrade $http_upgrade;
  	}
}

完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

打开文件 /etc/nginx/nginx.conf 进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在行 include /etc/nginx/conf.d/*.conf; 之前添加以下行。

server_names_hash_bucket_size  64;

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

验证 Nginx 配置文件语法。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

启动 Nginx 服务以启用新配置。

$ sudo systemctl start nginx

第 9 步 - 访问 Supabase

您现在可以在网络浏览器中通过 URL https://supabase.example.com 访问 Supabase。

您无法创建新项目,但可以管理现有项目并配置数据库、存储和身份验证。

第 10 步 - 启用 HTTP 身份验证

Supabase 不提供用户管理,因此您需要保护您的 Supabase 安装。最简单的方法是使用 Nginx 服务器启用 HTTP 身份验证。

为 Nginx 安装 apache2-utils 包。

$ sudo apt install apache2-utils

为用户 supabase 创建一个密码文件。您可以选择任何您想要的用户名。它将提示您输入新密码。输入强密码以完成文件设置。

$ sudo htpasswd -c /etc/nginx/.htpasswd supabase
New password:
Re-type new password:
Adding password for user supabase

-c 标志告诉实用程序创建一个新文件。如果省略该文件,则需要指定现有文件的位置。

打开 /etc/nginx/conf.d/supabase.conf 进行编辑。

$ sudo nano /etc/nginx/conf.d/supabase.conf

在文件的以下部分中进行更改,如下所示。

# REST API
	location ~ ^/rest/v1/(.*)$ {
	    auth_basic off;
    	proxy_set_header Host $host;
	    proxy_pass http://kong;
	    proxy_redirect off;
  	}

	# Authentication
	location ~ ^/auth/v1/(.*)$ {
	    auth_basic off;
    	proxy_set_header Host $host;
	    proxy_pass http://kong;
	    proxy_redirect off;
  	}

	# Realtime
	location ~ ^/realtime/v1/(.*)$ {
	    auth_basic off;
    	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 / {
	    auth_basic “Supabase Studio Login”;
	    auth_basic_user_file /etc/nginx/.htpasswd;
    
    	proxy_set_header Host $host;
	    proxy_pass http://supabase;
	    proxy_redirect off;
	    proxy_set_header Upgrade $http_upgrade;
  	}

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

验证配置。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重启 Nginx 服务。

$ sudo systemctl restart nginx

下次打开 Supabase 时,您将看到以下登录屏幕。

第 11 步 - 更新 Supabase

Supabase 是一个不断完善的产品,并且会不断发生变化。如果将其用作自托管实例,则必须更新 Supabase 安装。

切换到 Supabase 目录。

$ cd ~/supabase

拉取最新的 Github 存储库。

$ git pull

在 docker/.env、docker/volumes/api/kong.yml 文件中查找任何需要重新配置的更改。

关闭并清理现有的 Docker 容器。

$ docker-compose down --remove-orphans

拉取最新的镜像。

$ docker-compose pull

再次启动容器。

$ docker-compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml up -d

结论

我们关于使用 Nginx 服务器作为反向代理在基于 Debian 11 的服务器上安装 Supabase 的教程到此结束。如果您有任何问题,请在下面的评论中发表。

©2015-2025 艾丽卡 support@alaica.com