Skip to content

Update Supabase 1.26.01#721

Open
kadma wants to merge 7 commits intoDokploy:canaryfrom
kadma:Update-Supabase
Open

Update Supabase 1.26.01#721
kadma wants to merge 7 commits intoDokploy:canaryfrom
kadma:Update-Supabase

Conversation

@kadma
Copy link
Contributor

@kadma kadma commented Feb 21, 2026

What is this PR about?

New PR of Supabase is updated according to the original .yml and configured to allow multiple instances.

Checklist

Before submitting this PR, please make sure that:

Greptile Summary

Updates Supabase template from version 1.25.04 to 1.26.01 with multiple component version upgrades and configuration improvements. The PR includes changes to support multiple Supabase instances and aligns with the upstream Supabase docker-compose configuration.

Critical Issues Found:

  • TOML syntax errors with missing closing quotes on lines 5-6 will prevent template parsing
  • Realtime service routing is broken - Kong URLs don't match the renamed container (lines 331, 351)
  • Vector logging configuration uses hardcoded container name instead of variable, breaking multi-instance support (line 844)

Notable Changes:

  • Updated 10+ service versions (studio, auth, rest, realtime, storage, imgproxy, meta, functions, analytics, db, vector, supavisor)
  • Changed storage volume paths from ../files/volumes/storage to ./volumes/storage for consistency
  • Added new environment variables for storage S3 protocol configuration
  • Improved logging configuration with updated retry strategies
  • Added new volumes for snippets and edge functions management in studio service

Confidence Score: 1/5

  • This PR has critical syntax and logic errors that will prevent Supabase from functioning
  • Multiple critical issues prevent this from working: (1) TOML syntax errors on lines 5-6 will cause template parsing to fail entirely, (2) Kong routing configuration has incorrect URLs that don't match the renamed realtime container, causing routing failures, (3) Vector logging uses hardcoded container name breaking the stated goal of multi-instance support. These must be fixed before deployment.
  • blueprints/supabase/template.toml requires immediate attention for syntax errors and configuration mismatches

Last reviewed commit: 6fd70d0

(5/5) You can turn off certain types of comments like style here!

Copilot AI review requested due to automatic review settings February 21, 2026 15:25
@github-actions
Copy link

github-actions bot commented Feb 21, 2026

built with Refined Cloudflare Pages Action

⚡ Cloudflare Pages Deployment

Name Status Preview Last Commit
templates ✅ Ready (View Log) Visit Preview 55c4db2

Copy link

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 files reviewed, 4 comments

Edit Code Review Agent Settings | Greptile

Comment on lines 5 to 6
logflare_api_key = "${password:32}"
logflare_public = "${password:32},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing closing quotes causing TOML syntax error

Suggested change
logflare_api_key = "${password:32}"
logflare_public = "${password:32},
logflare_public = "${password:32}"
logflare_private = "${password:32}"

- name: realtime-v1-ws
_comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*'
url: http://realtime-dev.${CONTAINER_PREFIX}-realtime:4000/socket
url: http://realtime:4000/socket
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The realtime URL no longer matches the container name in docker-compose.yml. The container was renamed from realtime-dev.${CONTAINER_PREFIX}-realtime to ${CONTAINER_PREFIX}-realtime, so Kong cannot route to the service.

Suggested change
url: http://realtime:4000/socket
url: http://${CONTAINER_PREFIX}-realtime:4000/socket

- name: realtime-v1-rest
_comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*'
url: http://realtime-dev.${CONTAINER_PREFIX}-realtime:4000/api
url: http://realtime:4000/api
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue - the realtime REST URL needs to match the new container name.

Suggested change
url: http://realtime:4000/api
url: http://${CONTAINER_PREFIX}-realtime:4000/api

type: docker_logs
exclude_containers:
- ${container_name_prefix}-vector
- supabase-vector
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hardcoded container name breaks multi-instance support. Should use the ${CONTAINER_PREFIX} variable to match other instances.

Suggested change
- supabase-vector
- ${CONTAINER_PREFIX}-vector

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Supabase Dokploy blueprint to the 1.26.01 upstream stack and adjusts configuration intended to better support running multiple instances (container naming, logging/vector routing, and new env/config knobs).

Changes:

  • Bump Supabase version string in meta.json.
  • Update Supabase blueprint docker-compose.yml images/config and introduce additional env/volume settings.
  • Update template.toml variables/env, Kong routes, Edge Functions handler, and Vector log processing/sinks.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

