mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-14 01:50:39 +09:00
Introduce bind presets for deployment setup
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
parent
e1bf9d66a7
commit
2a84e53c1b
35 changed files with 915 additions and 176 deletions
|
|
@ -32,10 +32,12 @@ Mode taxonomy and design intent are documented in `doc/DEPLOYMENT-MODES.md`.
|
|||
Current CLI behavior:
|
||||
|
||||
- `paperclipai onboard` and `paperclipai configure --section server` set deployment mode in config
|
||||
- server onboarding/configure ask for reachability intent and write `server.bind`
|
||||
- `paperclipai run --bind <loopback|lan|tailnet>` passes a quickstart bind preset into first-run onboarding when config is missing
|
||||
- runtime can override mode with `PAPERCLIP_DEPLOYMENT_MODE`
|
||||
- `paperclipai run` and `paperclipai doctor` do not yet expose a direct `--mode` flag
|
||||
- `paperclipai run` and `paperclipai doctor` still do not expose a direct low-level `--mode` flag
|
||||
|
||||
Target behavior (planned) is documented in `doc/DEPLOYMENT-MODES.md` section 5.
|
||||
Canonical behavior is documented in `doc/DEPLOYMENT-MODES.md`.
|
||||
|
||||
Allow an authenticated/private hostname (for example custom Tailscale DNS):
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@ Paperclip supports two runtime modes:
|
|||
|
||||
This keeps one authenticated auth stack while still separating low-friction private-network defaults from internet-facing hardening requirements.
|
||||
|
||||
Paperclip now treats **bind** as a separate concern from auth:
|
||||
|
||||
- auth model: `local_trusted` vs `authenticated`, plus `private/public`
|
||||
- reachability model: `server.bind = loopback | lan | tailnet | custom`
|
||||
|
||||
## 2. Canonical Model
|
||||
|
||||
| Runtime Mode | Exposure | Human auth | Primary use |
|
||||
|
|
@ -25,6 +30,15 @@ This keeps one authenticated auth stack while still separating low-friction priv
|
|||
| `authenticated` | `private` | Login required | Private-network access (for example Tailscale/VPN/LAN) |
|
||||
| `authenticated` | `public` | Login required | Internet-facing/cloud deployment |
|
||||
|
||||
## Reachability Model
|
||||
|
||||
| Bind | Meaning | Typical use |
|
||||
|---|---|---|
|
||||
| `loopback` | Listen on localhost only | default local usage, reverse-proxy deployments |
|
||||
| `lan` | Listen on all interfaces (`0.0.0.0`) | LAN/VPN/private-network access |
|
||||
| `tailnet` | Listen on a detected Tailscale IP | Tailscale-only access |
|
||||
| `custom` | Listen on an explicit host/IP | advanced interface-specific setups |
|
||||
|
||||
## 3. Security Policy
|
||||
|
||||
## `local_trusted`
|
||||
|
|
@ -38,12 +52,14 @@ This keeps one authenticated auth stack while still separating low-friction priv
|
|||
- login required
|
||||
- low-friction URL handling (`auto` base URL mode)
|
||||
- private-host trust policy required
|
||||
- bind can be `loopback`, `lan`, `tailnet`, or `custom`
|
||||
|
||||
## `authenticated + public`
|
||||
|
||||
- login required
|
||||
- explicit public URL required
|
||||
- stricter deployment checks and failures in doctor
|
||||
- recommended bind is `loopback` behind a reverse proxy; direct `lan/custom` is advanced
|
||||
|
||||
## 4. Onboarding UX Contract
|
||||
|
||||
|
|
@ -55,14 +71,22 @@ pnpm paperclipai onboard
|
|||
|
||||
Server prompt behavior:
|
||||
|
||||
1. ask mode, default `local_trusted`
|
||||
2. option copy:
|
||||
- `local_trusted`: "Easiest for local setup (no login, localhost-only)"
|
||||
- `authenticated`: "Login required; use for private network or public hosting"
|
||||
3. if `authenticated`, ask exposure:
|
||||
- `private`: "Private network access (for example Tailscale), lower setup friction"
|
||||
- `public`: "Internet-facing deployment, stricter security requirements"
|
||||
4. ask explicit public URL only for `authenticated + public`
|
||||
1. quickstart `--yes` defaults to `server.bind=loopback` and therefore `local_trusted/private`
|
||||
2. advanced server setup asks reachability first:
|
||||
- `Trusted local` → `bind=loopback`, `local_trusted/private`
|
||||
- `Private network` → `bind=lan`, `authenticated/private`
|
||||
- `Tailnet` → `bind=tailnet`, `authenticated/private`
|
||||
- `Custom` → manual mode/exposure/host entry
|
||||
3. raw host entry is only required for the `Custom` path
|
||||
4. explicit public URL is only required for `authenticated + public`
|
||||
|
||||
Examples:
|
||||
|
||||
```sh
|
||||
pnpm paperclipai onboard --yes
|
||||
pnpm paperclipai onboard --yes --bind lan
|
||||
pnpm paperclipai run --bind tailnet
|
||||
```
|
||||
|
||||
`configure --section server` follows the same interactive behavior.
|
||||
|
||||
|
|
|
|||
|
|
@ -55,10 +55,23 @@ pnpm dev:stop
|
|||
Tailscale/private-auth dev mode:
|
||||
|
||||
```sh
|
||||
pnpm dev --tailscale-auth
|
||||
pnpm dev --bind lan
|
||||
```
|
||||
|
||||
This runs dev as `authenticated/private` and binds the server to `0.0.0.0` for private-network access.
|
||||
This runs dev as `authenticated/private` with a private-network bind preset.
|
||||
|
||||
For Tailscale-only reachability on a detected tailnet address:
|
||||
|
||||
```sh
|
||||
pnpm dev --bind tailnet
|
||||
```
|
||||
|
||||
Legacy aliases still map to the old broad private-network behavior:
|
||||
|
||||
```sh
|
||||
pnpm dev --tailscale-auth
|
||||
pnpm dev --authenticated-private
|
||||
```
|
||||
|
||||
Allow additional private hostnames (for example custom Tailscale hostnames):
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ Use this exact checklist.
|
|||
1. Start Paperclip in auth mode.
|
||||
```bash
|
||||
cd <paperclip-repo-root>
|
||||
pnpm dev --tailscale-auth
|
||||
pnpm dev --bind lan
|
||||
```
|
||||
Then verify:
|
||||
```bash
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue