Skip to content

Commit c8e8f34

Browse files
committed
docs: improve Docker Hub README clarity and consistency
Align install instructions with manifest.build/docs: replace "setup wizard" with "sign up" language, clarify that the first account becomes admin, add "30 seconds to boot" note. Break the review-before-running section into separate copyable commands inside a collapsible card. Make Option 2 and Option 3 more explicit about what the user should do.
1 parent 158cbaf commit c8e8f34

File tree

1 file changed

+51
-34
lines changed

1 file changed

+51
-34
lines changed

docker/DOCKER_README.md

Lines changed: 51 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -48,39 +48,54 @@ Works with 300+ models across OpenAI, Anthropic, Google Gemini, DeepSeek, xAI, M
4848

4949
## Manifest vs OpenRouter
5050

51-
| | Manifest | OpenRouter |
52-
| ------------ | ---------------------------------------------------- | --------------------------------------------------- |
53-
| Architecture | Your Manifest instance forwards to your providers | Cloud proxy. All traffic goes through their servers |
54-
| Cost | Free | 5% fee on every API call |
55-
| Source code | MIT, fully open | Proprietary |
56-
| Data privacy | Self-hostedno middleman | Prompts and responses pass through a third party |
57-
| Transparency | Open scoring. You see why a model was chosen | No visibility into routing decisions |
51+
| | Manifest | OpenRouter |
52+
| ------------ | ------------------------------------------------- | --------------------------------------------------- |
53+
| Architecture | Your Manifest instance forwards to your providers | Cloud proxy. All traffic goes through their servers |
54+
| Cost | Free | 5% fee on every API call |
55+
| Source code | MIT, fully open | Proprietary |
56+
| Data privacy | Self-hosted, no middleman | Prompts and responses pass through a third party |
57+
| Transparency | Open scoring. You see why a model was chosen | No visibility into routing decisions |
5858

5959
---
6060

6161
## Installation
6262

