|
|
|
@@ -5,12 +5,10 @@
|
|
|
|
|
# Destroy: docker compose -f docker-compose.yml -f ./dev/docker-compose.dev.yml down -v --remove-orphans
|
|
|
|
|
|
|
|
|
|
name: supabase
|
|
|
|
|
version: "3.8"
|
|
|
|
|
|
|
|
|
|
services:
|
|
|
|
|
studio:
|
|
|
|
|
# container_name: supabase-studio
|
|
|
|
|
image: supabase/studio:20240923-2e3e90c
|
|
|
|
|
image: supabase/studio:20241202-71e5240
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
healthcheck:
|
|
|
|
|
test:
|
|
|
|
@@ -18,9 +16,10 @@ services:
|
|
|
|
|
"CMD",
|
|
|
|
|
"node",
|
|
|
|
|
"-e",
|
|
|
|
|
"require('http').get('http://localhost:3000/api/profile', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})"
|
|
|
|
|
"fetch('http://studio:3000/api/profile').then((r) => {if (r.status
|
|
|
|
|
!== 200) throw new Error(r.status)})"
|
|
|
|
|
]
|
|
|
|
|
timeout: 5s
|
|
|
|
|
timeout: 10s
|
|
|
|
|
interval: 5s
|
|
|
|
|
retries: 3
|
|
|
|
|
depends_on:
|
|
|
|
@@ -32,6 +31,7 @@ services:
|
|
|
|
|
|
|
|
|
|
DEFAULT_ORGANIZATION_NAME: ${STUDIO_DEFAULT_ORGANIZATION}
|
|
|
|
|
DEFAULT_PROJECT_NAME: ${STUDIO_DEFAULT_PROJECT}
|
|
|
|
|
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
|
|
|
|
|
|
|
|
|
|
SUPABASE_URL: http://kong:8000
|
|
|
|
|
SUPABASE_PUBLIC_URL: ${SUPABASE_PUBLIC_URL}
|
|
|
|
@@ -48,14 +48,11 @@ services:
|
|
|
|
|
# NEXT_ANALYTICS_BACKEND_PROVIDER: bigquery
|
|
|
|
|
|
|
|
|
|
kong:
|
|
|
|
|
# container_name: supabase-kong
|
|
|
|
|
image: kong:2.8.1
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
# https://unix.stackexchange.com/a/294837
|
|
|
|
|
entrypoint: bash -c 'eval "echo \"$$(cat ~/temp.yml)\"" > ~/kong.yml && /docker-entrypoint.sh kong docker-start'
|
|
|
|
|
# ports:
|
|
|
|
|
# - ${KONG_HTTP_PORT}:8000/tcp
|
|
|
|
|
# - ${KONG_HTTPS_PORT}:8443/tcp
|
|
|
|
|
entrypoint: bash -c 'eval "echo \"$$(cat ~/temp.yml)\"" > ~/kong.yml &&
|
|
|
|
|
/docker-entrypoint.sh kong docker-start'
|
|
|
|
|
depends_on:
|
|
|
|
|
analytics:
|
|
|
|
|
condition: service_healthy
|
|
|
|
@@ -76,8 +73,7 @@ services:
|
|
|
|
|
- ./volumes/api/kong.yml:/home/kong/temp.yml:ro
|
|
|
|
|
|
|
|
|
|
auth:
|
|
|
|
|
# container_name: supabase-auth
|
|
|
|
|
image: supabase/gotrue:v2.158.1
|
|
|
|
|
image: supabase/gotrue:v2.164.0
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
# Disable this if you are using an external Postgres database
|
|
|
|
@@ -119,6 +115,10 @@ services:
|
|
|
|
|
GOTRUE_EXTERNAL_EMAIL_ENABLED: ${ENABLE_EMAIL_SIGNUP}
|
|
|
|
|
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED: ${ENABLE_ANONYMOUS_USERS}
|
|
|
|
|
GOTRUE_MAILER_AUTOCONFIRM: ${ENABLE_EMAIL_AUTOCONFIRM}
|
|
|
|
|
|
|
|
|
|
# Uncomment to bypass nonce check in ID Token flow. Commonly set to true when using Google Sign In on mobile.
|
|
|
|
|
# GOTRUE_EXTERNAL_SKIP_NONCE_CHECK: true
|
|
|
|
|
|
|
|
|
|
# GOTRUE_MAILER_SECURE_EMAIL_CHANGE_ENABLED: true
|
|
|
|
|
# GOTRUE_SMTP_MAX_FREQUENCY: 1s
|
|
|
|
|
GOTRUE_SMTP_ADMIN_EMAIL: ${SMTP_ADMIN_EMAIL}
|
|
|
|
@@ -159,7 +159,6 @@ services:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rest:
|
|
|
|
|
# container_name: supabase-rest
|
|
|
|
|
image: postgrest/postgrest:v12.2.0
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
@@ -180,8 +179,7 @@ services:
|
|
|
|
|
|
|
|
|
|
realtime:
|
|
|
|
|
# This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain
|
|
|
|
|
# container_name: realtime-dev.supabase-realtime
|
|
|
|
|
image: supabase/realtime:v2.30.34
|
|
|
|
|
image: supabase/realtime:v2.33.58
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
# Disable this if you are using an external Postgres database
|
|
|
|
@@ -224,8 +222,7 @@ services:
|
|
|
|
|
|
|
|
|
|
# To use S3 backed storage: docker compose -f docker-compose.yml -f docker-compose.s3.yml up
|
|
|
|
|
storage:
|
|
|
|
|
# container_name: supabase-storage
|
|
|
|
|
image: supabase/storage-api:v1.10.1
|
|
|
|
|
image: supabase/storage-api:v1.11.13
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
# Disable this if you are using an external Postgres database
|
|
|
|
@@ -242,7 +239,7 @@ services:
|
|
|
|
|
"--no-verbose",
|
|
|
|
|
"--tries=1",
|
|
|
|
|
"--spider",
|
|
|
|
|
"http://localhost:5000/status"
|
|
|
|
|
"http://storage:5000/status"
|
|
|
|
|
]
|
|
|
|
|
timeout: 5s
|
|
|
|
|
interval: 5s
|
|
|
|
@@ -267,7 +264,6 @@ services:
|
|
|
|
|
- ./volumes/storage:/var/lib/storage:z
|
|
|
|
|
|
|
|
|
|
imgproxy:
|
|
|
|
|
# container_name: supabase-imgproxy
|
|
|
|
|
image: darthsim/imgproxy:v3.8.0
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: [ "CMD", "imgproxy", "health" ]
|
|
|
|
@@ -283,8 +279,7 @@ services:
|
|
|
|
|
- ./volumes/storage:/var/lib/storage:z
|
|
|
|
|
|
|
|
|
|
meta:
|
|
|
|
|
# container_name: supabase-meta
|
|
|
|
|
image: supabase/postgres-meta:v0.83.2
|
|
|
|
|
image: supabase/postgres-meta:v0.84.2
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
# Disable this if you are using an external Postgres database
|
|
|
|
@@ -301,8 +296,7 @@ services:
|
|
|
|
|
PG_META_DB_PASSWORD: ${POSTGRES_PASSWORD}
|
|
|
|
|
|
|
|
|
|
functions:
|
|
|
|
|
# container_name: supabase-edge-functions
|
|
|
|
|
image: supabase/edge-runtime:v1.58.3
|
|
|
|
|
image: supabase/edge-runtime:v1.65.3
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
depends_on:
|
|
|
|
|
analytics:
|
|
|
|
@@ -323,7 +317,6 @@ services:
|
|
|
|
|
- /home/deno/functions/main
|
|
|
|
|
|
|
|
|
|
analytics:
|
|
|
|
|
# container_name: supabase-analytics
|
|
|
|
|
image: supabase/logflare:1.4.0
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: [ "CMD", "curl", "http://localhost:4000/health" ]
|
|
|
|
@@ -344,7 +337,7 @@ services:
|
|
|
|
|
environment:
|
|
|
|
|
LOGFLARE_NODE_HOST: 127.0.0.1
|
|
|
|
|
DB_USERNAME: supabase_admin
|
|
|
|
|
DB_DATABASE: ${POSTGRES_DB}
|
|
|
|
|
DB_DATABASE: _supabase
|
|
|
|
|
DB_HOSTNAME: ${POSTGRES_HOST}
|
|
|
|
|
DB_PORT: ${POSTGRES_PORT}
|
|
|
|
|
DB_PASSWORD: ${POSTGRES_PASSWORD}
|
|
|
|
@@ -355,19 +348,16 @@ services:
|
|
|
|
|
LOGFLARE_MIN_CLUSTER_SIZE: 1
|
|
|
|
|
|
|
|
|
|
# Comment variables to use Big Query backend for analytics
|
|
|
|
|
POSTGRES_BACKEND_URL: postgresql://supabase_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
|
|
|
|
|
POSTGRES_BACKEND_URL: postgresql://supabase_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/_supabase
|
|
|
|
|
POSTGRES_BACKEND_SCHEMA: _analytics
|
|
|
|
|
LOGFLARE_FEATURE_FLAG_OVERRIDE: multibackend=true
|
|
|
|
|
# Uncomment to use Big Query backend for analytics
|
|
|
|
|
# GOOGLE_PROJECT_ID: ${GOOGLE_PROJECT_ID}
|
|
|
|
|
# GOOGLE_PROJECT_NUMBER: ${GOOGLE_PROJECT_NUMBER}
|
|
|
|
|
# ports:
|
|
|
|
|
# - 4000:4000
|
|
|
|
|
|
|
|
|
|
# Comment out everything below this point if you are using an external Postgres database
|
|
|
|
|
db:
|
|
|
|
|
# container_name: supabase-db
|
|
|
|
|
image: supabase/postgres:15.1.1.78
|
|
|
|
|
image: supabase/postgres:15.6.1.139
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: pg_isready -U postgres -h localhost
|
|
|
|
|
interval: 5s
|
|
|
|
@@ -383,9 +373,6 @@ services:
|
|
|
|
|
- -c
|
|
|
|
|
- log_min_messages=fatal # prevents Realtime polling queries from appearing in logs
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
# ports:
|
|
|
|
|
# # Pass down internal port because it's set dynamically by other services
|
|
|
|
|
# - ${POSTGRES_PORT}:${POSTGRES_PORT}
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_HOST: /var/run/postgresql
|
|
|
|
|
PGPORT: ${POSTGRES_PORT}
|
|
|
|
@@ -406,13 +393,16 @@ services:
|
|
|
|
|
- ./volumes/db/jwt.sql:/docker-entrypoint-initdb.d/init-scripts/99-jwt.sql:Z
|
|
|
|
|
# PGDATA directory is persisted between restarts
|
|
|
|
|
- ./volumes/db/data:/var/lib/postgresql/data:Z
|
|
|
|
|
# Changes required for internal supabase data such as _analytics
|
|
|
|
|
- ./volumes/db/_supabase.sql:/docker-entrypoint-initdb.d/migrations/97-_supabase.sql:Z
|
|
|
|
|
# Changes required for Analytics support
|
|
|
|
|
- ./volumes/db/logs.sql:/docker-entrypoint-initdb.d/migrations/99-logs.sql:Z
|
|
|
|
|
# Changes required for Pooler support
|
|
|
|
|
- ./volumes/db/pooler.sql:/docker-entrypoint-initdb.d/migrations/99-pooler.sql:Z
|
|
|
|
|
# Use named volume to persist pgsodium decryption key between restarts
|
|
|
|
|
- db-config:/etc/postgresql-custom
|
|
|
|
|
|
|
|
|
|
vector:
|
|
|
|
|
# container_name: supabase-vector
|
|
|
|
|
image: timberio/vector:0.28.1-alpine
|
|
|
|
|
healthcheck:
|
|
|
|
|
test:
|
|
|
|
@@ -433,7 +423,46 @@ services:
|
|
|
|
|
- ${DOCKER_SOCKET_LOCATION}:/var/run/docker.sock:ro
|
|
|
|
|
environment:
|
|
|
|
|
LOGFLARE_API_KEY: ${LOGFLARE_API_KEY}
|
|
|
|
|
command: [ "--config", "etc/vector/vector.yml" ]
|
|
|
|
|
command: [ "--config", "/etc/vector/vector.yml" ]
|
|
|
|
|
|
|
|
|
|
# Update the DATABASE_URL if you are using an external Postgres database
|
|
|
|
|
supavisor:
|
|
|
|
|
image: supabase/supavisor:1.1.56
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: curl -sSfL --head -o /dev/null "http://127.0.0.1:4000/api/health"
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 5
|
|
|
|
|
depends_on:
|
|
|
|
|
db:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
analytics:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
command:
|
|
|
|
|
- /bin/sh
|
|
|
|
|
- -c
|
|
|
|
|
- /app/bin/migrate && /app/bin/supavisor eval "$$(cat
|
|
|
|
|
/etc/pooler/pooler.exs)" && /app/bin/server
|
|
|
|
|
restart: unless-stopped
|
|
|
|
|
environment:
|
|
|
|
|
- PORT=4000
|
|
|
|
|
- POSTGRES_PORT=${POSTGRES_PORT}
|
|
|
|
|
- POSTGRES_DB=${POSTGRES_DB}
|
|
|
|
|
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
|
|
|
|
|
- DATABASE_URL=ecto://supabase_admin:${POSTGRES_PASSWORD}@db:${POSTGRES_PORT}/_supabase
|
|
|
|
|
- CLUSTER_POSTGRES=true
|
|
|
|
|
- SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
|
|
|
|
|
- VAULT_ENC_KEY=your-encryption-key-32-chars-min
|
|
|
|
|
- API_JWT_SECRET=${JWT_SECRET}
|
|
|
|
|
- METRICS_JWT_SECRET=${JWT_SECRET}
|
|
|
|
|
- REGION=local
|
|
|
|
|
- ERL_AFLAGS=-proto_dist inet_tcp
|
|
|
|
|
- POOLER_TENANT_ID=${POOLER_TENANT_ID}
|
|
|
|
|
- POOLER_DEFAULT_POOL_SIZE=${POOLER_DEFAULT_POOL_SIZE}
|
|
|
|
|
- POOLER_MAX_CLIENT_CONN=${POOLER_MAX_CLIENT_CONN}
|
|
|
|
|
- POOLER_POOL_MODE=transaction
|
|
|
|
|
volumes:
|
|
|
|
|
- ./volumes/pooler/pooler.exs:/etc/pooler/pooler.exs:ro
|
|
|
|
|
|
|
|
|
|
volumes:
|
|
|
|
|
db-config:
|
|
|
|
|