myos override for stack supabase

This commit is contained in:
2025-02-02 21:17:42 +01:00
parent fb2f7e67dc
commit 7fbfc6aba6
22 changed files with 1332 additions and 1 deletions
+73
View File
@@ -0,0 +1,73 @@
DOCKER_SOCKET_LOCATION=/var/run/docker.sock
SUPABASE_DASHBOARD_PASSWORD=$(head -c11 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
SUPABASE_JWT_IAT=${SUPABASE_JWT_IAT}
SUPABASE_JWT_EXP=${SUPABASE_JWT_EXP}
# JWT_SECRET: 40 chars
SUPABASE_JWT_SECRET=$(head -c30 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
SUPABASE_LOGFLARE_API_KEY=$(head -c42 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
# DB_ENC_KEY: 16 chars
SUPABASE_POSTGRES_DB_ENC_KEY=$(head -c12 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
SUPABASE_POSTGRES_PASSWORD=$(head -c42 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
# SECRET_KEY_BASE: 64 chars
SUPABASE_SECRET_KEY_BASE=$(head -c48 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
# VAULT_ENC_KEY: 32 chars
SUPABASE_VAULT_ENC_KEY=$(head -c24 /dev/random |base64 |sed 's/+/-/g;s/\//_/g;s/=*$//;')
## General
# SUPABASE_SITE_URL=http://localhost:3000
# SUPABASE_ADDITIONAL_REDIRECT_URLS=
# SUPABASE_JWT_EXPIRY=3600
# SUPABASE_DISABLE_SIGNUP=false
# SUPABASE_API_EXTERNAL_URL=http://kong:8000
# SUPABASE_POSTGRES_HOST=supabase-db
# SUPABASE_POSTGRES_DB=postgres
# SUPABASE_POSTGRES_PORT=5432
# SUPABASE_POSTGRES_USER=postgres
# SUPABASE_POSTGRES_PORT=5432
# SUPABASE_POOLER_PROXY_PORT_TRANSACTION=6543
# SUPABASE_POOLER_DEFAULT_POOL_SIZE=20
# SUPABASE_POOLER_MAX_CLIENT_CONN=100
# SUPABASE_POOLER_TENANT_ID=your-tenant-id
# SUPABASE_KONG_HTTP_PORT=8000
# SUPABASE_KONG_HTTPS_PORT=8443
## API - Configuration for PostgREST.
# SUPABASE_PGRST_DB_SCHEMAS=public,storage,graphql_public
## Auth - Configuration for the GoTrue authentication server.
# SUPABASE_GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_URI=pg-functions://postgres/public/mfa_verification_attempt
# SUPABASE_GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_SECRETS=<standard-base64-secret>
# SUPABASE_GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_URI=pg-functions://postgres/public/mfa_verification_attempt
# SUPABASE_GOTRUE_HOOK_SEND_SMS_URI=pg-functions://postgres/public/custom_access_token_hook
# SUPABASE_GOTRUE_HOOK_SEND_SMS_SECRETS=v1,whsec_VGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2hvcnRlciBCYXNlNjQgc3RyaW5n
# SUPABASE_GOTRUE_HOOK_SEND_EMAIL_URI=http://host.docker.internal:54321/functions/v1/email_sender
# SUPABASE_GOTRUE_HOOK_SEND_EMAIL_SECRETS=v1,whsec_VGhpcyBpcyBhbiBleGFtcGxlIG9mIGEgc2hvcnRlciBCYXNlNjQgc3RyaW5n
## Mailer Config
# SUPABASE_MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify"
# SUPABASE_MAILER_URLPATHS_INVITE="/auth/v1/verify"
# SUPABASE_MAILER_URLPATHS_RECOVERY="/auth/v1/verify"
# SUPABASE_MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify"
## Email auth
# SUPABASE_ENABLE_EMAIL_SIGNUP=true
# SUPABASE_ENABLE_EMAIL_AUTOCONFIRM=false
# SUPABASE_SMTP_ADMIN_EMAIL=admin@${DOMAINNAME}
# SUPABASE_SMTP_HOST=mail
# SUPABASE_SMTP_PORT=25
# SUPABASE_SMTP_USER=
# SUPABASE_SMTP_PASS=
# SUPABASE_SMTP_SENDER_NAME=supabase@${DOMAINNAME}
# SUPABASE_ENABLE_ANONYMOUS_USERS=false
## Phone auth
# SUPABASE_ENABLE_PHONE_SIGNUP=true
# SUPABASE_ENABLE_PHONE_AUTOCONFIRM=true
## Studio - Configuration for the Dashboard
# SUPABASE_STUDIO_DEFAULT_ORGANIZATION=Default Organization
# SUPABASE_STUDIO_DEFAULT_PROJECT=Default Project
## replace if you intend to use Studio outside of localhost
# SUPABASE_PUBLIC_URL=http://localhost:8000
## Enable webp support
# SUPABASE_IMGPROXY_ENABLE_WEBP_DETECTION=true
## Add your OpenAI API key to enable SQL Editor Assistant
# SUPABASE_OPENAI_API_KEY=
## Functions - Configuration for Functions
# SUPABASE_FUNCTIONS_VERIFY_JWT=false
# SUPABASE_GOOGLE_PROJECT_ID=
# SUPABASE_GOOGLE_PROJECT_NUMBER=
+1 -1
View File
@@ -436,7 +436,7 @@ services:
retries: 3
volumes:
- ./volumes/logs/vector.yml:/etc/vector/vector.yml:ro
- ${DOCKER_SOCKET_LOCATION}:/var/run/docker.sock:ro
- ${DOCKER_SOCKET_LOCATION:-/var/run/docker.sock}:/var/run/docker.sock:ro
environment:
LOGFLARE_API_KEY: ${LOGFLARE_API_KEY}
command: [ "--config", "/etc/vector/vector.yml" ]
+61
View File
@@ -0,0 +1,61 @@
services:
analytics:
labels:
- SERVICE_4000_CHECK_HTTP=/health
- SERVICE_4000_NAME=${COMPOSE_SERVICE_NAME}-analytics-4000
auth:
labels:
- SERVICE_9999_CHECK_HTTP=/health
- SERVICE_9999_NAME=${COMPOSE_SERVICE_NAME}-auth-9999
db:
labels:
- SERVICE_5432_CHECK_TCP=true
- SERVICE_5432_NAME=${COMPOSE_SERVICE_NAME}-db-5432
functions:
labels:
- SERVICE_9000_CHECK_HTTP=/functions/v1/hello
- SERVICE_9000_NAME=${COMPOSE_SERVICE_NAME}-functions-9000
imgproxy:
labels:
- SERVICE_5001_CHECK_HTTP=/health
- SERVICE_5001_NAME=${COMPOSE_SERVICE_NAME}-imgproxy-5001
- SERVICE_8080_IGNORE=true
kong:
labels:
- SERVICE_8000_CHECK_TCP=true
- SERVICE_8000_NAME=${COMPOSE_SERVICE_NAME}-kong-8000
- SERVICE_8000_TAGS=${SUPABASE_KONG_SERVICE_8000_TAGS:-urlprefix-supabase.localhost/*}
- SERVICE_8001_IGNORE=true
- SERVICE_8443_IGNORE=true
- SERVICE_8444_IGNORE=true
meta:
labels:
- SERVICE_8080_CHECK_HTTP=/
- SERVICE_8080_NAME=${COMPOSE_SERVICE_NAME}-meta-8080
rest:
labels:
- SERVICE_3000_CHECK_HTTP=/
- SERVICE_3000_NAME=${COMPOSE_SERVICE_NAME}-rest-3000
realtime:
labels:
- SERVICE_4000_CHECK_HTTP=/
- SERVICE_4000_NAME=${COMPOSE_SERVICE_NAME}-realtime-4000
storage:
labels:
- SERVICE_5000_CHECK_HTTP=/status
- SERVICE_5000_NAME=${COMPOSE_SERVICE_NAME}-storage-5000
studio:
labels:
- SERVICE_3000_CHECK_HTTP=/api/profile
- SERVICE_3000_NAME=${COMPOSE_SERVICE_NAME}-studio-3000
supavisor:
labels:
- SERVICE_4000_CHECK_HTTP=/api/health
- SERVICE_4000_NAME=${COMPOSE_SERVICE_NAME}-supavisor-4000
- SERVICE_5432_IGNORE=true
- SERVICE_6543_IGNORE=true
vector:
labels:
- SERVICE_9001_CHECK_HTTP=/health
- SERVICE_9001_NAME=${COMPOSE_SERVICE_NAME}-vector-9001
+9
View File
@@ -0,0 +1,9 @@
services:
supavisor:
ports:
- ${SUPABASE_POSTGRES_PORT:-5432}:5432/tcp
- ${SUPABASE_POOLER_PROXY_PORT_TRANSACTION:-6543}:6543/tcp
kong:
ports:
- ${SUPABASE_KONG_HTTP_PORT:-8000}:8000/tcp
- ${SUPABASE_KONG_HTTPS_PORT:-8443}:8443/tcp
+19
View File
@@ -0,0 +1,19 @@
ENV_VARS += SUPABASE_ADDITIONAL_REDIRECT_URLS SUPABASE_ANON_KEY SUPABASE_JWT_IAT SUPABASE_JWT_EXP SUPABASE_KONG_SERVICE_8000_TAGS SUPABASE_PUBLIC_URL SUPABASE_REALTIME_TENANT SUPABASE_SERVICE_ROLE_KEY SUPABASE_EDGE_RUNTIME_VERSION SUPABASE_KONG_VERSION SUPABASE_POSTGRES_VERSION SUPABASE_VECTOR_VERSION
SUPABASE_ADDITIONAL_REDIRECT_URLS ?= $(subst $(space),$(comma),$(call url,SUPABASE))
SUPABASE_ANON_KEY ?= $(call JWT,,$(SUPABASE_JWT_PAYLOAD_ANON),$(SUPABASE_JWT_SECRET))
SUPABASE_DOCKER_IMAGES ?= supabase/edge-runtime:$(SUPABASE_EDGE_RUNTIME_VERSION) kong:$(SUPABASE_KONG_VERSION) supabase/postgres:$(SUPABASE_POSTGRES_VERSION) timberio/vector:$(SUPABASE_VECTOR_VERSION)
SUPABASE_JWT_IAT ?= $(MAKE_UNIXTIME_START)
SUPABASE_JWT_EXP ?= $(shell echo $$(($(SUPABASE_JWT_IAT)+94608000)))
SUPABASE_JWT_PAYLOAD_ANON ?= {\n "role": "anon",\n "iss": "supabase",\n "iat": $(SUPABASE_JWT_IAT),\n "exp": $(SUPABASE_JWT_EXP)\n}
SUPABASE_JWT_PAYLOAD_SERVICE ?= {\n "role": "service_role",\n "iss": "supabase",\n "iat": $(SUPABASE_JWT_IAT),\n "exp": $(SUPABASE_JWT_EXP)\n}
SUPABASE_KONG_SERVICE_8000_TAGS ?= $(call tagprefix,SUPABASE,8000)
SUPABASE_PUBLIC_URL ?= $(SUPABASE_SERVICE_URL)
SUPABASE_REALTIME_TENANT ?= realtime-dev
SUPABASE_SERVICE_NAME ?= supabase
SUPABASE_SERVICE_ROLE_KEY ?= $(call JWT,,$(SUPABASE_JWT_PAYLOAD_SERVICE),$(SUPABASE_JWT_SECRET))
SUPABASE_SERVICE_URIS ?= $(call uri,SUPABASE)
SUPABASE_SERVICE_URL ?= $(call firstword,$(call url,SUPABASE))
SUPABASE_EDGE_RUNTIME_VERSION ?= $(shell awk -F: '/image: supabase\/edge-runtime:/ {print $$3}' stack/supabase/docker-compose.yml)
SUPABASE_KONG_VERSION ?= $(shell awk -F: '/image: kong:/ {print $$3}' stack/supabase/docker-compose.yml)
SUPABASE_POSTGRES_VERSION ?= $(shell awk -F: '/image: supabase\/postgres:/ {print $$3}' stack/supabase/docker-compose.yml)
SUPABASE_VECTOR_VERSION ?= $(shell awk -F: '/image: timberio\/vector:/ {print $$3}' stack/supabase/docker-compose.yml)
+31
View File
@@ -0,0 +1,31 @@
services:
db:
volumes: !override
- db-data:/var/lib/postgresql/data
- db-config:/etc/postgres-custom
functions:
volumes: !override
- functions-cache:/root/.cache
- functions-home:/home/deno/functions
imgproxy:
volumes: !override
- storage-data:/var/lib/storage
kong:
volumes: !override
- kong-home:/home/kong
storage:
volumes: !override
- storage-data:/var/lib/storage
vector:
volumes: !override
- vector-config:/etc/vector:ro
- ${DOCKER_SOCKET_LOCATION:-/var/run/docker.sock}:/var/run/docker.sock:ro
volumes:
db-config:
db-data:
functions-cache:
functions-home:
kong-home:
storage-data:
vector-config:
+272
View File
@@ -0,0 +1,272 @@
services:
studio:
container_name: !reset null
environment: !override
STUDIO_PG_META_URL: ${SUPABASE_STUDIO_PG_META_URL:-http://meta:8080}
POSTGRES_PASSWORD: ${SUPABASE_POSTGRES_PASSWORD}
DEFAULT_ORGANIZATION_NAME: ${SUPABASE_STUDIO_DEFAULT_ORGANIZATION:-Default Organization}
DEFAULT_PROJECT_NAME: ${SUPABASE_STUDIO_DEFAULT_PROJECT:-Default Project}
OPENAI_API_KEY: ${SUPABASE_OPENAI_API_KEY:-}
SUPABASE_URL: ${SUPABASE_URL:-http://kong:8000}
SUPABASE_PUBLIC_URL: ${SUPABASE_PUBLIC_URL:-http://localhost:8000}
SUPABASE_ANON_KEY: ${SUPABASE_ANON_KEY}
SUPABASE_SERVICE_KEY: ${SUPABASE_SERVICE_ROLE_KEY}
AUTH_JWT_SECRET: ${SUPABASE_JWT_SECRET}
LOGFLARE_API_KEY: ${SUPABASE_LOGFLARE_API_KEY}
LOGFLARE_URL: ${SUPABASE_LOGFLARE_URL:-http://analytics:4000}
NEXT_PUBLIC_ENABLE_LOGS: ${SUPABASE_NEXT_PUBLIC_ENABLE_LOGS:-true}
NEXT_ANALYTICS_BACKEND_PROVIDER: ${SUPABASE_NEXT_ANALYTICS_BACKEND_PROVIDER:-postgres}
kong:
build:
args:
- DOCKER_BUILD_DIR=docker/supabase/kong
- DOCKER_NETWORK=${DOCKER_NETWORK_DEFAULT:-_default}
- REALTIME_TENANT=${SUPABASE_REALTIME_TENANT:-realtime-dev}
- SUPABASE_KONG_VERSION=${SUPABASE_KONG_VERSION:-2.8.1}
context: ../..
dockerfile: docker/supabase/kong/Dockerfile
container_name: !reset null
image: ${DOCKER_REPOSITORY}/kong:${DOCKER_IMAGE_TAG}
environment: !override
KONG_DATABASE: ${SUPABASE_KONG_DATABASE:-off}
KONG_DECLARATIVE_CONFIG: ${SUPABASE_KONG_DECLARATIVE_CONFIG:-/home/kong/kong.yml}
KONG_DNS_ORDER: ${SUPABASE_KONG_DNS_ORDER:-LAST,A,CNAME}
KONG_PLUGINS: ${SUPABASE_KONG_PLUGINS:-request-transformer,cors,key-auth,acl,basic-auth}
KONG_NGINX_PROXY_PROXY_BUFFER_SIZE: ${SUPABASE_KONG_NGINX_PROXY_PROXY_BUFFER_SIZE:-160k}
KONG_NGINX_PROXY_PROXY_BUFFERS: ${SUPABASE_KONG_NGINX_PROXY_PROXY_BUFFERS:-64 160k}
SUPABASE_ANON_KEY: ${SUPABASE_ANON_KEY}
SUPABASE_SERVICE_KEY: ${SUPABASE_SERVICE_ROLE_KEY}
DASHBOARD_USERNAME: ${SUPABASE_DASHBOARD_USERNAME:-supabase}
DASHBOARD_PASSWORD: ${SUPABASE_DASHBOARD_PASSWORD}
ports: !override
- 8000/tcp
- 8443/tcp
auth:
container_name: !reset null
environment: !override
GOTRUE_API_HOST: ${SUPABASE_GOTRUE_API_HOST:-0.0.0.0}
GOTRUE_API_PORT: ${SUPABASE_GOTRUE_API_PORT:-9999}
API_EXTERNAL_URL: ${SUPABASE_API_EXTERNAL_URL:-${SUPABASE_PUBLIC_URL:-http://localhost:8000}}
GOTRUE_DB_DRIVER: ${SUPABASE_GOTRUE_DB_DRIVER:-postgres}
GOTRUE_DB_DATABASE_URL: postgres://${SUPABASE_POSTGRES_USER_AUTH:-supabase_auth_admin}:${SUPABASE_POSTGRES_PASSWORD_AUTH:-${SUPABASE_POSTGRES_PASSWORD}}@${SUPABASE_POSTGRES_HOST:-db}:${SUPABASE_POSTGRES_PORT:-5432}/${SUPABASE_POSTGRES_DB:-postgres}
GOTRUE_SITE_URL: ${SUPABASE_SITE_URL:-${SUPABASE_PUBLIC_URL:-http://localhost:3000}}
GOTRUE_URI_ALLOW_LIST: ${SUPABASE_ADDITIONAL_REDIRECT_URLS:-}
GOTRUE_DISABLE_SIGNUP: ${SUPABASE_DISABLE_SIGNUP:-false}
GOTRUE_JWT_ADMIN_ROLES: ${SUPABASE_JWT_ADMIN_ROLES:-service_role}
GOTRUE_JWT_AUD: ${SUPABASE_JWT_AUD:-authenticated}
GOTRUE_JWT_DEFAULT_GROUP_NAME: ${SUPABASE_JWT_DEFAULT_GROUP_NAME:-authenticated}
GOTRUE_JWT_EXP: ${SUPABASE_JWT_EXPIRY:-3600}
GOTRUE_JWT_SECRET: ${SUPABASE_JWT_SECRET}
GOTRUE_EXTERNAL_EMAIL_ENABLED: ${SUPABASE_ENABLE_EMAIL_SIGNUP:-true}
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED: ${SUPABASE_ENABLE_ANONYMOUS_USERS:-false}
GOTRUE_MAILER_AUTOCONFIRM: ${SUPABASE_ENABLE_EMAIL_AUTOCONFIRM:-false}
GOTRUE_EXTERNAL_SKIP_NONCE_CHECK: ${SUPABASE_EXTERNAL_SKIP_NONCE_CHECK:-false}
GOTRUE_MAILER_SECURE_EMAIL_CHANGE_ENABLED: ${SUPABASE_MAILER_SECURE_EMAIL_CHANGE_ENABLED:-true}
GOTRUE_SMTP_MAX_FREQUENCY: ${SUPABASE_SMTP_MAX_FREQUENCY:-1s}
GOTRUE_SMTP_ADMIN_EMAIL: ${SUPABASE_SMTP_ADMIN_EMAIL:-}
GOTRUE_SMTP_HOST: ${SUPABASE_SMTP_HOST:-}
GOTRUE_SMTP_PORT: ${SUPABASE_SMTP_PORT:-25}
GOTRUE_SMTP_USER: ${SUPABASE_SMTP_USER:-}
GOTRUE_SMTP_PASS: ${SUPABASE_SMTP_PASS:-}
GOTRUE_SMTP_SENDER_NAME: ${SUPABASE_SMTP_SENDER_NAME:-}
GOTRUE_MAILER_URLPATHS_INVITE: ${SUPABASE_MAILER_URLPATHS_INVITE:-/auth/v1/verify}
GOTRUE_MAILER_URLPATHS_CONFIRMATION: ${SUPABASE_MAILER_URLPATHS_CONFIRMATION:-/auth/v1/verify}
GOTRUE_MAILER_URLPATHS_RECOVERY: ${SUPABASE_MAILER_URLPATHS_RECOVERY:-/auth/v1/verify}
GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE: ${SUPABASE_MAILER_URLPATHS_EMAIL_CHANGE:-/auth/v1/verify}
GOTRUE_EXTERNAL_PHONE_ENABLED: ${SUPABASE_ENABLE_PHONE_SIGNUP:-true}
GOTRUE_SMS_AUTOCONFIRM: ${SUPABASE_ENABLE_PHONE_AUTOCONFIRM:-true}
GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: ${SUPABASE_GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_ENABLED:-false}
GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_URI: ${SUPABASE_GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_URI:-}
GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_SECRETS: ${SUPABASE_GOTRUE_HOOK_CUSTOM_ACCESS_TOKEN_SECRETS:-}
GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED: ${SUPABASE_GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED:-false}
GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_URI: ${SUPABASE_GOTRUE_HOOK_MFA_VERIFICATION_ATTEMPT_URI:-}
GOTRUE_HOOK_SEND_SMS_ENABLED: ${SUPABASE_GOTRUE_HOOK_SEND_SMS_ENABLED:-false}
GOTRUE_HOOK_SEND_SMS_URI: ${SUPABASE_GOTRUE_HOOK_SEND_SMS_URI:-}
GOTRUE_HOOK_SEND_SMS_SECRETS: ${SUPABASE_GOTRUE_HOOK_SEND_SMS_SECRETS:-}
GOTRUE_HOOK_SEND_EMAIL_ENABLED: ${SUPABASE_GOTRUE_HOOK_SEND_EMAIL_ENABLED:-false}
GOTRUE_HOOK_SEND_EMAIL_URI: ${SUPABASE_GOTRUE_HOOK_SEND_EMAIL_URI:-}
GOTRUE_HOOK_SEND_EMAIL_SECRETS: ${SUPABASE_GOTRUE_HOOK_SEND_EMAIL_SECRETS:-}
rest:
container_name: !reset null
environment: !override
PGRST_DB_URI: postgres://${SUPABASE_POSTGRES_USER_REST:-authenticator}:${SUPABASE_POSTGRES_PASSWORD_REST:-${SUPABASE_POSTGRES_PASSWORD}}@${SUPABASE_POSTGRES_HOST:-db}:${SUPABASE_POSTGRES_PORT:-5432}/${SUPABASE_POSTGRES_DB:-postgres}
PGRST_DB_SCHEMAS: ${SUPABASE_PGRST_DB_SCHEMAS:-public,storage,graphql_public}
PGRST_DB_ANON_ROLE: ${SUPABASE_PGRST_DB_ANON_ROLE:-anon}
PGRST_JWT_SECRET: ${SUPABASE_JWT_SECRET}
PGRST_DB_USE_LEGACY_GUCS: ${SUPABASE_PGRST_DB_USE_LEGACY_GUCS:-false}
PGRST_APP_SETTINGS_JWT_SECRET: ${SUPABASE_JWT_SECRET}
PGRST_APP_SETTINGS_JWT_EXP: ${SUPABASE_JWT_EXPIRY:-3600}
realtime:
container_name: !reset null
environment: !override
PORT: ${SUPABASE_REALTIME_PORT:-4000}
DB_HOST: ${SUPABASE_POSTGRES_HOST:-db}
DB_PORT: ${SUPABASE_POSTGRES_PORT:-5432}
DB_USER: ${SUPABASE_POSTGRES_USER_SUPABASE:-supabase_admin}
DB_PASSWORD: ${SUPABASE_POSTGRES_PASSWORD_SUPABASE:-${SUPABASE_POSTGRES_PASSWORD}}
DB_NAME: ${SUPABASE_POSTGRES_DB:-postgres}
DB_AFTER_CONNECT_QUERY: ${SUPABASE_POSTGRES_DB_AFTER_CONNECT_QUERY:-SET search_path TO _realtime}
DB_ENC_KEY: ${SUPABASE_POSTGRES_DB_ENC_KEY:-supabaserealtime}
API_JWT_SECRET: ${SUPABASE_JWT_SECRET}
SECRET_KEY_BASE: ${SUPABASE_SECRET_KEY_BASE}
ERL_AFLAGS: ${SUPABASE_REALTIME_ERL_AFLAGS:--proto_dist inet_tcp}
DNS_NODES: ${SUPABASE_REALTIME_DNS_NODES:-''}
RLIMIT_NOFILE: ${SUPABASE_REALTIME_RLIMIT_NOFILE:-10000}
APP_NAME: ${SUPABE_REALTIME_APP_NAME:-realtime}
SEED_SELF_HOST: ${SUPABASE_REALTIME_SEED_SELF_HOST:-true}
RUN_JANITOR: ${SUPABASE_REALTIME_RUN_JANITOR:-true}
SELF_HOST_TENANT_NAME: ${SUPABASE_REALTIME_TENANT:-realtime-dev}
MIX_ENV: ${SUPABASE_REALTIME_MIX_ENV:-prod}
healthcheck:
test:
[
"CMD",
"curl",
"-sSfL",
"--head",
"-o",
"/dev/null",
"-H",
"Authorization: Bearer ${SUPABASE_ANON_KEY}",
"http://localhost:4000/api/tenants/${SUPABASE_REALTIME_TENANT:-realtime-dev}/health"
]
timeout: 5s
interval: 5s
retries: 3
networks:
default:
aliases:
- ${SUPABASE_REALTIME_TENANT:-realtime-dev}
storage:
container_name: !reset null
environment: !override
ANON_KEY: ${SUPABASE_ANON_KEY}
SERVICE_KEY: ${SUPABASE_SERVICE_ROLE_KEY}
POSTGREST_URL: ${SUPABASE_POSTGREST_URL:-http://rest:3000}
PGRST_JWT_SECRET: ${SUPABASE_JWT_SECRET}
DATABASE_URL: postgres://${SUPABASE_POSTGRES_USER_STORAGE:-supabase_storage_admin}:${SUPABASE_POSTGRES_PASSWORD_STORAGE:-${SUPABASE_POSTGRES_PASSWORD}}@${SUPABASE_POSTGRES_HOST:-db}:${SUPABASE_POSTGRES_PORT:-5432}/${SUPABASE_POSTGRES_DB:-postgres}
FILE_SIZE_LIMIT: ${SUPABASE_STORAGE_FILE_SIZE_LIMIT:-52428800}
STORAGE_BACKEND: ${SUPABASE_STORAGE_BACKEND:-file}
FILE_STORAGE_BACKEND_PATH: ${SUPABASE_FILE_STORAGE_BACKEND_PATH:-/var/lib/storage}
TENANT_ID: ${SUPABASE_STORAGE_TENANT_ID:-stub}
REGION: ${SUPABASE_STORAGE_REGION:-stub}
GLOBAL_S3_BUCKET: ${SUPABASE_STORAGE_GLOBAL_S3_BUCKET:-stub}
ENABLE_IMAGE_TRANSFORMATION: ${SUPABASE_STORAGE_ENABLE_IMAGE_TRANSFORMATION:-true}
IMGPROXY_URL: ${SUPABASE_IMGPROXY_URL:-http://imgproxy:5001}
imgproxy:
container_name: !reset null
environment: !override
IMGPROXY_BIND: ${SUPABASE_IMGPROXY_BIND:-:5001}
IMGPROXY_LOCAL_FILESYSTEM_ROOT: ${SUPABASE_IMGPROXY_LOCAL_FILESYSTEM_ROOT:-/}
IMGPROXY_USE_ETAG: ${SUPABASE_IMGPROXY_USE_ETAG:-true}
IMGPROXY_ENABLE_WEBP_DETECTION: ${SUPABASE_IMGPROXY_ENABLE_WEBP_DETECTION:-true}
meta:
container_name: !reset null
environment: !override
PG_META_PORT: ${SUPABASE_META_PORT:-8080}
PG_META_DB_HOST: ${SUPABASE_POSTGRES_HOST:-db}
PG_META_DB_PORT: ${SUPABASE_POSTGRES_PORT:-5432}
PG_META_DB_NAME: ${SUPABASE_POSTGRES_DB:-postgres}
PG_META_DB_USER: ${SUPABASE_POSTGRES_USER_SUPABASE:-supabase_admin}
PG_META_DB_PASSWORD: ${SUPABASE_POSTGRES_PASSWORD_SUPABASE:-${SUPABASE_POSTGRES_PASSWORD}}
functions:
build:
args:
- DOCKER_BUILD_DIR=docker/supabase/edge-runtime
- SUPABASE_EDGE_RUNTIME_VERSION=${SUPABASE_EDGE_RUNTIME_VERSION:-v1.65.3}
context: ../..
dockerfile: docker/supabase/edge-runtime/Dockerfile
container_name: !reset null
image: ${DOCKER_REPOSITORY}/edge-runtime:${DOCKER_IMAGE_TAG}
environment: !override
JWT_SECRET: ${SUPABASE_JWT_SECRET}
SUPABASE_URL: ${SUPABASE_URL:-http://kong:8000}
SUPABASE_ANON_KEY: ${SUPABASE_ANON_KEY}
SUPABASE_SERVICE_ROLE_KEY: ${SUPABASE_SERVICE_ROLE_KEY}
SUPABASE_DB_URL: postgresql://${SUPABASE_POSTGRES_USER:-postgres}:${SUPABASE_POSTGRES_PASSWORD}@${SUPABASE_POSTGRES_HOST:-db}:${SUPABASE_POSTGRES_PORT:-5432}/${SUPABASE_POSTGRES_DB:-postgres}
VERIFY_JWT: "${SUPABASE_FUNCTIONS_VERIFY_JWT}"
analytics:
container_name: !reset null
environment: !override
LOGFLARE_NODE_HOST: ${SUPABASE_LOGFLARE_NODE_HOST:-127.0.0.1}
DB_USERNAME: ${SUPABASE_POSTGRES_USER_SUPABASE:-supabase_admin}
DB_DATABASE: ${SUPABASE_POSTGRES_DB_SUPABASE:-_supabase}
DB_HOSTNAME: ${SUPABASE_POSTGRES_HOST:-db}
DB_PORT: ${SUPABASE_POSTGRES_PORT:-5432}
DB_PASSWORD: ${SUPABASE_POSTGRES_PASSWORD_SUPABASE:-${SUPABASE_POSTGRES_PASSWORD}}
DB_SCHEMA: ${SUPABASE_POSTGRES_SCHEMA_SUPABASE:-_analytics}
LOGFLARE_API_KEY: ${SUPABASE_LOGFLARE_API_KEY}
LOGFLARE_SINGLE_TENANT: ${SUPABASE_LOGFLARE_SINGLE_TENANT:-true}
LOGFLARE_SUPABASE_MODE: ${SUPABASE_LOGFLARE_SUPABASE_MODE:-true}
LOGFLARE_MIN_CLUSTER_SIZE: ${SUPABASE_LOGFLARE_MIN_CLUSTER_SIZE:-1}
POSTGRES_BACKEND_URL: postgresql://${SUPABASE_POSTGRES_USER_SUPABASE:-supabase_admin}:${SUPABASE_POSTGRES_PASSWORD_SUPABASE:-${SUPABASE_POSTGRES_PASSWORD}}@${SUPABASE_POSTGRES_HOST:-db}:${SUPABASE_POSTGRES_PORT:-5432}/${SUPABASE_POSTGRES_DB_SUPABASE:-_supabase}
POSTGRES_BACKEND_SCHEMA: ${SUPABASE_POSTGRES_SCHEMA_SUPABASE:-_analytics}
LOGFLARE_FEATURE_FLAG_OVERRIDE: ${SUPABASE_LOGFLARE_FEATURE_FLAG_OVERRIDE:-multibackend=true}
GOOGLE_PROJECT_ID: ${SUPABASE_GOOGLE_PROJECT_ID:-}
GOOGLE_PROJECT_NUMBER: ${SUPABASE_GOOGLE_PROJECT_NUMBER:-}
ports: !override
- 4000
db:
build:
args:
- DOCKER_BUILD_DIR=docker/supabase/postgres
- SUPABASE_POSTGRES_VERSION=${SUPABASE_POSTGRES_VERSION:-15.6.1.146}
context: ../..
dockerfile: docker/supabase/postgres/Dockerfile
container_name: !reset null
image: ${DOCKER_REPOSITORY}/postgres:${DOCKER_IMAGE_TAG}
environment: !override
POSTGRES_HOST: /var/run/postgresql
PGPORT: ${SUPABASE_POSTGRES_PORT:-5432}
POSTGRES_PORT: ${SUPABASE_POSTGRES_PORT:-5432}
PGPASSWORD: ${SUPABASE_POSTGRES_PASSWORD}
POSTGRES_PASSWORD: ${SUPABASE_POSTGRES_PASSWORD}
PGDATABASE: ${SUPABASE_POSTGRES_DB:-postgres}
POSTGRES_DB: ${SUPABASE_POSTGRES_DB:-postgres}
JWT_SECRET: ${SUPABASE_JWT_SECRET}
JWT_EXP: ${SUPABASE_JWT_EXPIRY:-3600}
vector:
build:
args:
- DOCKER_BUILD_DIR=docker/supabase/vector
- SUPABASE_VECTOR_VERSION=${SUPABASE_VECTOR_VERSION:-0.28.1-alpine}
context: ../..
dockerfile: docker/supabase/vector/Dockerfile
container_name: !reset null
image: ${DOCKER_REPOSITORY}/vector:${DOCKER_IMAGE_TAG}
environment: !override
LOGFLARE_API_KEY: ${SUPABASE_LOGFLARE_API_KEY}
supavisor:
container_name: !reset null
ports: !override
- 5432
- 6543
environment: !override
- PORT=${SUPABASE_SUPAVISOR_PORT:-4000}
- POSTGRES_PORT=${SUPABASE_POSTGRES_PORT:-5432}
- POSTGRES_DB=${SUPABASE_POSTGRES_DB:-postgres}
- POSTGRES_PASSWORD=${SUPABASE_POSTGRES_PASSWORD}
- DATABASE_URL=ecto://${SUPABASE_POSTGRES_USER_SUPABASE:-supabase_admin}:${SUPABASE_POSTGRES_PASSWORD_SUPABASE:-${SUPABASE_POSTGRES_PASSWORD}}@${SUPABASE_POSTGRES_HOST:-db}:${SUPABASE_POSTGRES_PORT:-5432}/${SUPABASE_POSTGRES_DB_SUPABASE:-_supabase}
- CLUSTER_POSTGRES=true
- SECRET_KEY_BASE=${SUPABASE_SECRET_KEY_BASE}
- VAULT_ENC_KEY=${SUPABASE_VAULT_ENC_KEY}
- API_JWT_SECRET=${SUPABASE_JWT_SECRET}
- METRICS_JWT_SECRET=${SUPABASE_JWT_SECRET}
- REGION=${SUPABASE_SUPAVISOR_REGION:-local}
- ERL_AFLAGS=${SUPABASE_SUPAVISOR_ERL_AFLAGS:--proto_dist inet_tcp}
- POOLER_TENANT_ID=${SUPABASE_POOLER_TENANT_ID:-local}
- POOLER_DEFAULT_POOL_SIZE=${SUPABASE_POOLER_DEFAULT_POOL_SIZE:-20}
- POOLER_MAX_CLIENT_CONN=${SUPABASE_POOLER_MAX_CLIENT_CONN:-100}
- POOLER_POOL_MODE=${SUPABASE_POOLER_POOL_MODE:-transaction}