File Description
meta.json Updates the Supabase template version string to 1.26.01.
blueprints/supabase/template.toml Adds new variables/env and updates mounts (Edge Functions + Vector/Kong/logging).
blueprints/supabase/docker-compose.yml Updates images and wiring for services to match the newer Supabase self-hosting setup and multi-instance intent.
Comments suppressed due to low confidence (3)

blueprints/supabase/docker-compose.yml:56

  • Studio mounts Edge Functions sources from ./volumes/functions, but the runtime container (functions) mounts them from ../files/volumes/functions. With different host paths, edits made via Studio won’t be reflected in the Edge Runtime (and vice versa); mount the same directory in both services.
      SNIPPETS_MANAGEMENT_FOLDER: /app/snippets
      EDGE_FUNCTIONS_MANAGEMENT_FOLDER: /app/edge-functions
    volumes:
      - ./volumes/snippets:/app/snippets:Z
      - ./volumes/functions:/app/edge-functions:Z

blueprints/supabase/docker-compose.yml:283

  • Storage/imgproxy volumes were switched from the template-managed ../files/volumes/... layout to ./volumes/storage. This is a breaking change for upgrades/backups and is inconsistent with the rest of this template’s mounts (db/functions/vector still use ../files/volumes/...). Consider keeping storage under the same base path or documenting the migration impact.
    volumes:
        - ./volumes/storage:/var/lib/storage:z

  imgproxy:
    container_name: ${CONTAINER_PREFIX}-imgproxy
    image: darthsim/imgproxy:v3.30.1
    restart: unless-stopped
    volumes:
      - ./volumes/storage:/var/lib/storage:z
    healthcheck:

blueprints/supabase/docker-compose.yml:8

  • name: ${CONTAINER_PREFIX}-supabase will double-append -supabase because CONTAINER_PREFIX is already set to ${APP_NAME}-supabase in template.toml. This produces project names like <app>-supabase-supabase and likely isn’t intended; use either ${CONTAINER_PREFIX} or drop the extra suffix.
name: ${CONTAINER_PREFIX}-supabase

type: docker_logs
exclude_containers:
- ${container_name_prefix}-vector
- supabase-vector
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Vector is configured to exclude logs from supabase-vector, but the actual container name is ${CONTAINER_PREFIX}-vector. This will cause Vector to ingest its own logs (feedback loop) and increase noise/CPU; update exclude_containers to match the configured container name/prefix.

Suggested change
- supabase-vector
- "${CONTAINER_PREFIX}-vector"

Copilot uses AI. Check for mistakes.
ports: # expose supavisor to the host to enable db pooler connection
- ${POSTGRES_PORT}:5432
- ${POOLER_PROXY_PORT_TRANSACTION}:6543
expose: # expose supavisor to the host to enable db pooler connection
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

expose does not publish ports to the host, but the comment says it does (“expose supavisor to the host”). If external clients are expected to reach the pooler, this needs ports (or Dokploy-specific TCP exposure) rather than expose; otherwise, adjust the comment and any docs/env defaults accordingly.

Suggested change
expose: # expose supavisor to the host to enable db pooler connection
expose: # expose supavisor ports to other services (internal network) for db pooler connections

