From 6822a518e6a959c0a79d375e9f9fa9ab94e2ffce Mon Sep 17 00:00:00 2001 From: Alan Frigo Date: Tue, 16 Dec 2025 19:41:56 -0300 Subject: [PATCH 1/2] Rebrand, Added Custom domain features --- .github/FUNDING.yml | 3 +- .gitignore | 2 + README.md | 59 ++- package-lock.json | 55 ++- package.json | 6 +- prisma/schema.prisma | 16 +- public/demo.png | Bin 74393 -> 90942 bytes public/icon.png | Bin 5080 -> 20836 bytes public/logo.png | Bin 14494 -> 16037 bytes src/app/api/projects/[id]/domain/route.ts | 128 +++++-- src/app/api/settings/panel-domain/route.ts | 143 ++++++++ src/app/dashboard/page.tsx | 72 ++-- .../projects/[id]/configure/page.tsx | 347 ++++++++++++++++-- src/app/dashboard/settings/page.tsx | 271 ++++++++++++++ src/lib/traefik.ts | 262 ++++++++----- traefik/dynamic/panel.yml | 17 - 16 files changed, 1151 insertions(+), 230 deletions(-) create mode 100644 src/app/api/settings/panel-domain/route.ts create mode 100644 src/app/dashboard/settings/page.tsx delete mode 100644 traefik/dynamic/panel.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index e445aca..8c28701 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ -alanfrigo \ No newline at end of file +github: alanfrigo +buy_me_a_coffee: alanfrigo \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6eb4536..ba588cd 100644 --- a/.gitignore +++ b/.gitignore @@ -44,6 +44,8 @@ next-env.d.ts # Traefik ACME certificates (production) /traefik/acme +# Traefik dynamic configs (auto-generated) +/traefik/dynamic/*.yml .env .env.local \ No newline at end of file diff --git a/README.md b/README.md index d223d67..4e43146 100644 --- a/README.md +++ b/README.md @@ -131,10 +131,63 @@ npm run dev ### Custom Domain Configuration -1. Point your domain DNS A record to the server IP -2. Navigate to project settings > Domain +To use a custom domain for your Supabase project, follow these steps: + +#### Prerequisites + +- A domain you own with access to DNS settings +- Your SupaPanel server's public IP address + +#### Step 1: Configure DNS Records + +Add the following DNS records pointing to your server's IP: + +| Type | Name | Value | +|------|------|-------| +| A | `api.example.com` | `YOUR_SERVER_IP` | +| A | `studio.api.example.com` | `YOUR_SERVER_IP` | + +> **Note:** Replace `api.example.com` with your chosen domain and `YOUR_SERVER_IP` with your server's public IP address. + +#### Step 2: Configure Domain in SupaPanel + +1. Go to **Dashboard** → Select your project → Click **Configure** +2. Find the **Custom Domain Configuration** section at the top 3. Enter your domain (e.g., `api.example.com`) -4. Traefik automatically provisions SSL certificates +4. Click **Save Domain** + +#### Step 3: Automatic SSL Provisioning + +Once DNS is configured: +- Traefik automatically detects the domain +- Let's Encrypt issues an SSL certificate +- HTTPS is enabled automatically (no manual configuration needed) + +#### Resulting URLs + +After configuration, your Supabase services will be available at: + +| Service | URL | +|---------|-----| +| **Supabase API** | `https://api.example.com` | +| **Supabase Studio** | `https://studio.api.example.com` | +| **PostgREST** | `https://api.example.com/rest/v1` | +| **Auth** | `https://api.example.com/auth/v1` | +| **Storage** | `https://api.example.com/storage/v1` | +| **Realtime** | `wss://api.example.com/realtime/v1` | + +### Panel Domain Configuration + +You can also set up a custom domain for the SupaPanel dashboard itself: + +1. Go to **Dashboard** → Click **Settings** (gear icon in header) +2. In the **Panel Domain** section, enter your domain (e.g., `panel.example.com`) +3. Point your domain's DNS A record to this server's IP address +4. Click **Save Domain** + +After configuration: +- Access your SupaPanel at `https://panel.example.com` +- Direct IP access (`http://YOUR_IP:3000`) remains available as fallback --- diff --git a/package-lock.json b/package-lock.json index 9750f63..6850694 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "supapanel", "version": "0.1.0", "dependencies": { - "@prisma/client": "^6.15.0", + "@prisma/client": "^6.19.1", "@radix-ui/react-label": "^2.1.7", "@radix-ui/react-slot": "^1.2.3", "@types/bcryptjs": "^2.4.6", @@ -20,7 +20,6 @@ "next": "^15.5.9", "next-auth": "^4.24.11", "nodemailer": "^7.0.11", - "prisma": "^6.15.0", "react": "19.2.3", "react-dom": "19.2.3", "tailwind-merge": "^3.3.1", @@ -35,6 +34,7 @@ "eslint": "^9", "eslint-config-next": "16.0.10", "postcss": "^8.5.6", + "prisma": "^6.19.1", "tailwindcss": "^3.4.15", "tw-animate-css": "^1.3.7", "typescript": "^5" @@ -790,7 +790,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2037,6 +2036,7 @@ "version": "6.19.1", "resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.19.1.tgz", "integrity": "sha512-bUL/aYkGXLwxVGhJmQMtslLT7KPEfUqmRa919fKI4wQFX4bIFUKiY8Jmio/2waAjjPYrtuDHa7EsNCnJTXxiOw==", + "devOptional": true, "license": "Apache-2.0", "dependencies": { "c12": "3.1.0", @@ -2049,12 +2049,14 @@ "version": "6.19.1", "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.19.1.tgz", "integrity": "sha512-h1JImhlAd/s5nhY/e9qkAzausWldbeT+e4nZF7A4zjDYBF4BZmKDt4y0jK7EZapqOm1kW7V0e9agV/iFDy3fWw==", + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/engines": { "version": "6.19.1", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.19.1.tgz", "integrity": "sha512-xy95dNJ7DiPf9IJ3oaVfX785nbFl7oNDzclUF+DIiJw6WdWCvPl0LPU0YqQLsrwv8N64uOQkH391ujo3wSo+Nw==", + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -2068,12 +2070,14 @@ "version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz", "integrity": "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==", + "devOptional": true, "license": "Apache-2.0" }, "node_modules/@prisma/fetch-engine": { "version": "6.19.1", "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.1.tgz", "integrity": "sha512-mmgcotdaq4VtAHO6keov3db+hqlBzQS6X7tR7dFCbvXjLVTxBYdSJFRWz+dq7F9p6dvWyy1X0v8BlfRixyQK6g==", + "devOptional": true, "license": "Apache-2.0", "dependencies": { "@prisma/debug": "6.19.1", @@ -2085,6 +2089,7 @@ "version": "6.19.1", "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.1.tgz", "integrity": "sha512-zsg44QUiQAnFUyh6Fbt7c9HjMXHwFTqtrgcX7DAZmRgnkPyYT7Sh8Mn8D5PuuDYNtMOYcpLGg576MLfIORsBYw==", + "devOptional": true, "license": "Apache-2.0", "dependencies": { "@prisma/debug": "6.19.1" @@ -2760,6 +2765,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "devOptional": true, "license": "MIT" }, "node_modules/@swc/helpers": { @@ -2834,7 +2840,6 @@ "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2845,7 +2850,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -2895,7 +2899,6 @@ "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.50.0", "@typescript-eslint/types": "8.50.0", @@ -3382,7 +3385,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3812,7 +3814,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3831,6 +3832,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz", "integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==", + "devOptional": true, "license": "MIT", "dependencies": { "chokidar": "^4.0.3", @@ -3965,6 +3967,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "devOptional": true, "license": "MIT", "dependencies": { "readdirp": "^4.0.1" @@ -3980,6 +3983,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "devOptional": true, "license": "MIT", "dependencies": { "consola": "^3.2.3" @@ -4052,12 +4056,14 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "devOptional": true, "license": "MIT" }, "node_modules/consola": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "devOptional": true, "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -4203,6 +4209,7 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", + "devOptional": true, "license": "BSD-3-Clause", "engines": { "node": ">=16.0.0" @@ -4248,12 +4255,14 @@ "version": "6.1.4", "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "devOptional": true, "license": "MIT" }, "node_modules/destr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "devOptional": true, "license": "MIT" }, "node_modules/detect-libc": { @@ -4295,6 +4304,7 @@ "version": "16.6.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "devOptional": true, "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -4322,6 +4332,7 @@ "version": "3.18.4", "resolved": "https://registry.npmjs.org/effect/-/effect-3.18.4.tgz", "integrity": "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==", + "devOptional": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", @@ -4346,6 +4357,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz", "integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=14" @@ -4557,7 +4569,6 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4743,7 +4754,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -5001,12 +5011,14 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "devOptional": true, "license": "MIT" }, "node_modules/fast-check": { "version": "3.23.2", "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz", "integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==", + "devOptional": true, "funding": [ { "type": "individual", @@ -5344,6 +5356,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "devOptional": true, "license": "MIT", "dependencies": { "citty": "^0.1.6", @@ -6020,6 +6033,7 @@ "version": "2.6.1", "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" @@ -6466,6 +6480,7 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz", "integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==", + "devOptional": true, "license": "MIT" }, "node_modules/node-releases": { @@ -6480,7 +6495,6 @@ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.11.tgz", "integrity": "sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==", "license": "MIT-0", - "peer": true, "engines": { "node": ">=6.0.0" } @@ -6498,6 +6512,7 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.2.tgz", "integrity": "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==", + "devOptional": true, "license": "MIT", "dependencies": { "citty": "^0.1.6", @@ -6654,6 +6669,7 @@ "version": "2.0.11", "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "devOptional": true, "license": "MIT" }, "node_modules/oidc-token-hash": { @@ -6791,12 +6807,14 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "devOptional": true, "license": "MIT" }, "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "devOptional": true, "license": "MIT" }, "node_modules/picocolors": { @@ -6839,6 +6857,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "devOptional": true, "license": "MIT", "dependencies": { "confbox": "^0.2.2", @@ -6875,7 +6894,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -7018,7 +7036,6 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.0.tgz", "integrity": "sha512-rytDAoiXr3+t6OIP3WGlDd0ouCUG1iCWzkcY3++Nreuoi17y6T5i/zRhe6uYfoVcxq6YU+sBtJouuRDsq8vvqA==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -7056,9 +7073,9 @@ "version": "6.19.1", "resolved": "https://registry.npmjs.org/prisma/-/prisma-6.19.1.tgz", "integrity": "sha512-XRfmGzh6gtkc/Vq3LqZJcS2884dQQW3UhPo6jNRoiTW95FFQkXFg8vkYEy6og+Pyv0aY7zRQ7Wn1Cvr56XjhQQ==", + "devOptional": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@prisma/config": "6.19.1", "@prisma/engines": "6.19.1" @@ -7104,6 +7121,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "devOptional": true, "funding": [ { "type": "individual", @@ -7140,6 +7158,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "devOptional": true, "license": "MIT", "dependencies": { "defu": "^6.1.4", @@ -7151,7 +7170,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7161,7 +7179,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -7189,6 +7206,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "devOptional": true, "license": "MIT", "engines": { "node": ">= 14.18.0" @@ -7845,7 +7863,6 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "license": "MIT", - "peer": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -8006,6 +8023,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "devOptional": true, "license": "MIT", "engines": { "node": ">=18" @@ -8049,7 +8067,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -8214,7 +8231,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8503,7 +8519,6 @@ "integrity": "sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 867e837..f8def94 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ "type-check": "tsc --noEmit" }, "dependencies": { - "@prisma/client": "^6.15.0", + "@prisma/client": "^6.19.1", "@radix-ui/react-label": "^2.1.7", "@radix-ui/react-slot": "^1.2.3", "@types/bcryptjs": "^2.4.6", @@ -26,7 +26,6 @@ "next": "^15.5.9", "next-auth": "^4.24.11", "nodemailer": "^7.0.11", - "prisma": "^6.15.0", "react": "19.2.3", "react-dom": "19.2.3", "tailwind-merge": "^3.3.1", @@ -41,8 +40,9 @@ "eslint": "^9", "eslint-config-next": "16.0.10", "postcss": "^8.5.6", + "prisma": "^6.19.1", "tailwindcss": "^3.4.15", "tw-animate-css": "^1.3.7", "typescript": "^5" } -} \ No newline at end of file +} diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4956cfd..f716c07 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -45,8 +45,10 @@ model Project { slug String @unique description String? status String @default("active") // active, paused, stopped - domain String? // Custom domain for this project - domainVerified Boolean @default(false) // Whether the domain is verified + domain String? // Custom domain for API (Kong) + domainVerified Boolean @default(false) // Whether the API domain is verified + studioDomain String? // Custom domain for Supabase Studio + studioDomainVerified Boolean @default(false) // Whether the Studio domain is verified createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -97,3 +99,13 @@ model PasswordResetToken { @@map("password_reset_tokens") } + +model PanelSettings { + id String @id @default(uuid()) + key String @unique + value String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@map("panel_settings") +} diff --git a/public/demo.png b/public/demo.png index 04557a2de1b51e1edb6f8d5749a02d9ad26ec38e..9be899c29b15854ff3bb4c074d0d3049c4d235b9 100644 GIT binary patch literal 90942 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

