From 7b4c7ce99deb71c2a412004c1fc869f33ac591d7 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 16:41:09 -0500 Subject: [PATCH 1/9] Run a postgres in docker compose --- tembo-cli/tests/local-app-services/docker-compose.yml | 9 +++++++++ tembo-cli/tests/local-app-services/instance-1/Dockerfile | 5 +++++ .../tests/local-app-services/instance-1/custom.conf | 1 + tembo-cli/tests/local-app-services/instance-2/Dockerfile | 7 +++++++ 4 files changed, 22 insertions(+) create mode 100644 tembo-cli/tests/local-app-services/docker-compose.yml create mode 100644 tembo-cli/tests/local-app-services/instance-1/Dockerfile create mode 100644 tembo-cli/tests/local-app-services/instance-1/custom.conf create mode 100644 tembo-cli/tests/local-app-services/instance-2/Dockerfile diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml new file mode 100644 index 000000000..c460d036d --- /dev/null +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3.8' + +services: + instance-1: + build: + context: ./instance-1 + ports: + - "5432:5432" + # restart: unless-stopped diff --git a/tembo-cli/tests/local-app-services/instance-1/Dockerfile b/tembo-cli/tests/local-app-services/instance-1/Dockerfile new file mode 100644 index 000000000..7732a238d --- /dev/null +++ b/tembo-cli/tests/local-app-services/instance-1/Dockerfile @@ -0,0 +1,5 @@ +FROM quay.io/tembo/tembo-local:latest + +RUN trunk install pg_partman + +COPY custom.conf $PGDATA/extra-configs diff --git a/tembo-cli/tests/local-app-services/instance-1/custom.conf b/tembo-cli/tests/local-app-services/instance-1/custom.conf new file mode 100644 index 000000000..06bfcac0d --- /dev/null +++ b/tembo-cli/tests/local-app-services/instance-1/custom.conf @@ -0,0 +1 @@ +shared_preload_libraries = 'pg_partman_bgw' diff --git a/tembo-cli/tests/local-app-services/instance-2/Dockerfile b/tembo-cli/tests/local-app-services/instance-2/Dockerfile new file mode 100644 index 000000000..bf6491c80 --- /dev/null +++ b/tembo-cli/tests/local-app-services/instance-2/Dockerfile @@ -0,0 +1,7 @@ +FROM quay.io/tembo/tembo-local:latest + +RUN trunk install pg_partman + +COPY custom.conf $PGDATA/extra-configs + +COPY startup.sql $PGDATA/startup-scripts From 73b31b214660f16c6e0492cc2f765f031449d429 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 17:35:04 -0500 Subject: [PATCH 2/9] Traefik dashboard access --- .../local-app-services/docker-compose.yml | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index c460d036d..075d58a7a 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -1,9 +1,45 @@ version: '3.8' services: + instance-1: build: context: ./instance-1 + networks: + - tembo + labels: + - "traefik.enable=true" + - "traefik.tcp.routers.instance-1.rule=HostSNI(`instance-1.local.tembo.io`)" + - "traefik.tcp.routers.instance-1.entrypoints=postgresql" + - "traefik.tcp.routers.instance-1.tls.passthrough=true" + - "traefik.tcp.services.instance-1.loadbalancer.server.port=5432" + + traefik: + image: traefik:v3.0.0-beta2 + command: + - "--providers.docker=true" + - "--providers.docker.exposedbydefault=false" + - "--entrypoints.ferretdb.address=:27018/tcp" + - "--entrypoints.metrics.address=:9100/tcp" + - "--entrypoints.postgresql.address=:5432/tcp" + - "--entrypoints.traefik.address=:9000/tcp" + - "--entrypoints.web.address=:8000/tcp" + - "--entrypoints.websecure.address=:8443/tcp" + - "--api.dashboard=true" + - "--api.insecure=true" + - "--metrics.prometheus=true" + - "--metrics.prometheus.entrypoint=metrics" + - "--log.level=DEBUG" + - "--accesslog=true" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock:ro" ports: + - "8000:8000" + - "8443:8443" + - "9000:9000" + - "9100:9100" - "5432:5432" - # restart: unless-stopped + - "27018:27018" + +networks: + tembo: {} From 28ae375d8808f036df258ec4cf9901b85a5c393a Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 18:37:41 -0500 Subject: [PATCH 3/9] connect through traefik to postgres --- tembo-cli/tests/local-app-services/docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index 075d58a7a..59a43c2e3 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -16,6 +16,8 @@ services: traefik: image: traefik:v3.0.0-beta2 + networks: + - tembo command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" From 38b6c1d1e4cb17ecd8bad8223798511a34b7b924 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 18:40:20 -0500 Subject: [PATCH 4/9] Two postgres servers, same port --- .../tests/local-app-services/docker-compose.yml | 12 ++++++++++++ .../tests/local-app-services/instance-2/Dockerfile | 2 -- .../tests/local-app-services/instance-2/custom.conf | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 tembo-cli/tests/local-app-services/instance-2/custom.conf diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index 59a43c2e3..a545683ed 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -14,6 +14,18 @@ services: - "traefik.tcp.routers.instance-1.tls.passthrough=true" - "traefik.tcp.services.instance-1.loadbalancer.server.port=5432" + instance-2: + build: + context: ./instance-2 + networks: + - tembo + labels: + - "traefik.enable=true" + - "traefik.tcp.routers.instance-2.rule=HostSNI(`instance-2.local.tembo.io`)" + - "traefik.tcp.routers.instance-2.entrypoints=postgresql" + - "traefik.tcp.routers.instance-2.tls.passthrough=true" + - "traefik.tcp.services.instance-2.loadbalancer.server.port=5432" + traefik: image: traefik:v3.0.0-beta2 networks: diff --git a/tembo-cli/tests/local-app-services/instance-2/Dockerfile b/tembo-cli/tests/local-app-services/instance-2/Dockerfile index bf6491c80..7732a238d 100644 --- a/tembo-cli/tests/local-app-services/instance-2/Dockerfile +++ b/tembo-cli/tests/local-app-services/instance-2/Dockerfile @@ -3,5 +3,3 @@ FROM quay.io/tembo/tembo-local:latest RUN trunk install pg_partman COPY custom.conf $PGDATA/extra-configs - -COPY startup.sql $PGDATA/startup-scripts diff --git a/tembo-cli/tests/local-app-services/instance-2/custom.conf b/tembo-cli/tests/local-app-services/instance-2/custom.conf new file mode 100644 index 000000000..06bfcac0d --- /dev/null +++ b/tembo-cli/tests/local-app-services/instance-2/custom.conf @@ -0,0 +1 @@ +shared_preload_libraries = 'pg_partman_bgw' From 6d99a812e527073078fb684fe09e0dc1bc86b7ac Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 18:48:48 -0500 Subject: [PATCH 5/9] Add comments --- .../local-app-services/docker-compose.yml | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index a545683ed..2898744f4 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -9,6 +9,9 @@ services: - tembo labels: - "traefik.enable=true" + # an 'A' record *.local.tembo.io is set to 127.0.0.1 + # connect with TLS passthrough, SNI into local instance. + # TLS termination inside postgres container. - "traefik.tcp.routers.instance-1.rule=HostSNI(`instance-1.local.tembo.io`)" - "traefik.tcp.routers.instance-1.entrypoints=postgresql" - "traefik.tcp.routers.instance-1.tls.passthrough=true" @@ -31,28 +34,29 @@ services: networks: - tembo command: + # Traefik can make routing rules by talking to + # Docker. We also connect Docker socket to container. - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" + # These are all the ports we can use for local dev - "--entrypoints.ferretdb.address=:27018/tcp" - - "--entrypoints.metrics.address=:9100/tcp" - "--entrypoints.postgresql.address=:5432/tcp" - "--entrypoints.traefik.address=:9000/tcp" - "--entrypoints.web.address=:8000/tcp" - - "--entrypoints.websecure.address=:8443/tcp" - "--api.dashboard=true" - "--api.insecure=true" - - "--metrics.prometheus=true" - - "--metrics.prometheus.entrypoint=metrics" - - "--log.level=DEBUG" - - "--accesslog=true" + # This could be enabled with debug mode on + # - "--accesslog=true" + # - "--log.level=DEBUG" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" ports: - "8000:8000" - - "8443:8443" + # Traefik dashboard at http://localhost:9000/dashboard/ + # helpful for troubleshooting Traefik configurations - "9000:9000" - - "9100:9100" - "5432:5432" + # FerretDB port - "27018:27018" networks: From a1d661dc3832772de005ef9c4d8c2f22bbc3f8c9 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 19:07:56 -0500 Subject: [PATCH 6/9] Add sample app service --- .../tests/local-app-services/docker-compose.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index 2898744f4..788c44ed4 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -17,6 +17,23 @@ services: - "traefik.tcp.routers.instance-1.tls.passthrough=true" - "traefik.tcp.services.instance-1.loadbalancer.server.port=5432" + instance-1-postgrest: + image: postgrest/postgrest:v10.0.0 + environment: + PGRST_DB_URI: "postgresql://postgres:postgres@instance-1:5432/postgres" + PGRST_DB_SCHEMA: "public, graphql" + PGRST_DB_ANON_ROLE: "postgres" + PGRST_LOG_LEVEL: "info" + networks: + - tembo + labels: + - "traefik.enable=true" + - "traefik.http.routers.instance-1-postgrest.rule=Host(`instance-1.local.tembo.io`) && (PathPrefix(`/rest/v1`) || PathPrefix(`/graphql/v1`))" + - "traefik.http.routers.instance-1-postgrest.entrypoints=web" + - "traefik.http.services.instance-1-postgrest.loadbalancer.server.port=3000" + - "traefik.http.middlewares.postgrest-stripprefix.stripprefix.prefixes=/rest/v1, /graphql/v1" + - "traefik.http.routers.postgrest.middlewares=postgrest-stripprefix" + instance-2: build: context: ./instance-2 From 1d3fcdf7de73a37f8740314f12767cf851039b9a Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 19:09:39 -0500 Subject: [PATCH 7/9] add comment --- tembo-cli/tests/local-app-services/docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index 788c44ed4..45d2882e0 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -28,7 +28,9 @@ services: - tembo labels: - "traefik.enable=true" + # The settings here depends on the app service settings - "traefik.http.routers.instance-1-postgrest.rule=Host(`instance-1.local.tembo.io`) && (PathPrefix(`/rest/v1`) || PathPrefix(`/graphql/v1`))" + # in cloud, this is websecure instead of just web - "traefik.http.routers.instance-1-postgrest.entrypoints=web" - "traefik.http.services.instance-1-postgrest.loadbalancer.server.port=3000" - "traefik.http.middlewares.postgrest-stripprefix.stripprefix.prefixes=/rest/v1, /graphql/v1" From 84a139c146072f8bc191bcee7014de9fb2e4fe32 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 19:11:22 -0500 Subject: [PATCH 8/9] Add more comment --- tembo-cli/tests/local-app-services/docker-compose.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tembo-cli/tests/local-app-services/docker-compose.yml b/tembo-cli/tests/local-app-services/docker-compose.yml index 45d2882e0..db0a702e1 100644 --- a/tembo-cli/tests/local-app-services/docker-compose.yml +++ b/tembo-cli/tests/local-app-services/docker-compose.yml @@ -1,3 +1,9 @@ +# Maybe actually using docker compose is the way to go, or maybe you want to +# do it all in just docker. Perhaps compose is better if that's more hackable +# since after generating with CLI, then a user can see how it all works. +# And if you don't use compose, then you end up re-implementing a lot of what's +# already in docker compose, like building and running several containers from +# a single config. version: '3.8' services: From 3c62a42c09df562990397d930171d03d6e050bf4 Mon Sep 17 00:00:00 2001 From: Steven Miller Date: Sun, 17 Dec 2023 19:13:51 -0500 Subject: [PATCH 9/9] Ignore in workflow --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index cdbad3fe6..ce2e9ed2f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -33,7 +33,7 @@ jobs: # in a pull request, and using all directories on the release # or main branches. changed_relative_to_ref: origin/${{ github.base_ref || 'not-a-branch' }} - ignore_dirs: ".coredb examples" + ignore_dirs: ".coredb examples tembo-cli/tests" build_and_push_images: name: Build and push images