From 2da2d9c44a48778fdfef44bd2d0e6c740d82128f Mon Sep 17 00:00:00 2001 From: Vadko Date: Fri, 13 Feb 2026 02:46:08 +0200 Subject: [PATCH 1/7] chore: update Supabase template to latest versions Updated all Supabase service images to latest versions: - studio: 2026.01.07 -> 2026.01.27-sha-6aa59ff - postgres: 15.8.1.048 -> 15.8.1.085 - logflare: 1.4.0 -> 1.30.3 - postgrest: v12.2.12 -> v14.3 - gotrue: v2.174.0 -> v2.185.0 - realtime: v2.34.47 -> v2.72.0 - storage-api: v1.14.6 -> v1.37.1 - imgproxy: v3.8.0 -> v3.30.1 - postgres-meta: v0.89.3 -> v0.95.2 - edge-runtime: v1.67.4 -> v1.70.0 - supavisor: 2.5.1 -> 2.7.4 Config changes: - analytics: LOGFLARE_API_KEY replaced with LOGFLARE_PUBLIC/PRIVATE_ACCESS_TOKEN, removed LOGFLARE_SINGLE_TENANT_MODE and LOGFLARE_MIN_CLUSTER_SIZE - studio: added POSTGRES_PORT/DB, LOGFLARE_*_ACCESS_TOKEN, SNIPPETS/EDGE_FUNCTIONS management, volumes; removed CURRENT_CLI_VERSION, SUPABASE_PUBLIC_API - imgproxy: added IMGPROXY_BIND, IMGPROXY_MAX_SRC_RESOLUTION - meta: added CRYPTO_KEY - realtime: removed FLY_ALLOC_ID, FLY_APP_NAME, ENABLE_TAILSCALE; added DISABLE_HEALTHCHECK_LOGGING - storage: removed obsolete commented-out env vars --- templates/compose/supabase.yaml | 69 +++++++++++++-------------------- 1 file changed, 27 insertions(+), 42 deletions(-) diff --git a/templates/compose/supabase.yaml b/templates/compose/supabase.yaml index fad059a08..a1e822ab3 100644 --- a/templates/compose/supabase.yaml +++ b/templates/compose/supabase.yaml @@ -33,7 +33,7 @@ services: - 'KONG_STORAGE_WRITE_TIMEOUT=${KONG_STORAGE_WRITE_TIMEOUT:-3600}' - 'KONG_STORAGE_READ_TIMEOUT=${KONG_STORAGE_READ_TIMEOUT:-3600}' - 'KONG_STORAGE_REQUEST_BUFFERING=${KONG_STORAGE_REQUEST_BUFFERING:-false}' - - 'KONG_STORAGE_RESPONSE_BUFFERING=${KONG_STORAGE_RESPONSE_BUFFERING:-false}' + - 'KONG_STORAGE_RESPONSE_BUFFERING=${KONG_STORAGE_RESPONSE_BUFFERING:-false}' volumes: # https://github.com/supabase/supabase/issues/12661 - type: bind @@ -290,7 +290,7 @@ services: config: hide_credentials: true supabase-studio: - image: supabase/studio:2026.01.07-sha-037e5f9 + image: supabase/studio:2026.01.27-sha-6aa59ff healthcheck: test: [ @@ -310,7 +310,8 @@ services: - STUDIO_PG_META_URL=http://supabase-meta:8080 - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} - POSTGRES_HOST=${POSTGRES_HOST:-supabase-db} - - CURRENT_CLI_VERSION=2.67.1 + - POSTGRES_PORT=${POSTGRES_PORT:-5432} + - POSTGRES_DB=${POSTGRES_DB:-postgres} - DEFAULT_ORGANIZATION_NAME=${STUDIO_DEFAULT_ORGANIZATION:-Default Organization} - DEFAULT_PROJECT_NAME=${STUDIO_DEFAULT_PROJECT:-Default Project} @@ -322,8 +323,9 @@ services: - AUTH_JWT_SECRET=${SERVICE_PASSWORD_JWT} - LOGFLARE_API_KEY=${SERVICE_PASSWORD_LOGFLARE} + - LOGFLARE_PUBLIC_ACCESS_TOKEN=${SERVICE_PASSWORD_LOGFLARE} + - LOGFLARE_PRIVATE_ACCESS_TOKEN=${SERVICE_PASSWORD_LOGFLARE} - LOGFLARE_URL=http://supabase-analytics:4000 - - 'SUPABASE_PUBLIC_API=${SERVICE_URL_SUPABASEKONG}' # Next.js client-side environment variables (required for browser access) - 'NEXT_PUBLIC_SUPABASE_URL=${SERVICE_URL_SUPABASEKONG}' - NEXT_PUBLIC_SUPABASE_ANON_KEY=${SERVICE_SUPABASEANON_KEY} @@ -333,8 +335,13 @@ services: # Uncomment to use Big Query backend for analytics # NEXT_ANALYTICS_BACKEND_PROVIDER=bigquery - 'OPENAI_API_KEY=${OPENAI_API_KEY}' + - SNIPPETS_MANAGEMENT_FOLDER=/app/snippets + - EDGE_FUNCTIONS_MANAGEMENT_FOLDER=/app/edge-functions + volumes: + - ./volumes/snippets:/app/snippets + - ./volumes/functions:/app/edge-functions supabase-db: - image: supabase/postgres:15.8.1.048 + image: supabase/postgres:15.8.1.085 healthcheck: test: pg_isready -U postgres -h 127.0.0.1 interval: 5s @@ -633,7 +640,7 @@ services: - supabase-db-config:/etc/postgresql-custom supabase-analytics: - image: supabase/logflare:1.4.0 + image: supabase/logflare:1.30.3 healthcheck: test: ["CMD", "curl", "http://127.0.0.1:4000/health"] timeout: 5s @@ -655,11 +662,10 @@ services: - DB_PORT=${POSTGRES_PORT:-5432} - DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES} - DB_SCHEMA=_analytics - - LOGFLARE_API_KEY=${SERVICE_PASSWORD_LOGFLARE} + - LOGFLARE_PUBLIC_ACCESS_TOKEN=${SERVICE_PASSWORD_LOGFLARE} + - LOGFLARE_PRIVATE_ACCESS_TOKEN=${SERVICE_PASSWORD_LOGFLARE} - LOGFLARE_SINGLE_TENANT=true - - LOGFLARE_SINGLE_TENANT_MODE=true - LOGFLARE_SUPABASE_MODE=true - - 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}/_supabase @@ -929,7 +935,7 @@ services: command: ["--config", "etc/vector/vector.yml"] supabase-rest: - image: postgrest/postgrest:v12.2.12 + image: postgrest/postgrest:v14.3 depends_on: supabase-db: # Disable this if you are using an external Postgres database @@ -947,7 +953,7 @@ services: command: "postgrest" exclude_from_hc: true supabase-auth: - image: supabase/gotrue:v2.174.0 + image: supabase/gotrue:v2.185.0 depends_on: supabase-db: # Disable this if you are using an external Postgres database @@ -1038,7 +1044,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.34.47 + image: supabase/realtime:v2.72.0 container_name: realtime-dev.supabase-realtime depends_on: supabase-db: @@ -1072,11 +1078,8 @@ services: - DB_AFTER_CONNECT_QUERY=SET search_path TO _realtime - DB_ENC_KEY=supabaserealtime - API_JWT_SECRET=${SERVICE_PASSWORD_JWT} - - FLY_ALLOC_ID=fly123 - - FLY_APP_NAME=realtime - SECRET_KEY_BASE=${SECRET_PASSWORD_REALTIME} - ERL_AFLAGS=-proto_dist inet_tcp - - ENABLE_TAILSCALE=false - DNS_NODES='' - RLIMIT_NOFILE=10000 - APP_NAME=realtime @@ -1084,6 +1087,7 @@ services: - LOG_LEVEL=error - RUN_JANITOR=true - JANITOR_INTERVAL=60000 + - DISABLE_HEALTHCHECK_LOGGING=true command: > sh -c "/app/bin/migrate && /app/bin/realtime eval 'Realtime.Release.seeds(Realtime.Repo)' && /app/bin/server" supabase-minio: @@ -1121,7 +1125,7 @@ services: exit 0 supabase-storage: - image: supabase/storage-api:v1.14.6 + image: supabase/storage-api:v1.37.1 depends_on: supabase-db: # Disable this if you are using an external Postgres database @@ -1168,46 +1172,26 @@ services: - DATABASE_SEARCH_PATH=storage - NODE_ENV=production - REQUEST_ALLOW_X_FORWARDED_PATH=true - - # - ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzA4OTg4NDAwLAogICJleHAiOiAxODY2ODQxMjAwCn0.jCDqsoXGT58JnAjf27KOowNQsokkk0aR7rdbGG18P-8 - # - SERVICE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogInNlcnZpY2Vfcm9sZSIsCiAgImlzcyI6ICJzdXBhYmFzZSIsCiAgImlhdCI6IDE3MDg5ODg0MDAsCiAgImV4cCI6IDE4NjY4NDEyMDAKfQ.GA7yF2BmqTzqGkP_oqDdJAQVt0djjIxGYuhE0zFDJV4 - # - POSTGREST_URL=http://supabase-rest:3000 - # - PGRST_JWT_SECRET=${SERVICE_PASSWORD_JWT} - # - DATABASE_URL=postgres://supabase_storage_admin:${SERVICE_PASSWORD_POSTGRES}@${POSTGRES_HOSTNAME:-supabase-db}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-postgres} - # - FILE_SIZE_LIMIT=52428800 - # - STORAGE_BACKEND=s3 - # - STORAGE_S3_BUCKET=stub - # - STORAGE_S3_ENDPOINT=http://supabase-minio:9000 - # - STORAGE_S3_PROTOCOL=http - # - STORAGE_S3_REGION=stub - # - STORAGE_S3_FORCE_PATH_STYLE=true - # - AWS_ACCESS_KEY_ID=${SERVICE_USER_MINIO} - # - AWS_SECRET_ACCESS_KEY=${SERVICE_PASSWORD_MINIO} - # - AWS_DEFAULT_REGION=stub - # - FILE_STORAGE_BACKEND_PATH=/var/lib/storage - # - TENANT_ID=stub - # # TODO: https://github.com/supabase/storage-api/issues/55 - # - REGION=stub - # - ENABLE_IMAGE_TRANSFORMATION=true - # - IMGPROXY_URL=http://imgproxy:8080 volumes: - ./volumes/storage:/var/lib/storage imgproxy: - image: darthsim/imgproxy:v3.8.0 + image: darthsim/imgproxy:v3.30.1 healthcheck: test: ["CMD", "imgproxy", "health"] timeout: 5s interval: 5s retries: 3 environment: + - IMGPROXY_BIND=:8080 - IMGPROXY_LOCAL_FILESYSTEM_ROOT=/ - IMGPROXY_USE_ETAG=true - IMGPROXY_ENABLE_WEBP_DETECTION=${IMGPROXY_ENABLE_WEBP_DETECTION:-true} + - IMGPROXY_MAX_SRC_RESOLUTION=16.8 volumes: - ./volumes/storage:/var/lib/storage supabase-meta: - image: supabase/postgres-meta:v0.89.3 + image: supabase/postgres-meta:v0.95.2 depends_on: supabase-db: # Disable this if you are using an external Postgres database @@ -1221,9 +1205,10 @@ services: - PG_META_DB_NAME=${POSTGRES_DB:-postgres} - PG_META_DB_USER=supabase_admin - PG_META_DB_PASSWORD=${SERVICE_PASSWORD_POSTGRES} + - CRYPTO_KEY=${SERVICE_PASSWORD_PGMETACRYPTO} supabase-edge-functions: - image: supabase/edge-runtime:v1.67.4 + image: supabase/edge-runtime:v1.70.0 depends_on: supabase-analytics: condition: service_healthy @@ -1367,7 +1352,7 @@ services: - /home/deno/functions/main supabase-supavisor: - image: 'supabase/supavisor:2.5.1' + image: 'supabase/supavisor:2.7.4' healthcheck: test: - CMD From b5a21543c3e4495dcbc50686ed4fbbbd6e8ba344 Mon Sep 17 00:00:00 2001 From: Vadko Date: Fri, 13 Feb 2026 13:30:01 +0200 Subject: [PATCH 2/7] fix(supabase): fix TUS resumable upload 401 by adding leading slash to TUS_URL_PATH --- templates/compose/supabase.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/compose/supabase.yaml b/templates/compose/supabase.yaml index a1e822ab3..d4843e7f4 100644 --- a/templates/compose/supabase.yaml +++ b/templates/compose/supabase.yaml @@ -1164,7 +1164,7 @@ services: - UPLOAD_FILE_SIZE_LIMIT=524288000 - UPLOAD_FILE_SIZE_LIMIT_STANDARD=524288000 - UPLOAD_SIGNED_URL_EXPIRATION_TIME=120 - - TUS_URL_PATH=upload/resumable + - TUS_URL_PATH=/upload/resumable - TUS_MAX_SIZE=3600000 - ENABLE_IMAGE_TRANSFORMATION=true - IMGPROXY_URL=http://imgproxy:8080 From 16617b90095b7317f8f52db7747d16f4de0af71f Mon Sep 17 00:00:00 2001 From: Vadko Date: Fri, 27 Feb 2026 00:06:50 +0200 Subject: [PATCH 3/7] fix(supabase): update to latest versions, fix vector config, add missing env vars --- templates/compose/supabase.yaml | 75 +++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/templates/compose/supabase.yaml b/templates/compose/supabase.yaml index d4843e7f4..04dcb5ef9 100644 --- a/templates/compose/supabase.yaml +++ b/templates/compose/supabase.yaml @@ -290,7 +290,7 @@ services: config: hide_credentials: true supabase-studio: - image: supabase/studio:2026.01.27-sha-6aa59ff + image: supabase/studio:2026.02.16-sha-26c615c healthcheck: test: [ @@ -321,6 +321,7 @@ services: - SUPABASE_ANON_KEY=${SERVICE_SUPABASEANON_KEY} - SUPABASE_SERVICE_KEY=${SERVICE_SUPABASESERVICE_KEY} - AUTH_JWT_SECRET=${SERVICE_PASSWORD_JWT} + - PG_META_CRYPTO_KEY=${SERVICE_PASSWORD_PGMETACRYPTO} - LOGFLARE_API_KEY=${SERVICE_PASSWORD_LOGFLARE} - LOGFLARE_PUBLIC_ACCESS_TOKEN=${SERVICE_PASSWORD_LOGFLARE} @@ -640,7 +641,7 @@ services: - supabase-db-config:/etc/postgresql-custom supabase-analytics: - image: supabase/logflare:1.30.3 + image: supabase/logflare:1.31.2 healthcheck: test: ["CMD", "curl", "http://127.0.0.1:4000/health"] timeout: 5s @@ -676,7 +677,7 @@ services: # GOOGLE_PROJECT_ID=${GOOGLE_PROJECT_ID} # GOOGLE_PROJECT_NUMBER=${GOOGLE_PROJECT_NUMBER} supabase-vector: - image: timberio/vector:0.28.1-alpine + image: timberio/vector:0.53.0-alpine healthcheck: test: [ @@ -799,7 +800,7 @@ services: parsed, err = parse_regex(.event_message, r'^(?P