Merge pull request #3810 from djsisson/update-supabase-add-supavisor
Update supabase add supavisor
This commit is contained in:
@@ -14,7 +14,7 @@ services:
|
||||
supabase-analytics:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- SERVICE_FQDN_SUPABASEKONG
|
||||
- SERVICE_FQDN_SUPABASEKONG_8000
|
||||
- JWT_SECRET=${SERVICE_PASSWORD_JWT}
|
||||
- KONG_DATABASE=off
|
||||
- KONG_DECLARATIVE_CONFIG=/home/kong/kong.yml
|
||||
@@ -278,7 +278,7 @@ services:
|
||||
config:
|
||||
hide_credentials: true
|
||||
supabase-studio:
|
||||
image: supabase/studio:20240729-ce42139
|
||||
image: supabase/studio:20240923-2e3e90c
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
@@ -301,7 +301,7 @@ services:
|
||||
- DEFAULT_ORGANIZATION_NAME=${STUDIO_DEFAULT_ORGANIZATION:-Default Organization}
|
||||
- DEFAULT_PROJECT_NAME=${STUDIO_DEFAULT_PROJECT:-Default Project}
|
||||
|
||||
- SUPABASE_URL=${SERVICE_FQDN_SUPABASEKONG}
|
||||
- 'SUPABASE_URL=http://supabase-kong:8000'
|
||||
- SUPABASE_PUBLIC_URL=${SERVICE_FQDN_SUPABASEKONG}
|
||||
- SUPABASE_ANON_KEY=${SERVICE_SUPABASEANON_KEY}
|
||||
- SUPABASE_SERVICE_KEY=${SERVICE_SUPABASESERVICE_KEY}
|
||||
@@ -309,6 +309,7 @@ services:
|
||||
|
||||
- LOGFLARE_API_KEY=${SERVICE_PASSWORD_LOGFLARE}
|
||||
- LOGFLARE_URL=http://supabase-analytics:4000
|
||||
- 'SUPABASE_PUBLIC_API=${SERVICE_FQDN_SUPABASEKONG}'
|
||||
- NEXT_PUBLIC_ENABLE_LOGS=true
|
||||
# Comment to use Big Query backend for analytics
|
||||
- NEXT_ANALYTICS_BACKEND_PROVIDER=postgres
|
||||
@@ -351,6 +352,21 @@ services:
|
||||
|
||||
create schema if not exists _realtime;
|
||||
alter schema _realtime owner to :pguser;
|
||||
- type: bind
|
||||
source: ./volumes/db/_supabase.sql
|
||||
target: /docker-entrypoint-initdb.d/migrations/97-_supabase.sql
|
||||
content: |
|
||||
\set pguser `echo "$POSTGRES_USER"`
|
||||
|
||||
CREATE DATABASE _supabase WITH OWNER :pguser;
|
||||
- type: bind
|
||||
source: ./volumes/db/pooler.sql
|
||||
target: /docker-entrypoint-initdb.d/migrations/99-pooler.sql
|
||||
content: |
|
||||
\set pguser `echo "supabase_admin"`
|
||||
\c _supabase
|
||||
create schema if not exists _supavisor;
|
||||
alter schema _supavisor owner to :pguser;
|
||||
- type: bind
|
||||
source: ./volumes/db/webhooks.sql
|
||||
target: /docker-entrypoint-initdb.d/init-scripts/98-webhooks.sql
|
||||
@@ -591,7 +607,7 @@ services:
|
||||
target: /docker-entrypoint-initdb.d/migrations/99-logs.sql
|
||||
content: |
|
||||
\set pguser `echo "supabase_admin"`
|
||||
|
||||
\c _supabase
|
||||
create schema if not exists _analytics;
|
||||
alter schema _analytics owner to :pguser;
|
||||
# Use named volume to persist pgsodium decryption key between restarts
|
||||
@@ -616,7 +632,7 @@ services:
|
||||
environment:
|
||||
- LOGFLARE_NODE_HOST=127.0.0.1
|
||||
- DB_USERNAME=supabase_admin
|
||||
- DB_DATABASE=${POSTGRES_DB:-postgres}
|
||||
- DB_DATABASE=_supabase
|
||||
- DB_HOSTNAME=${POSTGRES_HOSTNAME:-supabase-db}
|
||||
- DB_PORT=${POSTGRES_PORT:-5432}
|
||||
- DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
||||
@@ -628,7 +644,7 @@ services:
|
||||
- LOGFLARE_MIN_CLUSTER_SIZE=1
|
||||
|
||||
# Comment variables to use Big Query backend for analytics
|
||||
- POSTGRES_BACKEND_URL=postgresql://supabase_admin:${SERVICE_PASSWORD_POSTGRES}@${POSTGRES_HOSTNAME:-supabase-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-postgres}
|
||||
- POSTGRES_BACKEND_URL=postgresql://supabase_admin:${SERVICE_PASSWORD_POSTGRES}@${POSTGRES_HOSTNAME:-supabase-db}:${POSTGRES_PORT:-5432}/_supabase
|
||||
- POSTGRES_BACKEND_SCHEMA=_analytics
|
||||
- LOGFLARE_FEATURE_FLAG_OVERRIDE=multibackend=true
|
||||
|
||||
@@ -905,7 +921,7 @@ services:
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- PGRST_DB_URI=postgres://authenticator:${SERVICE_PASSWORD_POSTGRES}@${POSTGRES_HOSTNAME:-supabase-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-postgres}
|
||||
- PGRST_DB_SCHEMAS=${PGRST_DB_SCHEMAS:-public}
|
||||
- 'PGRST_DB_SCHEMAS=${PGRST_DB_SCHEMAS:-public,storage,graphql_public}'
|
||||
- PGRST_DB_ANON_ROLE=anon
|
||||
- PGRST_JWT_SECRET=${SERVICE_PASSWORD_JWT}
|
||||
- PGRST_DB_USE_LEGACY_GUCS=false
|
||||
@@ -914,7 +930,7 @@ services:
|
||||
command: "postgrest"
|
||||
exclude_from_hc: true
|
||||
supabase-auth:
|
||||
image: supabase/gotrue:v2.151.0
|
||||
image: supabase/gotrue:v2.158.1
|
||||
depends_on:
|
||||
supabase-db:
|
||||
# Disable this if you are using an external Postgres database
|
||||
@@ -1005,7 +1021,7 @@ services:
|
||||
|
||||
realtime-dev:
|
||||
# This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain
|
||||
image: supabase/realtime:v2.30.23
|
||||
image: supabase/realtime:v2.30.34
|
||||
container_name: realtime-dev.supabase-realtime
|
||||
depends_on:
|
||||
supabase-db:
|
||||
@@ -1085,7 +1101,7 @@ services:
|
||||
exit 0
|
||||
|
||||
supabase-storage:
|
||||
image: supabase/storage-api:v1.0.6
|
||||
image: supabase/storage-api:v1.10.1
|
||||
depends_on:
|
||||
supabase-db:
|
||||
# Disable this if you are using an external Postgres database
|
||||
@@ -1185,7 +1201,7 @@ services:
|
||||
- PG_META_DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
|
||||
|
||||
supabase-edge-functions:
|
||||
image: supabase/edge-runtime:v1.53.3
|
||||
image: supabase/edge-runtime:v1.58.3
|
||||
depends_on:
|
||||
supabase-analytics:
|
||||
condition: service_healthy
|
||||
@@ -1327,3 +1343,82 @@ services:
|
||||
- start
|
||||
- --main-service
|
||||
- /home/deno/functions/main
|
||||
|
||||
supabase-supavisor:
|
||||
image: 'supabase/supavisor:1.1.56'
|
||||
healthcheck:
|
||||
test:
|
||||
- CMD
|
||||
- curl
|
||||
- "-sSfL"
|
||||
- "-o"
|
||||
- /dev/null
|
||||
- "http://127.0.0.1:4000/api/health"
|
||||
timeout: 5s
|
||||
interval: 5s
|
||||
retries: 10
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
supabase-db:
|
||||
condition: service_healthy
|
||||
supabase-analytics:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- POOLER_TENANT_ID=dev_tenant
|
||||
- POOLER_POOL_MODE=transaction
|
||||
- POOLER_DEFAULT_POOL_SIZE=${POOLER_DEFAULT_POOL_SIZE:-20}
|
||||
- POOLER_MAX_CLIENT_CONN=${POOLER_MAX_CLIENT_CONN:-100}
|
||||
- PORT=4000
|
||||
- 'POSTGRES_PORT=${POSTGRES_PORT:-5432}'
|
||||
- 'POSTGRES_HOSTNAME=${POSTGRES_HOSTNAME:-supabase-db}'
|
||||
- 'POSTGRES_DB=${POSTGRES_DB:-postgres}'
|
||||
- 'POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}'
|
||||
- 'DATABASE_URL=ecto://supabase_admin:${SERVICE_PASSWORD_POSTGRES}@${POSTGRES_HOSTNAME:-supabase-db}:${POSTGRES_PORT:-5432}/_supabase'
|
||||
- CLUSTER_POSTGRES=true
|
||||
- 'SECRET_KEY_BASE=${SERVICE_PASSWORD_SUPAVISORSECRET}'
|
||||
- 'VAULT_ENC_KEY=${SERVICE_PASSWORD_VAULTENC}'
|
||||
- 'API_JWT_SECRET=${SERVICE_PASSWORD_JWT}'
|
||||
- 'METRICS_JWT_SECRET=${SERVICE_PASSWORD_JWT}'
|
||||
- REGION=local
|
||||
- 'ERL_AFLAGS=-proto_dist inet_tcp'
|
||||
command:
|
||||
- /bin/sh
|
||||
- "-c"
|
||||
- '/app/bin/migrate && /app/bin/supavisor eval "$$(cat /etc/pooler/pooler.exs)" && /app/bin/server'
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ./volumes/pooler/pooler.exs
|
||||
target: /etc/pooler/pooler.exs
|
||||
content: |
|
||||
{:ok, _} = Application.ensure_all_started(:supavisor)
|
||||
{:ok, version} =
|
||||
case Supavisor.Repo.query!("select version()") do
|
||||
%{rows: [[ver]]} -> Supavisor.Helpers.parse_pg_version(ver)
|
||||
_ -> nil
|
||||
end
|
||||
params = %{
|
||||
"external_id" => System.get_env("POOLER_TENANT_ID"),
|
||||
"db_host" => System.get_env("POSTGRES_HOSTNAME"),
|
||||
"db_port" => System.get_env("POSTGRES_PORT") |> String.to_integer(),
|
||||
"db_database" => System.get_env("POSTGRES_DB"),
|
||||
"require_user" => false,
|
||||
"auth_query" => "SELECT * FROM pgbouncer.get_auth($1)",
|
||||
"default_max_clients" => System.get_env("POOLER_MAX_CLIENT_CONN"),
|
||||
"default_pool_size" => System.get_env("POOLER_DEFAULT_POOL_SIZE"),
|
||||
"default_parameter_status" => %{"server_version" => version},
|
||||
"users" => [%{
|
||||
"db_user" => "pgbouncer",
|
||||
"db_password" => System.get_env("POSTGRES_PASSWORD"),
|
||||
"mode_type" => System.get_env("POOLER_POOL_MODE"),
|
||||
"pool_size" => System.get_env("POOLER_DEFAULT_POOL_SIZE"),
|
||||
"is_manager" => true
|
||||
}]
|
||||
}
|
||||
|
||||
tenant = Supavisor.Tenants.get_tenant_by_external_id(params["external_id"])
|
||||
|
||||
if tenant do
|
||||
{:ok, _} = Supavisor.Tenants.update_tenant(tenant, params)
|
||||
else
|
||||
{:ok, _} = Supavisor.Tenants.create_tenant(params)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user