Skip to content

Draft: prototype of the “dblab_supabase_runner ” server (Not for merging)

Vitaliy Kukharik requested to merge dblab-supabase into 514-webhooks-4-0

MR: !763 (merged)

It is a Node.js server designed to listen to DLE webhooks: "clone_create" and "clone_delete".
Upon receiving a webhooks, it either creates or deletes Docker containers with Supabase components for each DLE clone.

Supabase Architecture: https://supabase.com/docs/guides/getting-started/architecture

dblab supabase runner (draft)

How to run

1. Deploy DLE with webhooks support

Example (Hetzner):

docker run --rm -it --env HCLOUD_API_TOKEN=${HCLOUD_API_TOKEN} \
  postgresai/dle-se-ansible:v1.0-rc.3 \
    ansible-playbook deploy_dle.yml --extra-vars \
    "provision='hetzner' \
    server_name='supabase-dle-test' \
    server_type='CCX22' \
    server_image='ubuntu-22.04' \
    server_location='ash' \
    volume_size='100' \
    dle_verification_token='nzgLkg88BCkpCDW0DXSwWWoXuOfSshfe' \
    dle_version='3.4.0-rc.5' \
    zpool_datasets_number='2' \
    dle_platform_org_key='*****' \
    dle_platform_project_name='supabase-dle-test' \
    dle_image='registry.gitlab.com/postgres-ai/database-lab/dblab-server:514-webhooks-4-0' \
    dle_ui_image='registry.gitlab.com/postgres-ai/database-lab/ce-ui:514-webhooks-4-0'"
2. Configure DLE for webhooks: clone_create and clone_delete
# Webhooks configuration.
webhooks:
  hooks:
    - url: "http://dblab_supabase_runner:8080"
      secret: "secret-token"
      trigger:
        - clone_create
        - clone_delete

Reload DLE config

docker exec dblab_server kill -SIGHUP 1
3. Build image and run dblab_supabase_runner server

Copy files:

  • dblab_supabase_runner.js
  • package.json
  • Dockerfile

Build image:

docker build --no-cache --tag dblab_supabase_runner:0.1.0-rc.1 .

Pull Supabase stack images

docker pull postgrest/postgrest

create docker network for Supabase components

docker network create dblab_supabase_network
docker network connect dblab_supabase_network dblab_server

Run dblab_supabase_runner server

docker run --name dblab_supabase_runner \
  --publish 8080:8080 \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --network dblab_supabase_network \
  --detach \
  --restart on-failure \
  dblab_supabase_runner:0.1.0-rc.1
4. Create/destroy a clone and check the result
docker logs -f dblab_supabase_runner

Result:

2023/06/08 20:37:14 [INFO] - Received HTTP POST request: {"host":"dblab_supabase_runner:8080","user-agent":"Go-http-client/1.1","content-length":"153","content-type":"application/json","dblab-webhook-token":"secret-token","accept-encoding":"gzip"}, POST, /, {"event_type":"clone_create","entity_id":"test","host":"localhost","port":6000,"username":"test","dbname":"postgres","container_name":"dblab_clone_6000"}
2023/06/08 20:37:14 [INFO] - Connected Postgres clone dblab_clone_6000 to network: dblab_supabase_network
2023/06/08 20:37:14 [INFO] - Creating PostgREST container...
2023/06/08 20:37:14 [INFO] - Container dblab_clone_6000_supabase_rest created, starting container...
2023/06/08 20:37:15 [INFO] - Container dblab_clone_6000_supabase_rest started. Checking if it remains running...
2023/06/08 20:37:20 [INFO] - Container dblab_clone_6000_supabase_rest is still running!
2023/06/08 20:38:00 [INFO] - Received HTTP POST request: {"host":"dblab_supabase_runner:8080","user-agent":"Go-http-client/1.1","content-length":"153","content-type":"application/json","dblab-webhook-token":"secret-token","accept-encoding":"gzip"}, POST, /, {"event_type":"clone_delete","entity_id":"test","host":"localhost","port":6000,"username":"test","dbname":"postgres","container_name":"dblab_clone_6000"}
2023/06/08 20:38:00 [INFO] - Deleting PostgREST container...
2023/06/08 20:38:01 [INFO] - Container dblab_clone_6000_supabase_rest deleted successfully

Clone containers

root@supabase-dle-test:~# docker ps | grep clone
de1dfc46e3e2   postgrest/postgrest                                                          "/bin/postgrest"         13 seconds ago   Up 13 seconds          0.0.0.0:16000->3000/tcp, :::16000->3000/tcp           dblab_clone_6000_supabase_rest
974c1983963a   postgresai/extended-postgres:15                                              "docker-entrypoint.s…"   14 seconds ago   Up 14 seconds          5432/tcp, 0.0.0.0:6000->6000/tcp, :::6000->6000/tcp   dblab_clone_6000

TODO:

add all components of the Supabase stack (example)

  • studio
  • kong
  • auth
  • rest
  • realtime
  • storage
  • imgproxy
  • meta
  • functions

Configure the interaction of components with the clone database

  • all components are connected to the clone database
  • tested
Edited by Vitaliy Kukharik

Merge request reports