Draft: prototype of the “dblab_supabase_runner ” server (Not for merging)
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'"
clone_create
and clone_delete
2. Configure DLE for webhooks: # 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
dblab_supabase_runner
server
3. Build image and run 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