63-
Three paths, ordered from fastest to most hands-on. All three end in the same place: a running stack that walks you through the **setup wizard** at [http://localhost:3001](http://localhost:3001) to create your admin account.
63+
Three paths, ordered from fastest to most hands-on. All three end in the same place: a running stack at [http://localhost:3001](http://localhost:3001) where you sign up. The first account you create becomes the admin. No demo credentials are pre-seeded.
6464

6565
> **Heads up on network binding.** The bundled compose file binds port 3001 to `127.0.0.1` only, so the dashboard is reachable on the host machine but not over the LAN. See [Custom port](#custom-port) to expose it beyond localhost.
6666
6767
### Option 1: Quickstart install script (recommended)
6868

69-
One command. The script downloads `docker/docker-compose.yml` and `docker/.env.example`, writes a fresh `BETTER_AUTH_SECRET` into `.env`, brings up the stack, and waits for the healthcheck to go green.
69+
One command. The installer downloads the compose file, generates a secret, and brings up the stack. Give it about 30 seconds to boot.
7070

7171
```bash
7272
bash <(curl -sSL https://raw.githubusercontent.com/mnfst/manifest/main/docker/install.sh)
7373
```
7474

75-
Prefer to audit before running? Download, read, then execute:
75+
<details>
76+
<summary><strong>Prefer to review the script before running it?</strong></summary>
77+
78+
Download the script:
7679

7780
```bash
7881
curl -sSLO https://raw.githubusercontent.com/mnfst/manifest/main/docker/install.sh
82+
```
83+
84+
Review it (optional):
85+
86+
```bash
7987
less install.sh
88+
```
89+
90+
Run it:
91+
92+
```bash
8093
bash install.sh
8194
```
8295

83-
Flags: `--dir <path>` (install into a custom directory, defaults to `./manifest`), `--dry-run` (print what would happen without touching anything), `--yes` (skip the confirmation prompt).
96+
</details>
97+
98+
Useful flags: `--dir <path>` to install elsewhere, `--dry-run` to preview, `--yes` to skip the confirmation prompt.
8499

85100
### Option 2: Docker Compose (manual)
86101

@@ -94,21 +109,23 @@ curl -O https://raw.githubusercontent.com/mnfst/manifest/main/docker/.env.exampl
94109
cp .env.example .env
95110
```
96111

97-
2. Generate a secret and paste it into the `BETTER_AUTH_SECRET=` line in `.env`:
112+
2. Open `.env` in your editor and set `BETTER_AUTH_SECRET` to a random string. You can generate one with:
98113

99114
```bash
100115
openssl rand -hex 32
101116
```
102117

103-
(Optional: to use a stronger database password, set BOTH `POSTGRES_PASSWORD` and `DATABASE_URL` in `.env` they must agree, and any special characters in the password need to be percent-encoded in the URL.)
118+
(Optional: to use a stronger database password, set BOTH `POSTGRES_PASSWORD` and `DATABASE_URL` in `.env`, they must agree, and any special characters in the password need to be percent-encoded in the URL.)
104119

105-
3. Start it:
120+
3. Start the stack:
106121

107122
```bash
108123
docker compose up -d
109124
```
110125

111-
4. Open [http://localhost:3001](http://localhost:3001) and complete the setup wizard.
126+
Give it about 30 seconds to boot.
127+
128+
4. Open [http://localhost:3001](http://localhost:3001) and sign up. The first account you create becomes the admin.
112129

113130
To stop:
114131

@@ -119,7 +136,7 @@ docker compose down -v # deletes everything
119136

120137
### Option 3: Docker Run (bring your own PostgreSQL)
121138

122-
If you already have PostgreSQL running, pick the command for your shell.
139+
If you already have PostgreSQL running, replace `user`, `pass`, and `host` with your actual database credentials, then run this in your terminal:
123140

124141
<details open>
125142
<summary><strong>macOS / Linux (bash, zsh)</strong></summary>
@@ -170,7 +187,7 @@ docker run -d ^
170187

171188
</details>
172189

173-
`AUTO_MIGRATE=true` runs TypeORM migrations on first boot. Then visit [http://localhost:3001](http://localhost:3001) and complete the setup wizard to create your admin account.
190+
`AUTO_MIGRATE=true` runs database migrations on first boot. Then open [http://localhost:3001](http://localhost:3001) and sign up. The first account you create becomes the admin.
174191

175192
### Verifying the image signature
176193

@@ -197,7 +214,7 @@ Or in docker-compose.yml:
197214

198215
```yaml
199216
ports:
200-
- "127.0.0.1:8080:3001"
217+
- '127.0.0.1:8080:3001'
201218
```
202219
203220
…and in `.env`:
@@ -208,10 +225,10 @@ BETTER_AUTH_URL=http://localhost:8080
208225

209226
### Exposing on the LAN
210227

211-
By default the compose file binds port 3001 to `127.0.0.1` only — the dashboard is reachable from the host but not from other machines on the network. To expose it on the LAN:
228+
By default the compose file binds port `3001` to `127.0.0.1` only. The dashboard is reachable from the host but not from other machines on the network. To expose it on the LAN:
212229

213230
1. Edit `docker-compose.yml` and change the `ports` line from `"127.0.0.1:3001:3001"` to `"3001:3001"`.
214-
2. In `.env`, set `BETTER_AUTH_URL` to the host you'll reach the dashboard on e.g. `http://192.168.1.20:3001` or `https://manifest.mydomain.com`. This MUST match the URL in the browser or Better Auth will reject the login with "Invalid origin".
231+
2. In `.env`, set `BETTER_AUTH_URL` to the host you'll reach the dashboard on, e.g. `http://192.168.1.20:3001` or `https://manifest.mydomain.com`. This MUST match the URL in the browser or Better Auth will reject the login with "Invalid origin".
215232
3. `docker compose up -d` to apply.
216233

217234
If you see "Invalid origin" on the login page, `BETTER_AUTH_URL` doesn't match the URL you're accessing the dashboard on. The host matters as much as the port.
@@ -220,11 +237,11 @@ If you see "Invalid origin" on the login page, `BETTER_AUTH_URL` doesn't match t
220237

221238
Every release is published with the following tags:
222239

223-
- `{major}.{minor}.{patch}` fully pinned (e.g. `5.46.0`)
224-
- `{major}.{minor}` latest patch within a minor (e.g. `5.46`)
225-
- `{major}` latest minor+patch within a major (e.g. `5`)
226-
- `latest` latest stable release
227-
- `sha-<short>` exact commit for rollback
240+
- `{major}.{minor}.{patch}` - fully pinned (e.g. `5.46.0`)
241+
- `{major}.{minor}` - latest patch within a minor (e.g. `5.46`)
242+
- `{major}` - latest minor+patch within a major (e.g. `5`)
243+
- `latest` - latest stable release
244+
- `sha-<short>` - exact commit for rollback
228245

229246
Images are built for both `linux/amd64` and `linux/arm64`.
230247

@@ -237,7 +254,7 @@ docker compose pull
237254
docker compose up -d
238255
```
239256

240-
Database migrations run automatically on boot no manual steps. Your data in the `pgdata` volume is preserved across upgrades. Pin to a specific major version (e.g. `manifestdotbuild/manifest:5`) in `docker-compose.yml` if you want control over when major upgrades happen.
257+
Database migrations run automatically on boot, no manual steps. Your data in the `pgdata` volume is preserved across upgrades. Pin to a specific major version (e.g. `manifestdotbuild/manifest:5`) in `docker-compose.yml` if you want control over when major upgrades happen.
241258

242259
## Backup & persistence
243260

@@ -266,14 +283,14 @@ docker compose down -v # ⚠ destroys all data
266283

267284
## Environment variables
268285

269-
| Variable | Required | Default | Description |
270-
|----------|----------|---------|-------------|
271-
| `DATABASE_URL` | Yes | -- | PostgreSQL connection string |
272-
| `BETTER_AUTH_SECRET` | Yes | -- | Session signing secret (min 32 chars) |
273-
| `BETTER_AUTH_URL` | No | `http://localhost:3001` | Public URL. Set this when using a custom port |
274-
| `PORT` | No | `3001` | Internal server port |
275-
| `NODE_ENV` | No | `production` | Set `development` for auto-migrations |
276-
| `SEED_DATA` | No | `false` | Seed demo data on startup |
286+
| Variable | Required | Default | Description |
287+
| -------------------- | -------- | ----------------------- | --------------------------------------------- |
288+
| `DATABASE_URL` | Yes | -- | PostgreSQL connection string |
289+
| `BETTER_AUTH_SECRET` | Yes | -- | Session signing secret (min 32 chars) |
290+
| `BETTER_AUTH_URL` | No | `http://localhost:3001` | Public URL. Set this when using a custom port |
291+
| `PORT` | No | `3001` | Internal server port |
292+
| `NODE_ENV` | No | `production` | Set `development` for auto-migrations |
293+
| `SEED_DATA` | No | `false` | Seed demo data on startup |
277294

278295
Full env var reference: [github.com/mnfst/manifest](https://github.com/mnfst/manifest)
279296

0 commit comments

Comments
 (0)