Zw}SK%&a?2J*=MH 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 QK|{jI(soszg~y)%0SN9nKL7v# literal 74393 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 diff --git a/public/icon.png b/public/icon.png index a0eae322a4f970c7fff6849cf407b0be8b1c5723..6d77eb012fc8122506bdb0968315021c1d303325 100644 GIT binary patch literal 20836 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 HZc+aqkwZi# literal 5080 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 diff --git a/public/logo.png b/public/logo.png index 17b45d38c7dbc59dce845774678ff033be36cf34..ffc162c64b1ac4d1d7d83d20f75b1e6bfddcf1db 100644 GIT binary patch literal 16037 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 literal 14494 zcmdUWVDhxF=AcxI=L$?o!;PxJ!z=J6z6r-}Afw z!o44|lkAzbXW6Woy=Fa;s>(og6cQ8|7#MVUIcaqmn0F#?zcY~#-mY001poO${wk;I z3Il_R`=1XiOj-uf+f7(kb)Y0n_m}&^>lj(aH82*p)(h{0pu*aDb z31mQz^-f)M^$ujWkgBzym%u(bqtry?8d;Zx4puMc5Ec77lViQ=5#q%f|3xbZI|h(n zn39-ulN90g8!S0q2XXASU9wT1op|^ugMlB_O#_aA;dt_WO$$c`#cGnSSj*!h6{^Up zq2a7nX3}-XX*&oROA?7HzHxE`CXaFRKFskK zkATy&OPqhS5~r46I^Y~+UE@_#vw@9vWNj4S@-URyO8HN7Oj;)R>ho{cX_PDtdNaM+ zl;h_Odf@*WzpsL?R_-2x`F~Sed?Y>hcJq0%!uUtwgL?~$auAAvS}(BX*9^>mY>;o^ zNiC943&$8AF%>(n5^#Q=`R-p?WP8S=vSchBsYUocnuAruydS0h*Yf+Vg{7<`c0A5m z^fbfee-G=ay`(J@`rE+#gkD+z3qq5lIokgQbixfSn|0{(BKZB1CReGjB zXm?=@_1}K`_)%FM96RE4lH2?g|M2_}npdPkv#Qj84|3UM``2&U#iyqE03Z``=l>1- z{Pmp$WkLCM=JMS`Sx|pTN6FJnF92KtuZ7AW%I$9`?xgi zclr;W9b4AhR9C3R3zit`e5z>Jl7c-qB7aosS%a?s+^9{6+o5^jky?72VRm-$do>rA z=C40&THi|OnF@u$t)<+vX>(i5iKC@A8;aI{7(_;*A`L{zWCV4pQi`~?3MT@W`4TBZ z;zAZg%R@Z>)NPg=C!@rXfcJ?J|6_#0a-PBA2nqA#cdegcQFTSdeST9%Y|;cB1g_4% zQBT_7P+5dT;7UJ+vL6GU?E)PcjxM^`a*Y|p-=t1dy^29L$50mY4!5k(=^`OiN7@o- z;jv)@gx`{BJYjKhk(dF0z&&#%J(rqWpu8C%KPb-{wBlh|5pX5cDA5r}!UOQIvdP{} zi(+hx|M;HDf}{7IBWFQC1%m?LU%KecJTZt-S)2gN3PL_*-MI&?a#$+051e)`G2vuu zUEVoRL?kK^0AuBu+BzImQr#^3i)I>@;%e|b!^UnIzOK;Q1=Ubk2&rpnj==0t9+zP*Y-UOMgw_UPS>(S!&4}oyMWAxUe z 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 diff --git a/src/app/api/projects/[id]/domain/route.ts b/src/app/api/projects/[id]/domain/route.ts index 0c1a5bd..2bc1527 100644 --- a/src/app/api/projects/[id]/domain/route.ts +++ b/src/app/api/projects/[id]/domain/route.ts @@ -6,7 +6,7 @@ import { generateProjectTraefikConfig, verifyDomainDNS, getProjectPorts } from ' /** * GET /api/projects/[id]/domain - * Get the domain configuration for a project + * Get the domain configuration for a project (API + Studio domains) */ export async function GET( request: NextRequest, @@ -32,6 +32,8 @@ export async function GET( id: true, domain: true, domainVerified: true, + studioDomain: true, + studioDomainVerified: true, }, }) @@ -42,6 +44,8 @@ export async function GET( return NextResponse.json({ domain: project.domain, verified: project.domainVerified, + studioDomain: project.studioDomain, + studioVerified: project.studioDomainVerified, }) } catch (error) { console.error('Get domain error:', error) @@ -51,7 +55,7 @@ export async function GET( /** * PUT /api/projects/[id]/domain - * Set or update the custom domain for a project + * Set or update the custom domains for a project (API and/or Studio) */ export async function PUT( request: NextRequest, @@ -70,16 +74,21 @@ export async function PUT( } const { id } = await params - const { domain } = await request.json() - - if (!domain) { - return NextResponse.json({ error: 'Domain is required' }, { status: 400 }) - } + const { domain, studioDomain } = await request.json() // Validate domain format const domainRegex = /^[a-zA-Z0-9][a-zA-Z0-9-_.]*\.[a-zA-Z]{2,}$/ - if (!domainRegex.test(domain)) { - return NextResponse.json({ error: 'Invalid domain format' }, { status: 400 }) + + if (domain && !domainRegex.test(domain)) { + return NextResponse.json({ error: 'Invalid API domain format' }, { status: 400 }) + } + + if (studioDomain && !domainRegex.test(studioDomain)) { + return NextResponse.json({ error: 'Invalid Studio domain format' }, { status: 400 }) + } + + if (!domain && !studioDomain) { + return NextResponse.json({ error: 'At least one domain is required' }, { status: 400 }) } // Check if project exists @@ -94,28 +103,51 @@ export async function PUT( return NextResponse.json({ error: 'Project not found' }, { status: 404 }) } - // Check if domain is already in use by another project - const existingProject = await prisma.project.findFirst({ - where: { - domain, - id: { not: id }, - }, - }) + // Check if API domain is already in use by another project + if (domain) { + const existingApiProject = await prisma.project.findFirst({ + where: { + domain, + id: { not: id }, + }, + }) + if (existingApiProject) { + return NextResponse.json({ error: 'API domain is already in use' }, { status: 409 }) + } + } - if (existingProject) { - return NextResponse.json({ error: 'Domain is already in use' }, { status: 409 }) + // Check if Studio domain is already in use by another project + if (studioDomain) { + const existingStudioProject = await prisma.project.findFirst({ + where: { + studioDomain, + id: { not: id }, + }, + }) + if (existingStudioProject) { + return NextResponse.json({ error: 'Studio domain is already in use' }, { status: 409 }) + } } - // Verify domain DNS points to this server - const dnsValid = await verifyDomainDNS(domain) + // Verify domain DNS + const apiDnsValid = domain ? await verifyDomainDNS(domain) : false + const studioDnsValid = studioDomain ? await verifyDomainDNS(studioDomain) : false - // Update the project's domain + // Build update data + const updateData: Record = {} + if (domain !== undefined) { + updateData.domain = domain || null + updateData.domainVerified = domain ? apiDnsValid : false + } + if (studioDomain !== undefined) { + updateData.studioDomain = studioDomain || null + updateData.studioDomainVerified = studioDomain ? studioDnsValid : false + } + + // Update the project's domains const updatedProject = await prisma.project.update({ where: { id }, - data: { - domain, - domainVerified: dnsValid, - }, + data: updateData, }) // Generate Traefik configuration for this project @@ -125,20 +157,40 @@ export async function PUT( }) const ports = getProjectPorts(envVarsMap) - await generateProjectTraefikConfig({ - projectSlug: project.slug, - domain, - kongPort: ports.kongPort, - studioPort: ports.studioPort, - }) + // Only generate Traefik config if we have at least one domain + const finalDomain = domain || updatedProject.domain + const finalStudioDomain = studioDomain || updatedProject.studioDomain + + if (finalDomain || finalStudioDomain) { + await generateProjectTraefikConfig({ + projectSlug: project.slug, + domain: finalDomain || '', + studioDomain: finalStudioDomain || '', + kongPort: ports.kongPort, + studioPort: ports.studioPort, + }) + } + + // Build response message + const messages: string[] = [] + if (domain) { + messages.push(apiDnsValid + ? 'API domain verified' + : 'API domain configured (DNS pending)') + } + if (studioDomain) { + messages.push(studioDnsValid + ? 'Studio domain verified' + : 'Studio domain configured (DNS pending)') + } return NextResponse.json({ success: true, domain: updatedProject.domain, verified: updatedProject.domainVerified, - message: dnsValid - ? 'Domain configured and verified successfully' - : 'Domain configured. DNS verification pending - make sure your domain points to this server.', + studioDomain: updatedProject.studioDomain, + studioVerified: updatedProject.studioDomainVerified, + message: messages.join('. ') || 'Domains updated successfully', }) } catch (error) { console.error('Set domain error:', error) @@ -148,7 +200,7 @@ export async function PUT( /** * DELETE /api/projects/[id]/domain - * Remove the custom domain from a project + * Remove the custom domains from a project */ export async function DELETE( request: NextRequest, @@ -176,12 +228,14 @@ export async function DELETE( return NextResponse.json({ error: 'Project not found' }, { status: 404 }) } - // Update the project (remove domain) + // Update the project (remove domains) await prisma.project.update({ where: { id }, data: { domain: null, domainVerified: false, + studioDomain: null, + studioDomainVerified: false, }, }) @@ -191,7 +245,7 @@ export async function DELETE( return NextResponse.json({ success: true, - message: 'Domain removed successfully', + message: 'Domains removed successfully', }) } catch (error) { console.error('Delete domain error:', error) diff --git a/src/app/api/settings/panel-domain/route.ts b/src/app/api/settings/panel-domain/route.ts new file mode 100644 index 0000000..212bd8d --- /dev/null +++ b/src/app/api/settings/panel-domain/route.ts @@ -0,0 +1,143 @@ +import { NextRequest, NextResponse } from 'next/server' +import { prisma } from '@/lib/db' +import { validateSession } from '@/lib/auth' +import { cookies } from 'next/headers' +import { generatePanelTraefikConfig, verifyDomainDNS } from '@/lib/traefik' + +/** + * GET /api/settings/panel-domain + * Get the panel domain configuration + */ +export async function GET() { + try { + // Validate session + const cookieStore = await cookies() + const sessionToken = cookieStore.get('session')?.value + if (!sessionToken) { + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) + } + const session = await validateSession(sessionToken) + if (!session) { + return NextResponse.json({ error: 'Invalid session' }, { status: 401 }) + } + + const domainSetting = await prisma.panelSettings.findUnique({ + where: { key: 'panel_domain' }, + }) + + const verifiedSetting = await prisma.panelSettings.findUnique({ + where: { key: 'panel_domain_verified' }, + }) + + return NextResponse.json({ + domain: domainSetting?.value || null, + verified: verifiedSetting?.value === 'true', + }) + } catch (error) { + console.error('Get panel domain error:', error) + return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) + } +} + +/** + * PUT /api/settings/panel-domain + * Set or update the panel domain + */ +export async function PUT(request: NextRequest) { + try { + // Validate session + const cookieStore = await cookies() + const sessionToken = cookieStore.get('session')?.value + if (!sessionToken) { + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) + } + const session = await validateSession(sessionToken) + if (!session) { + return NextResponse.json({ error: 'Invalid session' }, { status: 401 }) + } + + const { domain } = await request.json() + + if (!domain) { + return NextResponse.json({ error: 'Domain is required' }, { status: 400 }) + } + + // Validate domain format + const domainRegex = /^[a-zA-Z0-9][a-zA-Z0-9-_.]*\.[a-zA-Z]{2,}$/ + if (!domainRegex.test(domain)) { + return NextResponse.json({ error: 'Invalid domain format' }, { status: 400 }) + } + + // Verify domain DNS points to this server + const dnsValid = await verifyDomainDNS(domain) + + // Save the domain setting + await prisma.panelSettings.upsert({ + where: { key: 'panel_domain' }, + update: { value: domain }, + create: { key: 'panel_domain', value: domain }, + }) + + // Save the verification status + await prisma.panelSettings.upsert({ + where: { key: 'panel_domain_verified' }, + update: { value: dnsValid.toString() }, + create: { key: 'panel_domain_verified', value: dnsValid.toString() }, + }) + + // Generate Traefik configuration for the panel + await generatePanelTraefikConfig(domain) + + return NextResponse.json({ + success: true, + domain, + verified: dnsValid, + message: dnsValid + ? 'Panel domain configured and verified successfully. The panel will be accessible at https://' + domain + : 'Panel domain configured. DNS verification pending - make sure your domain points to this server.', + }) + } catch (error) { + console.error('Set panel domain error:', error) + return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) + } +} + +/** + * DELETE /api/settings/panel-domain + * Remove the panel domain + */ +export async function DELETE() { + try { + // Validate session + const cookieStore = await cookies() + const sessionToken = cookieStore.get('session')?.value + if (!sessionToken) { + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) + } + const session = await validateSession(sessionToken) + if (!session) { + return NextResponse.json({ error: 'Invalid session' }, { status: 401 }) + } + + // Delete the settings + await prisma.panelSettings.deleteMany({ + where: { + key: { + in: ['panel_domain', 'panel_domain_verified'], + }, + }, + }) + + // Remove Traefik configuration + const { removePanelTraefikConfig } = await import('@/lib/traefik') + await removePanelTraefikConfig() + + return NextResponse.json({ + success: true, + message: 'Panel domain removed successfully', + }) + } catch (error) { + console.error('Delete panel domain error:', error) + return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) + } +} diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index 49c0818..1f6f739 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -56,7 +56,7 @@ export default function DashboardPage() { try { setInitProgress('Creating directories...') await new Promise(resolve => setTimeout(resolve, 500)) // Small delay for UX - + setInitProgress('Cloning Supabase repository (this may take a few minutes)...') const response = await fetch('/api/projects/initialize', { method: 'POST', @@ -95,14 +95,14 @@ export default function DashboardPage() { const handleManageProject = async (project: Project) => { setSelectedProject(project) - + // Fetch project URLs from environment variables try { const response = await fetch(`/api/projects/${project.id}/env`) if (response.ok) { const data = await response.json() const envVars = data.envVars || {} - + // Extract URLs from environment variables const urls: Record = {} if (envVars.KONG_HTTP_PORT) { @@ -117,7 +117,7 @@ export default function DashboardPage() { if (envVars.POSTGRES_PORT) { urls['Database'] = `postgresql://postgres:${envVars.POSTGRES_PASSWORD || 'password'}@localhost:${envVars.POSTGRES_PORT}/postgres` } - + setProjectUrls(urls) } } catch (error) { @@ -127,7 +127,7 @@ export default function DashboardPage() { const handleDeleteProject = async () => { if (!selectedProject) return - + setDeleting(true) try { const response = await fetch(`/api/projects/${selectedProject.id}`, { @@ -159,7 +159,7 @@ export default function DashboardPage() { useEffect(() => { fetchProjects() - // eslint-disable-next-line react-hooks/exhaustive-deps + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) if (loading) { @@ -175,20 +175,29 @@ export default function DashboardPage() {

- SupaPanel
- +
+ + +
@@ -208,7 +217,7 @@ export default function DashboardPage() { {error} )} - + {initProgress && (
@@ -216,19 +225,19 @@ export default function DashboardPage() { {initProgress}
-
+
)} - - - +

This will clone the Supabase repository (~500MB) and set up the workspace

@@ -272,11 +281,10 @@ export default function DashboardPage() {
{project.name} -
+
{project.status}
@@ -322,11 +330,11 @@ export default function DashboardPage() {
- +

{selectedProject.name}

{selectedProject.description}

- + {/* Project URLs */}
Service URLs:
@@ -352,7 +360,7 @@ export default function DashboardPage() { )}
- +
- +

Are you sure you want to delete {selectedProject.name}? @@ -411,7 +419,7 @@ export default function DashboardPage() {

  • Delete the project from the database
  • - +
    + {domain && ( + + )} +
    + + {!domainVerified && domain && ( +
    + DNS Not Verified: Make sure your domain's A record points to this server's IP address. + DNS propagation can take up to 48 hours. +
    + )} + + {domain && ( +
    + Tip: When you save the domain, the URL fields below (Site URL, API External URL, Supabase Public URL) are automatically updated to use your custom domain. +
    + )} + + + + {/* Secrets Section */} @@ -320,7 +591,7 @@ export default function ConfigureProjectPage({ params }: ConfigureProjectPagePro These are the most critical security settings. Generate new secure values for production use. - - - - - + + + + +
    +
    +
    +

    Panel Settings

    +

    + Configure your SupaPanel dashboard settings +

    +
    + + {success && ( +
    + {success} +
    + )} + + {error && ( +
    + {error} +
    + )} + +
    + {/* Panel Domain Configuration */} + + + 🌐 Panel Domain + + Configure a custom domain for accessing this SupaPanel dashboard. + Traefik will automatically provision SSL certificates via Let's Encrypt. + + + +
    +
    +

    How Panel Domain Works

    +
      +
    1. Point your domain's DNS A record to this server's IP address
    2. +
    3. Enter your domain below (e.g., panel.example.com)
    4. +
    5. Traefik will automatically provision an SSL certificate
    6. +
    7. Access your panel at https://panel.example.com
    8. +
    +
    + +
    + +
    + setDomain(e.target.value)} + /> + {domain && ( +
    + {domainVerified ? '✓ Verified' : '⏳ Pending'} +
    + )} +
    +

    + Enter the domain you want to use for this SupaPanel dashboard (without https://) +

    +
    + + {domain && ( +
    + +
    + https://{domain} +
    +
    + )} + +
    + + {domain && ( + + )} +
    + + {!domainVerified && domain && ( +
    + DNS Not Verified: Make sure your domain's A record points to this server's IP address. + DNS propagation can take up to 48 hours. You can still access the panel via IP:3000 in the meantime. +
    + )} +
    +
    +
    + + {/* Current Access Info */} + + + 📌 Access Information + + Current ways to access your SupaPanel dashboard + + + +
    + + +
    +
    +
    + + ) +} diff --git a/src/lib/traefik.ts b/src/lib/traefik.ts index 05d159b..62a1b93 100644 --- a/src/lib/traefik.ts +++ b/src/lib/traefik.ts @@ -8,32 +8,35 @@ import * as path from 'path' // Get the base path for Traefik dynamic configs function getTraefikDynamicPath(): string { - const mode = process.env.SUPAPANEL_MODE || 'development' - if (mode === 'production') { - return '/etc/supapanel/traefik/dynamic' - } - return path.join(process.cwd(), 'traefik', 'dynamic') + const mode = process.env.SUPAPANEL_MODE || 'development' + if (mode === 'production') { + return '/etc/supapanel/traefik/dynamic' + } + return path.join(process.cwd(), 'traefik', 'dynamic') } interface TraefikConfig { - projectSlug: string - domain: string - kongPort: number - studioPort: number + projectSlug: string + domain: string // API domain (Kong) + studioDomain?: string // Studio domain (optional, separate from API) + kongPort: number + studioPort: number } /** * Generate Traefik routing configuration for a Supabase project + * Supports separate domains for API (Kong) and Studio */ export async function generateProjectTraefikConfig(config: TraefikConfig): Promise { - const { projectSlug, domain, kongPort, studioPort } = config + const { projectSlug, domain, studioDomain, kongPort, studioPort } = config - const traefikConfig = `# Auto-generated Traefik routing for project: ${projectSlug} -# Domain: ${domain} -# Generated at: ${new Date().toISOString()} + // Build routers section based on which domains are configured + let routersConfig = '' + let servicesConfig = '' -http: - routers: + // API domain configuration + if (domain) { + routersConfig += ` # Main API router (Kong gateway) ${projectSlug}-api: rule: "Host(\`${domain}\`)" @@ -44,17 +47,7 @@ http: certResolver: letsencrypt priority: 10 - # Studio router (subdomain) - ${projectSlug}-studio: - rule: "Host(\`studio.${domain}\`)" - entryPoints: - - websecure - service: ${projectSlug}-studio - tls: - certResolver: letsencrypt - priority: 10 - - # HTTP redirect routers + # HTTP redirect for API ${projectSlug}-api-http: rule: "Host(\`${domain}\`)" entryPoints: @@ -62,16 +55,58 @@ http: middlewares: - https-redirect service: ${projectSlug}-api - priority: 5 + priority: 5` + + servicesConfig += ` + ${projectSlug}-api: + loadBalancer: + servers: + - url: "http://${projectSlug}-kong:${kongPort}" + healthCheck: + path: /health + interval: 30s + timeout: 5s` + } + + // Studio domain configuration + if (studioDomain) { + routersConfig += ` + + # Studio router + ${projectSlug}-studio: + rule: "Host(\`${studioDomain}\`)" + entryPoints: + - websecure + service: ${projectSlug}-studio + tls: + certResolver: letsencrypt + priority: 10 + # HTTP redirect for Studio ${projectSlug}-studio-http: - rule: "Host(\`studio.${domain}\`)" + rule: "Host(\`${studioDomain}\`)" entryPoints: - web middlewares: - https-redirect service: ${projectSlug}-studio - priority: 5 + priority: 5` + + servicesConfig += ` + + ${projectSlug}-studio: + loadBalancer: + servers: + - url: "http://${projectSlug}-studio:${studioPort}"` + } + + const traefikConfig = `# Auto-generated Traefik routing for project: ${projectSlug} +# API Domain: ${domain || 'not configured'} +# Studio Domain: ${studioDomain || 'not configured'} +# Generated at: ${new Date().toISOString()} + +http: + routers:${routersConfig} middlewares: https-redirect: @@ -79,75 +114,62 @@ http: scheme: https permanent: true - services: - ${projectSlug}-api: - loadBalancer: - servers: - - url: "http://${projectSlug}-kong:${kongPort}" - healthCheck: - path: /health - interval: 30s - timeout: 5s - - ${projectSlug}-studio: - loadBalancer: - servers: - - url: "http://${projectSlug}-studio:${studioPort}" + services:${servicesConfig} ` - const configPath = path.join(getTraefikDynamicPath(), `${projectSlug}.yml`) + const configPath = path.join(getTraefikDynamicPath(), `${projectSlug}.yml`) - // Ensure directory exists - await fs.mkdir(getTraefikDynamicPath(), { recursive: true }) + // Ensure directory exists + await fs.mkdir(getTraefikDynamicPath(), { recursive: true }) - // Write the config file - await fs.writeFile(configPath, traefikConfig) + // Write the config file + await fs.writeFile(configPath, traefikConfig) - console.log(`Traefik config generated for project ${projectSlug} at ${configPath}`) + console.log(`Traefik config generated for project ${projectSlug} at ${configPath}`) } /** * Update an existing project's Traefik config with a new domain */ export async function updateProjectDomain( - projectSlug: string, - newDomain: string, - kongPort: number, - studioPort: number + projectSlug: string, + newDomain: string, + kongPort: number, + studioPort: number ): Promise { - await generateProjectTraefikConfig({ - projectSlug, - domain: newDomain, - kongPort, - studioPort, - }) + await generateProjectTraefikConfig({ + projectSlug, + domain: newDomain, + kongPort, + studioPort, + }) } /** * Remove Traefik configuration for a deleted project */ export async function removeProjectTraefikConfig(projectSlug: string): Promise { - const configPath = path.join(getTraefikDynamicPath(), `${projectSlug}.yml`) - - try { - await fs.unlink(configPath) - console.log(`Traefik config removed for project ${projectSlug}`) - } catch (error) { - // File may not exist if project never had a custom domain - if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { - console.error(`Failed to remove Traefik config for ${projectSlug}:`, error) - } + const configPath = path.join(getTraefikDynamicPath(), `${projectSlug}.yml`) + + try { + await fs.unlink(configPath) + console.log(`Traefik config removed for project ${projectSlug}`) + } catch (error) { + // File may not exist if project never had a custom domain + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { + console.error(`Failed to remove Traefik config for ${projectSlug}:`, error) } + } } /** * Get the ports used by a project's services from environment variables */ export function getProjectPorts(envVars: Record): { kongPort: number; studioPort: number } { - return { - kongPort: parseInt(envVars.KONG_HTTP_PORT || '8000', 10), - studioPort: parseInt(envVars.STUDIO_PORT || '3000', 10), - } + return { + kongPort: parseInt(envVars.KONG_HTTP_PORT || '8000', 10), + studioPort: parseInt(envVars.STUDIO_PORT || '3000', 10), + } } /** @@ -155,15 +177,89 @@ export function getProjectPorts(envVars: Record): { kongPort: nu * Returns true if the domain resolves to an IP that could be this server */ export async function verifyDomainDNS(domain: string): Promise { - try { - // Use Node's DNS module for resolution - const dns = await import('dns').then(m => m.promises) - const addresses = await dns.resolve4(domain) - - // Domain resolves to at least one IP - return addresses.length > 0 - } catch { - // DNS resolution failed - return false + try { + // Use Node's DNS module for resolution + const dns = await import('dns').then(m => m.promises) + const addresses = await dns.resolve4(domain) + + // Domain resolves to at least one IP + return addresses.length > 0 + } catch { + // DNS resolution failed + return false + } +} + +/** + * Generate Traefik routing configuration for the SupaPanel itself + */ +export async function generatePanelTraefikConfig(domain: string): Promise { + const traefikConfig = `# Auto-generated Traefik routing for SupaPanel +# Domain: ${domain} +# Generated at: ${new Date().toISOString()} + +http: + routers: + # Panel HTTPS router + supapanel: + rule: "Host(\`${domain}\`)" + entryPoints: + - websecure + service: supapanel + tls: + certResolver: letsencrypt + priority: 100 + + # Panel HTTP redirect router + supapanel-http: + rule: "Host(\`${domain}\`)" + entryPoints: + - web + middlewares: + - https-redirect + service: supapanel + priority: 50 + + middlewares: + https-redirect: + redirectScheme: + scheme: https + permanent: true + + services: + supapanel: + loadBalancer: + servers: + - url: "http://supapanel-panel:3000" +` + + const configPath = path.join(getTraefikDynamicPath(), 'panel.yml') + + // Ensure directory exists + await fs.mkdir(getTraefikDynamicPath(), { recursive: true }) + + // Write the config file + await fs.writeFile(configPath, traefikConfig) + + console.log(`Panel Traefik config generated at ${configPath}`) +} + +/** + * Remove Traefik configuration for the panel domain + */ +export async function removePanelTraefikConfig(): Promise { + const configPath = path.join(getTraefikDynamicPath(), 'panel.yml') + + try { + // Write empty config (just a comment) + const emptyConfig = `# SupaPanel Panel Routing +# No custom domain configured - access via IP:3000 +` + await fs.writeFile(configPath, emptyConfig) + console.log(`Panel Traefik config cleared at ${configPath}`) + } catch (error) { + if ((error as NodeJS.ErrnoException).code !== 'ENOENT') { + console.error('Failed to remove panel Traefik config:', error) } + } } diff --git a/traefik/dynamic/panel.yml b/traefik/dynamic/panel.yml deleted file mode 100644 index 1d383c6..0000000 --- a/traefik/dynamic/panel.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Panel Routing Configuration -# This file is created by the install script and can be customized for panel domain - -http: - routers: - panel-http: - rule: "PathPrefix(`/`)" - entryPoints: - - web - service: panel - priority: 1 - - services: - panel: - loadBalancer: - servers: - - url: "http://supapanel-panel:3000" From 02c17a53a8312ce0f8c385138f8dd4fb42dd241b Mon Sep 17 00:00:00 2001 From: Alan Frigo Date: Tue, 16 Dec 2025 19:46:00 -0300 Subject: [PATCH 2/2] Update Readme and Description --- README.md | 19 ++++++++++++------- package.json | 3 ++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4e43146..3a78783 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,15 @@ -# SupaPanel - -**Open-source management panel for self-hosted Supabase instances** - -[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -[![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://hub.docker.com) -[![Next.js](https://img.shields.io/badge/Next.js-15-black.svg)](https://nextjs.org) +
    + SupaPanel Logo +

    SupaPanel

    +

    Open-source management panel for self-hosted Supabase instances

    + + [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) + [![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://hub.docker.com) + [![Next.js](https://img.shields.io/badge/Next.js-15-black.svg)](https://nextjs.org) + +
    + SupaPanel Demo +
    SupaPanel is a web-based control panel that simplifies the deployment and management of multiple self-hosted Supabase projects. Deploy your own Supabase infrastructure on any Linux server with a single command. diff --git a/package.json b/package.json index f8def94..83091b1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "supapanel", "version": "0.1.0", + "description": "Open-source management panel for self-hosted Supabase instances", "private": true, "scripts": { "dev": "next dev --turbopack", @@ -45,4 +46,4 @@ "tw-animate-css": "^1.3.7", "typescript": "^5" } -} +} \ No newline at end of file