Copilot uses AI. Check for mistakes.
Comment on lines +1001 to 1002
if parsed.level != null {
.metadata.parsed.error_severity = parsed.level
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the db_logs transform, parsed can be null (you explicitly check parsed == null above), but the next condition dereferences parsed.level. This will error when the regex doesn’t match; guard with parsed != null before accessing .level (or combine the checks).

Suggested change
if parsed.level != null {
.metadata.parsed.error_severity = parsed.level
if parsed != null && parsed.level != null {
.metadata.parsed.error_severity = parsed.level

Copilot uses AI. Check for mistakes.
main_domain = "${domain}"
postgres_password = "${password:32}"
dashboard_password = "${password:32}"
logflare_api_key = "${password:32}"
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logflare_public and logflare_private definitions are syntactically invalid TOML (missing closing quote/brace), which will break template parsing. Also logflare_api_key is now unused after switching to public/private access tokens—consider removing it to avoid confusion.

Suggested change
logflare_api_key = "${password:32}"

Copilot uses AI. Check for mistakes.
# This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain
container_name: realtime-dev.${CONTAINER_PREFIX}-realtime
image: supabase/realtime:v2.34.47
container_name: ${CONTAINER_PREFIX}-realtime
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment says the Realtime container name must include the realtime-dev. prefix because Realtime derives the tenant id from the subdomain, but container_name was changed to ${CONTAINER_PREFIX}-realtime. This no longer matches the healthcheck tenant (/api/tenants/realtime-dev/health) and may break tenant discovery; keep the realtime-dev. prefix (or set an explicit hostname) so the tenant id remains consistent.

Suggested change
container_name: ${CONTAINER_PREFIX}-realtime
container_name: realtime-dev.${CONTAINER_PREFIX}-realtime

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (2)

blueprints/supabase/template.toml:15

  • Inconsistent spacing around equals signs. Lines 13-15 are missing spaces around =, while all other variable assignments in this file use spaces (e.g., line 3: postgres_password = "${password:32}"). This inconsistency should be fixed for code style uniformity.
s3_protocol_id="${password:32}"
s3_protocol_secret="${password:64}"
minio_password="${password:32}"

blueprints/supabase/docker-compose.yml:205

  • The healthcheck URL uses the hardcoded tenant ID realtime-dev, but according to the comment on line 184, "realtime constructs tenant id by parsing the subdomain". With the new container naming scheme (${CONTAINER_PREFIX}-realtime), the tenant ID should match the expected format. Verify that realtime-dev is still the correct tenant ID to use in the healthcheck, or if it should be updated to match the new naming convention.
          "http://localhost:4000/api/tenants/realtime-dev/health"

'# Google Cloud Project details',
'GOOGLE_PROJECT_ID=GOOGLE_PROJECT_ID',
'GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER']
'GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER',
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing comma after 'GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER' on line 180. The next line starts a new comment section, but since this is within the env array, line 180 needs a trailing comma to be valid TOML array syntax.

Copilot uses AI. Check for mistakes.
image: supabase/edge-runtime:v1.70.3
restart: unless-stopped
volumes:
- ../files/volumes/functions:/home/deno/functions:Z
Copy link

Copilot AI Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Volume path mismatch for edge functions. The studio service mounts ./volumes/functions:/app/edge-functions:Z (line 56) but the functions service mounts ../files/volumes/functions:/home/deno/functions:Z (line 324). These are different paths on the host filesystem, which means studio and the functions runtime won't share the same edge functions. Both should reference the same directory - either both should use ./volumes/functions or both should use ../files/volumes/functions.

Suggested change
- ../files/volumes/functions:/home/deno/functions:Z
- ./volumes/functions:/home/deno/functions:Z

Copilot uses AI. Check for mistakes.
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 2 comments.

Comments suppressed due to low confidence (3)

blueprints/supabase/template.toml:173

  • logflare_api_key / LOGFLARE_API_KEY is still being generated and exported, but nothing in the updated compose config consumes it anymore (Studio now uses LOGFLARE_PUBLIC_ACCESS_TOKEN). Consider removing this variable/env entry or wiring it consistently to avoid confusion and stale secrets.
'LOGFLARE_API_KEY=${logflare_api_key}',
'',
'LOGFLARE_PUBLIC_ACCESS_TOKEN=${logflare_public}',
'LOGFLARE_PRIVATE_ACCESS_TOKEN=${logflare_private}',

blueprints/supabase/template.toml:193

  • The env comment says these MinIO credentials are “Used in docker-compose.s3.yml for minio”, but this blueprint directory doesn’t include a docker-compose.s3.yml. Either add the referenced compose file or update/remove the comment so the template doesn’t point users to a non-existent file.
'# Used in docker-compose.s3.yml for minio',
'MINIO_ROOT_USER=supa-storage',
'MINIO_ROOT_PASSWORD=${minio_password}']

blueprints/supabase/docker-compose.yml:23

  • Studio’s healthcheck is targeting http://${CONTAINER_PREFIX}-studio:3000/... (container name). Since the check runs inside the Studio container, using http://localhost:3000/... avoids relying on Docker DNS/aliases and on compose-time variable interpolation for the hostname.
          "-e",
          "fetch('http://${CONTAINER_PREFIX}-studio:3000/api/platform/profile').then((r) => {if (r.status !== 200) throw new Error(r.status)})"
        ]

Comment on lines 889 to +894
.metadata.response.status_code = req.status
url, split_err = split(req.request, " ")
if split_err == null {
.metadata.request.method = url[0]
.metadata.request.path = url[1]
.metadata.request.protocol = url[2]
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In Vector VRL, split() returns only an array (no (value, err) tuple). The url, split_err = split(req.request, " ") assignment will fail at runtime and break Kong access-log parsing. Assign the result to a single variable and validate its length/indexes before reading url[0..2].

Copilot uses AI. Check for mistakes.
.metadata.parsed.error_severity = "info"
}
if parsed != null {
if parsed.level != null {
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parsed can be null when parse_regex fails; referencing parsed.level without first checking parsed != null can error in VRL and break DB log processing. Keep the null guard (e.g., check parsed != null before accessing .level).

Suggested change
if parsed.level != null {
if parsed != null && parsed.level != null {

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants