From e50df765d3d04f367d3d6e376dc4c96324b8bb19 Mon Sep 17 00:00:00 2001 From: Nihal Maskey <26411488+maskeynihal@users.noreply.github.com> Date: Tue, 31 Jan 2023 18:37:25 +0545 Subject: [PATCH 01/14] Update nextjs-server-components.mdx Without default value, TS throw error about `createContext` should have `defaultValue` Following this blog, https://kentcdodds.com/blog/how-to-use-react-context-effectively#the-custom-consumer-hook; added `undefined` and checking if the provider is created or not. --- .../auth/auth-helpers/nextjs-server-components.mdx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx index 69a5d5e6d3c..81ec0800566 100644 --- a/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx +++ b/apps/docs/pages/guides/auth/auth-helpers/nextjs-server-components.mdx @@ -282,7 +282,7 @@ type SupabaseContext = { supabase: SupabaseClient } -const Context = createContext() +const Context = createContext(undefined) export default function SupabaseProvider({ children }: { children: React.ReactNode }) { const [supabase] = useState(() => createClient()) @@ -294,7 +294,13 @@ export default function SupabaseProvider({ children }: { children: React.ReactNo ) } -export const useSupabase = () => useContext(Context) +export const useSupabase = () => { + if (context === undefined) { + throw new Error("useSupabase must be used inside SupabaseProvider"); + } + + return useContext(Context) +} ``` > TypeScript types can be [generated with the Supabase CLI](https://supabase.com/docs/reference/javascript/typescript-support) and passed to `createBrowserSupabaseClient` to add type support to the Supabase client. From 92d82b4f148b4c5cddd4239b5ffa4c4e0586e354 Mon Sep 17 00:00:00 2001 From: Isaiah Hamilton Date: Wed, 1 Feb 2023 22:48:06 -0500 Subject: [PATCH 02/14] update github actions docs --- apps/docs/pages/guides/functions/examples/github-actions.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/pages/guides/functions/examples/github-actions.mdx b/apps/docs/pages/guides/functions/examples/github-actions.mdx index 58a85484ab9..6d381b4d7d5 100644 --- a/apps/docs/pages/guides/functions/examples/github-actions.mdx +++ b/apps/docs/pages/guides/functions/examples/github-actions.mdx @@ -31,8 +31,8 @@ jobs: runs-on: ubuntu-latest env: - SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} - PROJECT_ID: zdtdtxajzydjqzuktnqx + SUPABASE_ACCESS_TOKEN: YOUR_SUPABASE_ACCESS_TOKEN + PROJECT_ID: YOUR_SUPABASE_PROJECT_ID steps: - uses: actions/checkout@v3 From 9274d58c710968f348ecff2cfba14575125807d0 Mon Sep 17 00:00:00 2001 From: Pavel Borisov <63344111+pashkinelfe@users.noreply.github.com> Date: Thu, 2 Feb 2023 15:02:08 +0400 Subject: [PATCH 03/14] Update extensions.json --- apps/docs/data/extensions.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/apps/docs/data/extensions.json b/apps/docs/data/extensions.json index 24a76d1a821..164600eb93e 100644 --- a/apps/docs/data/extensions.json +++ b/apps/docs/data/extensions.json @@ -481,5 +481,12 @@ "default_version": "1.1", "installed_version": null, "comment": "XPath querying and XSLT" + }, + { + "name": "pg_repack", + "schema": "extensions", + "default_version": "1.4.8", + "installed_version": "1.4.8", + "comment": "optimize physical storage and remove bloat from tables and indexes" } ] From 8d55251172dc02ed88ed60a31bd4d3e7a624d210 Mon Sep 17 00:00:00 2001 From: Ruggero Tomaselli Date: Mon, 30 Jan 2023 10:32:54 +0100 Subject: [PATCH 04/14] chore: do not load backups if self-hosting --- studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx b/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx index 8c9165684ba..730528423fb 100644 --- a/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx +++ b/studio/components/layouts/DatabaseLayout/DatabaseLayout.tsx @@ -7,6 +7,7 @@ import BaseLayout from '../' import Error from 'components/ui/Error' import ProductMenu from 'components/ui/ProductMenu' import { generateDatabaseMenu } from './DatabaseMenu.utils' +import { IS_PLATFORM } from 'lib/constants' interface Props { title?: string @@ -34,7 +35,9 @@ const DatabaseLayout: FC = ({ title, children }) => { meta.extensions.load() meta.publications.load() - backups.load() + if (IS_PLATFORM) { + backups.load() + } vault.load() } }, [ui.selectedProject?.ref]) From d283b1952b63988e13be6c5977fffb40edeec796 Mon Sep 17 00:00:00 2001 From: Pavel Borisov Date: Thu, 2 Feb 2023 16:17:52 +0400 Subject: [PATCH 05/14] Add pg_repack usage docs --- .../guides/database/extensions/pg_repack.mdx | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 apps/docs/pages/guides/database/extensions/pg_repack.mdx diff --git a/apps/docs/pages/guides/database/extensions/pg_repack.mdx b/apps/docs/pages/guides/database/extensions/pg_repack.mdx new file mode 100644 index 00000000000..7073c98ae38 --- /dev/null +++ b/apps/docs/pages/guides/database/extensions/pg_repack.mdx @@ -0,0 +1,112 @@ +import Layout from '~/layouts/DefaultGuideLayout' + +export const meta = { + id: 'pg_repack', + title: 'pg_repack: Physical storage optimization and maintenance', + description: 'A tool to remove bloat from tables and indexes and optimize physical data order and physical storage', +} + +[pg_repack](https://github.com/reorg/pg_repack) is a PostgreSQL extension which lets you remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly. + +## Overview + +pg_repack provides the following methods to optimize physical storage: + +1. Online CLUSTER: ordering table data by cluster index in a non-blocking way +2. Ordering table data by specified columns +3. Online VACUUM FULL: packing rows only in a non-blocking way +4. Rebuild or relocate only the indexes of a table + +## Requirements + +1. Only superusers can use the utility +2. Target table must have a PRIMARY KEY, or at least a UNIQUE total index on a NOT NULL column. +3. Performing a full-table repack requires free disk space about twice as large as the target table and its indexes. + +## Usage + +### Enable the extension + +You can get started with pg_repack by enabling the extension in your Supabase dashboard. + + + + +1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard. +2. Click on **Extensions** in the sidebar. +3. Search for "pg_repack" and enable the extension. + + + + +```sql +-- Example: enable the "pg_repack" extension +create extension pg_repack with schema extensions; + +-- Example: disable the "postgis" extension +drop extension if exists pg_repack; +``` + + + + +### Syntax + +``` +pg_repack [OPTION]... [DBNAME] +``` + +## Examples + +It's useful for performance to support tables data ordered on disk and physically remove deleted data that remain +otherwise. + +Perform an online CLUSTER of all the clustered tables in the database `db`, and perform an online `VACUUM FULL` of all the non-clustered tables: + +``` +pg_repack db +``` + +Perform an online `VACUUM FULL` on the tables `table1` and `table2` in the database `db` (an eventual cluster index is ignored): + +``` +pg_repack --no-order --table table1 --table table2 db +``` + +Moving indexes to tablespace on a faster volume increase performance of `SELECT` queries using these indexes +drastically. `INSERT`s and `UPDATE`s of a table with indexes on a fast volume are also faster. This is very useful +when fast volume is small and can not accomodate all tables, as indexes are much smaller than tables. + +Move all indexes of table `table1` to tablespace `tbs`: + +``` +pg_repack -d db --table table1 --only-indexes --tablespace tbs +``` + +Move the specified index `idx` to tablespace `tbs`: + +``` +pg_repack -d db --index idx --tablespace tbs +``` + +For full list of options please refer: [Official pg_repack documentation](https://reorg.github.io/pg_repack/) + +## Restrictions + +1. pg_repack cannot reorganize temp tables +2. pg_repack cannot cluster tables by GiST indexes +3. You can not to perform DDL commands of the target tables except VACUUM or ANALYZE while pg_repack is working. +pg_repack holds an ACCESS SHARE lock on the target table to enforce this restriction. + +## Resources + +- [Official pg_repack documentation](https://reorg.github.io/pg_repack/) + +export const Page = ({ children }) => + +export default Page From 433ad94385dd251028ed76b85e260b89f21cca6c Mon Sep 17 00:00:00 2001 From: Pavel Borisov <63344111+pashkinelfe@users.noreply.github.com> Date: Thu, 2 Feb 2023 16:21:48 +0400 Subject: [PATCH 06/14] Update apps/docs/pages/guides/database/extensions/pg_repack.mdx Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/docs/pages/guides/database/extensions/pg_repack.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/database/extensions/pg_repack.mdx b/apps/docs/pages/guides/database/extensions/pg_repack.mdx index 7073c98ae38..448acf34a25 100644 --- a/apps/docs/pages/guides/database/extensions/pg_repack.mdx +++ b/apps/docs/pages/guides/database/extensions/pg_repack.mdx @@ -3,7 +3,8 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { id: 'pg_repack', title: 'pg_repack: Physical storage optimization and maintenance', - description: 'A tool to remove bloat from tables and indexes and optimize physical data order and physical storage', + description: + 'A tool to remove bloat from tables and indexes and optimize physical data order and physical storage', } [pg_repack](https://github.com/reorg/pg_repack) is a PostgreSQL extension which lets you remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly. From c8cf3d349044941a11ca0d73440b5e56390aec97 Mon Sep 17 00:00:00 2001 From: Pavel Borisov <63344111+pashkinelfe@users.noreply.github.com> Date: Thu, 2 Feb 2023 16:22:41 +0400 Subject: [PATCH 07/14] Update apps/docs/pages/guides/database/extensions/pg_repack.mdx Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- apps/docs/pages/guides/database/extensions/pg_repack.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/docs/pages/guides/database/extensions/pg_repack.mdx b/apps/docs/pages/guides/database/extensions/pg_repack.mdx index 448acf34a25..f5e72d718d2 100644 --- a/apps/docs/pages/guides/database/extensions/pg_repack.mdx +++ b/apps/docs/pages/guides/database/extensions/pg_repack.mdx @@ -102,7 +102,7 @@ For full list of options please refer: [Official pg_repack documentation](https: 1. pg_repack cannot reorganize temp tables 2. pg_repack cannot cluster tables by GiST indexes 3. You can not to perform DDL commands of the target tables except VACUUM or ANALYZE while pg_repack is working. -pg_repack holds an ACCESS SHARE lock on the target table to enforce this restriction. + pg_repack holds an ACCESS SHARE lock on the target table to enforce this restriction. ## Resources From 06d2db3b776f1e6bbe18b329e30ff2e39fccf8a6 Mon Sep 17 00:00:00 2001 From: dannykng Date: Thu, 2 Feb 2023 10:07:14 -0800 Subject: [PATCH 08/14] Add to nav menu --- .../Navigation/NavigationMenu/NavigationMenu.constants.ts | 5 +++++ .../database/extensions/{pg_repack.mdx => pgrepack.mdx} | 0 2 files changed, 5 insertions(+) rename apps/docs/pages/guides/database/extensions/{pg_repack.mdx => pgrepack.mdx} (100%) diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 0a6b8d4e81a..fba94fe6a22 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -404,6 +404,11 @@ export const database = { url: '/guides/database/extensions/pgnet', items: [], }, + { + name: 'pg_repack: Storage Optimization', + url: '/guides/database/extensions/pgrepack', + items: [], + }, { name: 'PostGIS: Geo queries', url: '/guides/database/extensions/postgis', diff --git a/apps/docs/pages/guides/database/extensions/pg_repack.mdx b/apps/docs/pages/guides/database/extensions/pgrepack.mdx similarity index 100% rename from apps/docs/pages/guides/database/extensions/pg_repack.mdx rename to apps/docs/pages/guides/database/extensions/pgrepack.mdx From c96bf72594bd105e02e609768eed5c6302c7e6be Mon Sep 17 00:00:00 2001 From: dannykng Date: Thu, 2 Feb 2023 11:01:23 -0800 Subject: [PATCH 09/14] Update pgrepack.mdx --- .../guides/database/extensions/pgrepack.mdx | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/apps/docs/pages/guides/database/extensions/pgrepack.mdx b/apps/docs/pages/guides/database/extensions/pgrepack.mdx index f5e72d718d2..bea7f7474b2 100644 --- a/apps/docs/pages/guides/database/extensions/pgrepack.mdx +++ b/apps/docs/pages/guides/database/extensions/pgrepack.mdx @@ -1,34 +1,31 @@ import Layout from '~/layouts/DefaultGuideLayout' export const meta = { - id: 'pg_repack', title: 'pg_repack: Physical storage optimization and maintenance', description: 'A tool to remove bloat from tables and indexes and optimize physical data order and physical storage', } -[pg_repack](https://github.com/reorg/pg_repack) is a PostgreSQL extension which lets you remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly. - -## Overview +[pg_repack](https://github.com/reorg/pg_repack) is a PostgreSQL extension to remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly. pg_repack provides the following methods to optimize physical storage: -1. Online CLUSTER: ordering table data by cluster index in a non-blocking way -2. Ordering table data by specified columns -3. Online VACUUM FULL: packing rows only in a non-blocking way -4. Rebuild or relocate only the indexes of a table +- Online CLUSTER: ordering table data by cluster index in a non-blocking way +- Ordering table data by specified columns +- Online VACUUM FULL: packing rows only in a non-blocking way +- Rebuild or relocate only the indexes of a table ## Requirements -1. Only superusers can use the utility -2. Target table must have a PRIMARY KEY, or at least a UNIQUE total index on a NOT NULL column. -3. Performing a full-table repack requires free disk space about twice as large as the target table and its indexes. +- Only superusers can use the utility. +- Target table must have a PRIMARY KEY, or a UNIQUE total index on a NOT NULL column. +- Performing a full-table repack requires free disk space about twice as large as the target table and its indexes. ## Usage ### Enable the extension -You can get started with pg_repack by enabling the extension in your Supabase dashboard. +Get started with pg_repack by enabling the extension in the Supabase Dashboard. Date: Fri, 3 Feb 2023 12:48:01 +0800 Subject: [PATCH 10/14] fix: build studio docker as standalone app --- studio/Dockerfile | 47 +++++++++++++++---------------------------- studio/next.config.js | 8 ++++++++ 2 files changed, 24 insertions(+), 31 deletions(-) diff --git a/studio/Dockerfile b/studio/Dockerfile index 32fe1d0f128..eab57740213 100644 --- a/studio/Dockerfile +++ b/studio/Dockerfile @@ -14,52 +14,37 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ && rm -rf /var/lib/apt/lists/* RUN npm i -g turbo - -# Calculate if dependencies are outdated -FROM base as turbo WORKDIR /app -COPY . . + # Prune unneeded dependencies with turbo (from apps/ for example) +FROM base as turbo +COPY . . RUN turbo prune --scope=studio --docker # Install dev dependencies (only if needed) FROM base as deps -WORKDIR /app -COPY --from=turbo /app/out/json/ . +COPY --from=turbo /app/out/json ./ COPY --from=turbo /app/out/package-lock.json ./ -RUN npm clean-install && npm cache clean --force +RUN npm clean-install -FROM deps as deps-prod -RUN npm prune --production -# Remove packages dependencies (not needed in production) -RUN rm -rf /app/packages - -# builder contains dependencies and source code not compiled -FROM deps as builder -WORKDIR /app +# dev contains dependencies and source code not compiled +FROM deps as dev COPY --from=turbo /app/out/full ./ ENTRYPOINT ["docker-entrypoint.sh"] - -FROM builder as dev EXPOSE 8082 -CMD ["npx", "turbo", "run", "dev", "--filter=studio"] +CMD ["npm", "run", "dev:studio"] # Compile NextJS -FROM builder as productionprep -WORKDIR /app -RUN npx turbo run build --scope=studio --include-dependencies --no-deps \ - && rm -rf ./studio/.next/cache/webpack +FROM dev as builder +RUN npx turbo run build --scope=studio --include-dependencies --no-deps # Copy only compiled code and dependencies FROM node:16-slim as production -# Copy package(s).json and package-lock.json -COPY --from=turbo /app/out/json /app -# Copy all dependencies for production -COPY --from=deps-prod /app /app -# Copy necessary files -COPY --from=turbo /app/out/full/studio /app/studio -COPY --from=productionprep /app/studio/.next /app/studio/.next -WORKDIR /app/studio +WORKDIR /app +COPY --from=builder /app/studio/public ./studio/public +COPY --from=builder /app/studio/.next/standalone/app ./ +COPY --from=builder /app/studio/.next/static ./studio/.next/static EXPOSE 3000 +ENTRYPOINT ["docker-entrypoint.sh"] HEALTHCHECK --interval=5s --timeout=5s --retries=3 CMD node -e "require('http').get('http://localhost:3000/api/profile', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})" -CMD ["npm", "run", "start"] +CMD ["node", "studio/server.js"] diff --git a/studio/next.config.js b/studio/next.config.js index e9ff06245e1..961746bcedb 100644 --- a/studio/next.config.js +++ b/studio/next.config.js @@ -7,6 +7,9 @@ const withBundleAnalyzer = require('@next/bundle-analyzer')({ // this is required to use shared packages in the packages directory const withTM = require('next-transpile-modules')(['ui', 'common']) +// Required for nextjs standalone build +const path = require('path') + // This file sets a custom webpack configuration to use your Next.js app // with Sentry. // https://nextjs.org/docs/api-reference/next.config.js/introduction @@ -166,6 +169,11 @@ const nextConfig = { images: { domains: ['github.com'], }, + // Ref: https://nextjs.org/docs/advanced-features/output-file-tracing#caveats + experimental: { + outputStandalone: true, + outputFileTracingRoot: path.join(__dirname, '../../'), + }, } // Export all config From 6e0fc1b04e1980c47b1c7e2d3c29dff30fed46ae Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 3 Feb 2023 12:59:15 +0800 Subject: [PATCH 11/14] fix: pin turbo version --- studio/Dockerfile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/studio/Dockerfile b/studio/Dockerfile index eab57740213..9cf0209930a 100644 --- a/studio/Dockerfile +++ b/studio/Dockerfile @@ -9,22 +9,20 @@ # docker builder prune FROM node:16-slim as base -RUN apt-get update && apt-get install -y --no-install-recommends \ - python3 \ - build-essential \ - && rm -rf /var/lib/apt/lists/* -RUN npm i -g turbo + WORKDIR /app # Prune unneeded dependencies with turbo (from apps/ for example) FROM base as turbo COPY . . -RUN turbo prune --scope=studio --docker +# Upstream bug: https://github.com/vercel/turbo/issues/3570 +RUN npx turbo@1.7.0 prune --scope=studio --docker # Install dev dependencies (only if needed) FROM base as deps COPY --from=turbo /app/out/json ./ COPY --from=turbo /app/out/package-lock.json ./ +# No need to clean cache because production uses standalone build RUN npm clean-install # dev contains dependencies and source code not compiled From 00c27536a96ca40692773e1edff642b8dea9054a Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 3 Feb 2023 13:44:41 +0800 Subject: [PATCH 12/14] chore: rebase production image --- studio/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/studio/Dockerfile b/studio/Dockerfile index 9cf0209930a..570f6f3a239 100644 --- a/studio/Dockerfile +++ b/studio/Dockerfile @@ -37,8 +37,7 @@ FROM dev as builder RUN npx turbo run build --scope=studio --include-dependencies --no-deps # Copy only compiled code and dependencies -FROM node:16-slim as production -WORKDIR /app +FROM base as production COPY --from=builder /app/studio/public ./studio/public COPY --from=builder /app/studio/.next/standalone/app ./ COPY --from=builder /app/studio/.next/static ./studio/.next/static From 2760183fa6d2f10c3ab9a1a852ea57b14086c8c3 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 3 Feb 2023 14:23:57 +0800 Subject: [PATCH 13/14] fix: add dependencies for arm64 docker build --- studio/Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/studio/Dockerfile b/studio/Dockerfile index 570f6f3a239..8f2313645d0 100644 --- a/studio/Dockerfile +++ b/studio/Dockerfile @@ -22,6 +22,13 @@ RUN npx turbo@1.7.0 prune --scope=studio --docker FROM base as deps COPY --from=turbo /app/out/json ./ COPY --from=turbo /app/out/package-lock.json ./ +# Install additional dependencies for arm64 build (required by bufferutil) +ARG TARGETARCH +RUN if [ "$TARGETARCH" = "arm64" ]; then \ + apt-get update && apt-get install -y --no-install-recommends \ + python3 \ + build-essential \ + && rm -rf /var/lib/apt/lists/*; fi # No need to clean cache because production uses standalone build RUN npm clean-install From 69a4f1465d7e0dccb3b18ebee9efda2e47da15c2 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Fri, 3 Feb 2023 14:40:50 +0800 Subject: [PATCH 14/14] chore: add studio dev compose service --- docker/dev/docker-compose.dev.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docker/dev/docker-compose.dev.yml b/docker/dev/docker-compose.dev.yml index 2df9520bbc2..ca19a0ad781 100644 --- a/docker/dev/docker-compose.dev.yml +++ b/docker/dev/docker-compose.dev.yml @@ -1,6 +1,13 @@ version: "3.8" services: + studio: + build: + context: .. + dockerfile: studio/Dockerfile + target: dev + ports: + - 8082:8082 mail: container_name: supabase-mail image: inbucket/inbucket:3.0.3