Skip to content

Commit 3ed4b11

Browse files
committed
docs(koyeb): fix deploy button storage default + add catalog submission guide
- README Koyeb button: STORAGE_PROVIDER=postgres (broken placeholder URL) -> local, matching Koyeb's ephemeral filesystem; add per-button note on JWT_SECRET, ephemeral storage, and the postgres persistence option - deploy/koyeb/README.md: Koyeb deploy guide (button settings, Koyeb specifics, env vars, version bumps) - deploy/koyeb/CATALOG_SUBMISSION.md: how the curated catalog works (no self-service) + Partner Hub outreach message and submission facts
1 parent b17535f commit 3ed4b11

3 files changed

Lines changed: 169 additions & 2 deletions

File tree

README.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,12 +354,17 @@ bun run test:coverage
354354
355355
## ⚡ One-Click Deploy
356356
357-
Deploy your own instance of LibreDB Studio with a single click on Koyeb, Render, or Railway:
357+
Deploy your own instance of LibreDB Studio with a single click on Koyeb, Render, Railway, or CapRover:
358358
359-
[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?name=libredb-studio&type=docker&image=ghcr.io%2Flibredb%2Flibredb-studio%3Alatest&instance_type=free&regions=fra&instances_min=0&autoscaling_sleep_idle_delay=3900&env%5BADMIN_EMAIL%5D=admin%40libredb.org&env%5BADMIN_PASSWORD%5D=LibreDB.2026&env%5BJWT_SECRET%5D=your_secure_pass%3D&env%5BLLM_API_KEY%5D=your_GEMINI_API_KEY&env%5BLLM_MODEL%5D=gemini-2.5-flash&env%5BLLM_PROVIDER%5D=gemini&env%5BNEXT_PUBLIC_AUTH_PROVIDER%5D=local&env%5BSTORAGE_PROVIDER%5D=postgres&env%5BSTORAGE_POSTGRES_URL%5D=postgresql%3A%2F%2Fdb_user%3Adb_pass%40your_host.eu-central-1.pg.koyeb.app%2Flibredb_storage&env%5BUSER_EMAIL%5D=user%40libredb.org&env%5BUSER_PASSWORD%5D=LibreDB.2026&ports=3000%3Bhttp%3B%2F&hc_protocol%5B3000%5D=tcp&hc_grace_period%5B3000%5D=5&hc_interval%5B3000%5D=30&hc_restart_limit%5B3000%5D=3&hc_timeout%5B3000%5D=5&hc_path%5B3000%5D=%2F&hc_method%5B3000%5D=get)
359+
[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?name=libredb-studio&type=docker&image=ghcr.io%2Flibredb%2Flibredb-studio%3Alatest&instance_type=free&regions=fra&instances_min=0&autoscaling_sleep_idle_delay=3900&env%5BADMIN_EMAIL%5D=admin%40libredb.org&env%5BADMIN_PASSWORD%5D=LibreDB.2026&env%5BJWT_SECRET%5D=your_secure_pass%3D&env%5BLLM_API_KEY%5D=your_GEMINI_API_KEY&env%5BLLM_MODEL%5D=gemini-2.5-flash&env%5BLLM_PROVIDER%5D=gemini&env%5BNEXT_PUBLIC_AUTH_PROVIDER%5D=local&env%5BSTORAGE_PROVIDER%5D=local&env%5BUSER_EMAIL%5D=user%40libredb.org&env%5BUSER_PASSWORD%5D=LibreDB.2026&ports=3000%3Bhttp%3B%2F&hc_protocol%5B3000%5D=tcp&hc_grace_period%5B3000%5D=5&hc_interval%5B3000%5D=30&hc_restart_limit%5B3000%5D=3&hc_timeout%5B3000%5D=5&hc_path%5B3000%5D=%2F&hc_method%5B3000%5D=get)
360360
361361
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/libredb/libredb-studio)
362362
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/libredb-studio?referralCode=bGijnc&utm_medium=integration&utm_source=template&utm_campaign=generic)
363+
[![Deploy on CapRover](https://img.shields.io/badge/Deploy%20on-CapRover-2474ed?style=for-the-badge&logo=docker&logoColor=white)](https://github.com/caprover/one-click-apps/blob/master/public/v4/apps/libredb-studio.yml)
364+
365+
> **CapRover:** open your CapRover dashboard → **Apps → One-Click Apps/Databases**, search for **LibreDB Studio**, and deploy.
366+
>
367+
> **Koyeb:** set a strong `JWT_SECRET` and credentials before deploying (Koyeb cannot auto-generate secrets). The button uses `STORAGE_PROVIDER=local` — connection metadata lives in the browser, which suits Koyeb's ephemeral filesystem. For persistence across redeploys, switch to `STORAGE_PROVIDER=postgres` and point `STORAGE_POSTGRES_URL` at a Koyeb managed Postgres or Neon database. See [`deploy/koyeb/`](deploy/koyeb/).
363368
364369
365370
### Environment Variables
@@ -409,6 +414,17 @@ instructions, and the publish checklist. The template runs the prebuilt
409414
volume. Note: Docker-image templates require a manual version bump on each
410415
release (same as CapRover).
411416
417+
### CapRover
418+
419+
LibreDB Studio is published in the official [CapRover One-Click Apps](https://github.com/caprover/one-click-apps/blob/master/public/v4/apps/libredb-studio.yml) catalog:
420+
421+
1. **Open your CapRover dashboard** → **Apps → One-Click Apps/Databases**
422+
2. **Search** for **LibreDB Studio**
423+
3. **Fill in the variables** (admin/user credentials, `JWT_SECRET`, optional AI/storage settings)
424+
4. **Deploy!** 🎉
425+
426+
The app runs the prebuilt `ghcr.io/libredb/libredb-studio` image. As with Railway, Docker-image templates require a manual version bump on each release.
427+
412428
### Render (Recommended for cloud deployment)
413429
414430
LibreDB Studio includes a `render.yaml` Blueprint for one-click deployment:

deploy/koyeb/CATALOG_SUBMISSION.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# Koyeb One-Click Apps Catalog — Submission
2+
3+
Getting LibreDB Studio listed in the public catalog at
4+
[koyeb.com/deploy](https://www.koyeb.com/deploy).
5+
6+
## How the catalog works
7+
8+
Unlike a self-service marketplace, the Koyeb One-Click Apps catalog is
9+
**curated by Koyeb**. There is:
10+
11+
- **no** "submit your app" form on the `/deploy` page,
12+
- **no** public PR repository (the old `koyeb-community/catalog-builder` and
13+
`catalog-seed-action` repos are archived),
14+
15+
so the only path to a listing is to **reach out to Koyeb directly** and have
16+
them add the app. A working "Deploy to Koyeb" button (which we already ship in
17+
the repo README) is the prerequisite they build the catalog entry from.
18+
19+
## Contact channels
20+
21+
1. **Partner Hub form**https://www.koyeb.com/partners → "Technology
22+
Providers" track. Submit the message below; their team schedules a call.
23+
2. **Community**https://community.koyeb.com (post in the appropriate
24+
category referencing the one-click catalog).
25+
3. **Email / support** — via the contact link in the Koyeb dashboard.
26+
27+
Use the Partner Hub form as the primary channel; cross-post to the community as
28+
a backup.
29+
30+
## Submission facts (have these ready)
31+
32+
| Field | Value |
33+
|-------|-------|
34+
| App name | LibreDB Studio |
35+
| Category | Database / Developer Tools |
36+
| Description | Open-source web-based SQL IDE for cloud-native teams |
37+
| License | Open source (free) |
38+
| Repository | https://github.com/libredb/libredb-studio |
39+
| Website | https://libredb.org |
40+
| Docker image | `ghcr.io/libredb/libredb-studio` (GHCR, multi-arch) |
41+
| Pinned tag | `0.9.23` (bump on each release) |
42+
| Port | `3000` (HTTP) |
43+
| Health check | `GET /api/db/health` |
44+
| Storage default | `local` (browser); `postgres` for persistence |
45+
| Existing deploy button | see repo [README](../../README.md#-one-click-deploy) |
46+
47+
## Outreach message (paste into the Partner Hub form / email)
48+
49+
> **Subject:** One-Click App listing request — LibreDB Studio (open-source SQL IDE)
50+
>
51+
> Hi Koyeb team,
52+
>
53+
> We maintain **LibreDB Studio**, an open-source, web-based SQL IDE for
54+
> cloud-native teams (PostgreSQL, MySQL, SQLite, Oracle, SQL Server, MongoDB,
55+
> Redis, with AI-assisted querying). It's free and Apache/MIT-style open source:
56+
> https://github.com/libredb/libredb-studio
57+
>
58+
> We already ship a working **Deploy to Koyeb** button (prebuilt GHCR image
59+
> `ghcr.io/libredb/libredb-studio`, port 3000, scale-to-zero on the free
60+
> instance, `STORAGE_PROVIDER=local` so it fits Koyeb's ephemeral filesystem).
61+
> The button URL with all env vars and health-check params is in our README.
62+
>
63+
> We'd love to be listed in the Koyeb One-Click Apps catalog
64+
> (koyeb.com/deploy) so Koyeb users can launch a full database IDE in one
65+
> click. We're happy to provide a logo, screenshots, a short description, and
66+
> to keep the pinned image tag current on each release.
67+
>
68+
> What's the best way to proceed, and is there anything you need from us to
69+
> create the catalog entry?
70+
>
71+
> Thanks!
72+
> — The LibreDB team
73+
74+
## Assets to attach
75+
76+
- Logo (square, transparent PNG) — reuse `deploy/railway/libredb-studio.png` or
77+
the brand logo from the repo.
78+
- 1–2 screenshots of the editor + results grid.
79+
- One-line and short (≈75 char) descriptions (Railway template description can
80+
be reused).
81+
82+
## After acceptance
83+
84+
- Confirm the catalog entry pins a specific tag (not `:latest`) and add the
85+
manual version-bump step to the release checklist.
86+
- Add the catalog URL (`https://www.koyeb.com/deploy/libredb-studio`) next to
87+
the existing button in the repo README once live.

deploy/koyeb/README.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# LibreDB Studio on Koyeb
2+
3+
[Koyeb](https://www.koyeb.com) is a serverless PaaS that can run the prebuilt
4+
LibreDB Studio Docker image directly from GHCR — no rebuild, no Dockerfile.
5+
6+
There are two ways to get LibreDB Studio onto Koyeb:
7+
8+
1. **Deploy to Koyeb button** (self-service, already live in the repo
9+
[README](../../README.md#-one-click-deploy)).
10+
2. **Koyeb One-Click Apps catalog** listing (curated by Koyeb — see
11+
[`CATALOG_SUBMISSION.md`](./CATALOG_SUBMISSION.md)).
12+
13+
## Deploy button
14+
15+
The button encodes the whole service definition in the `app.koyeb.com/deploy`
16+
query string:
17+
18+
| Setting | Value |
19+
|---------|-------|
20+
| Source | Docker image `ghcr.io/libredb/libredb-studio:latest` |
21+
| Port | `3000` (HTTP, path `/`) |
22+
| Health check | TCP on `3000`, 5s grace / 30s interval |
23+
| Instance | `free` (scale-to-zero after idle) |
24+
| Region | `fra` |
25+
| Storage | `STORAGE_PROVIDER=local` (browser-side, default) |
26+
27+
Because the deploy button URL is long, edit it in the repo README rather than
28+
by hand. URL-encode every special character (`@``%40`, `:``%3A`,
29+
`[``%5B`, `]``%5D`, `=` inside a value → `%3D`).
30+
31+
## Important Koyeb specifics
32+
33+
- **No secret generation.** Unlike Railway's `${{ secret(48) }}`, Koyeb cannot
34+
auto-generate values. The user **must** set a strong `JWT_SECRET` (32+ chars)
35+
and real `ADMIN_PASSWORD` / `USER_PASSWORD` in the deploy form before
36+
launching. The prefilled values in the button are placeholders only.
37+
- **Ephemeral filesystem.** Koyeb instances do not have a persistent disk in the
38+
button flow, so SQLite-on-disk storage (`STORAGE_PROVIDER=sqlite`) will reset
39+
on every redeploy/sleep. The button therefore defaults to
40+
`STORAGE_PROVIDER=local` (connection metadata kept in the browser).
41+
- **Persistence option.** For storage that survives redeploys, set
42+
`STORAGE_PROVIDER=postgres` and `STORAGE_POSTGRES_URL` to a Koyeb managed
43+
Postgres or [Neon](https://neon.tech) connection string.
44+
- **Scale-to-zero.** The `free` instance sleeps when idle and wakes on the next
45+
request (a brief cold start). Fine for demos and personal use.
46+
47+
## Environment variables
48+
49+
See the [main README environment table](../../README.md#environment-variables)
50+
for the full list. Minimum required for a working Koyeb deploy:
51+
52+
| Variable | Notes |
53+
|----------|-------|
54+
| `JWT_SECRET` | 32+ chars, set your own |
55+
| `ADMIN_EMAIL` / `ADMIN_PASSWORD` | admin login |
56+
| `USER_EMAIL` / `USER_PASSWORD` | standard user login |
57+
| `NEXT_PUBLIC_AUTH_PROVIDER` | `local` (default) or `oidc` |
58+
| `STORAGE_PROVIDER` | `local` (default); `postgres` for persistence |
59+
60+
## Version bumps
61+
62+
The button pins `:latest`, but a catalog listing pins a specific tag. On each
63+
release, update the image tag in the catalog submission (same manual-bump
64+
caveat as the Railway and CapRover Docker-image templates).

0 commit comments

Comments
 (0)