landfall 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -121,6 +121,7 @@ with the newest release. An existing Docker is never reinstalled. In a terminal,
121
121
  | `--dashboard traefik.example.com` | Traefik dashboard behind basic auth (`traefik` alone means `traefik.<main domain>`) |
122
122
  | `--image traefik:v3.5` | Traefik image (remembered, default `traefik:v3`) |
123
123
  | `--host-network` | run Traefik on the host network (remembered), see [Traefik](#traefik) |
124
+ | `--no-http3` | Traefik without HTTP/3 on 443/udp (remembered), see [Traefik](#traefik) |
124
125
  | `--no-firewall` / `--no-harden` / `--no-traefik` / `--no-ssh-config` | skip a step |
125
126
  | `--check` / `--key-only` / `--force` | report only / install only the key / apply despite conflicts |
126
127
 
@@ -135,7 +136,7 @@ No domain yet? Leave out `-d`. landfall offers `<name>.<ip-with-dashes>.sslip.io
135
136
  | kind | when | how |
136
137
  |---|---|---|
137
138
  | **compose** | the folder has a `compose.yaml` | Uploads the folder and runs it as one Compose project. See [Compose sites](#compose-sites). |
138
- | **static** | no compose file, no Dockerfile | Uploads the folder and serves it with `nginx:alpine` (gzip, long cache headers for assets). The folder is `.` if it has an `index.html`, else the first of `dist/ build/ out/ public/ _site/ site/`. `--spa` sends unknown paths to `index.html`. |
139
+ | **static** | no compose file, no Dockerfile | Uploads the folder and serves it with `nginx:alpine` (gzip, long cache headers for assets). The folder is where the site generator builds to, even before the first build (Vite/Astro `dist/` or its `outDir`, SvelteKit/CRA/Docusaurus `build/`, Next `out/`, Gatsby/Hugo `public/`, Eleventy/Jekyll `_site/`, Nuxt `.output/public/`, Angular, MkDocs `site/`), else `.` if it has an `index.html`, else the first of `dist/ build/ out/ public/ _site/ site/` with one. `lf deploy <dir>` picks another. `--spa` sends unknown paths to `index.html`. |
139
140
  | **dockerfile** | the folder has a `Dockerfile` | Uploads the folder and builds it on the server. The port comes from `EXPOSE`, else `--port` (default 3000). `--static` forces static. |
140
141
  | **image** | `--image ghcr.io/me/app:1.2` | Pulls the image and runs it. Needs `--port`. For private registries: `lf ssh vps -- docker login ghcr.io`. |
141
142
 
@@ -260,8 +261,10 @@ lf domains # where DNS points, whether HTTPS answers
260
261
  lf domains --add www.example.com # also --rm, --set (updates .landfall.json)
261
262
  lf domains --rm @ # take the main domain off; the last one leaves the site running, unrouted
262
263
  lf auth -u anna # login in front of the site (asks for the password, -p passes it)
264
+ lf auth -p '…' # the same for user admin
263
265
  lf auth --rm-user anna | --off
264
266
  lf open
267
+ lf tunnel blog # http://localhost:<port> straight to its container: test it without a domain
265
268
  lf sites rm blog # delete the site (asks you to type the name)
266
269
  lf logs api -s vps # another site on another server
267
270
  ```
@@ -292,8 +295,10 @@ Version-pinned tags show the newest tag of the same shape (`traefik:v3.6` → `t
292
295
  lf traefik status # container state, routes, mode
293
296
  lf traefik logs -f # certificate errors show up here
294
297
  lf traefik setup --email you@example.com # reconfigure (safe to re-run)
295
- lf traefik setup --dashboard traefik # dashboard at traefik.<main domain>; `off` removes it
298
+ lf traefik setup --dashboard traefik # dashboard at traefik.<main domain> behind a login; `off` removes it
299
+ lf traefik dashboard # the dashboard on localhost through an SSH tunnel, no domain needed
296
300
  lf traefik setup --host-network # bind 80/443 on the host
301
+ lf traefik setup --no-http3 # turn HTTP/3 off (on by default)
297
302
  ```
298
303
 
299
304
  landfall's Traefik is the container `traefik` from `/opt/landfall/traefik/docker-compose.yml`. By default Docker
@@ -304,6 +309,11 @@ publishes 80/443 to it. Sites work the same in both modes:
304
309
  | client IP in logs / `X-Forwarded-For` | real IPv4; IPv6 may show Docker's gateway | always real |
305
310
  | ufw | Docker's NAT bypasses ufw for 80/443 | ufw applies |
306
311
 
312
+ HTTP/3 (QUIC) is on by default: Traefik also listens on 443/udp, and browsers switch to it after their first
313
+ HTTP/2 request. Setup's firewall opens 443/udp; with `--host-network` on a server whose ufw is already active,
314
+ `lf traefik setup` adds the rule. `--no-http3` turns it off (remembered). In the web UI (`lf ui`)
315
+ these options are in a server's settings under Traefik → Settings….
316
+
307
317
  Traefik only answers hosts it has a certificate for (`sniStrict`). A domain pointed at the server but served
308
318
  by no site fails the TLS handshake, as if nothing listened there, instead of showing a 404 or Traefik's own
309
319
  certificate; plain HTTP to it redirects to HTTPS and fails the same way. A new site's domain fails the same way
@@ -311,7 +321,10 @@ for the seconds until Let's Encrypt issues its certificate. Your own certificate
311
321
  `/opt/landfall/traefik/dynamic/`: landfall rewrites only `landfall.yml` there. If you edit
312
322
  `docker-compose.yml` by hand, `lf traefik setup` shows the diff and stops; `--force` overwrites your edits.
313
323
 
314
- The dashboard password is generated and printed once (`--dashboard-password` sets your own). Image, network mode,
324
+ The dashboard password is generated and printed once (`--dashboard-password` sets your own, `--dashboard-user` the user, default `admin`).
325
+ The dashboard is always reachable through `lf traefik dashboard`: Traefik serves it on port 8080 to the server itself only
326
+ (loopback and the `web` network's gateway), never published. A Traefik set up before this needs `lf traefik setup` once.
327
+ With your own Traefik, `lf traefik dashboard --port 8080` tunnels to its API port; the web UI shows the domains its dashboard is on. Image, network mode,
315
328
  e-mail, staging and dashboard are remembered per server.
316
329
 
317
330
  **Using a Traefik you already run.** If 80/443 belong to your own Traefik container, landfall does not install a second one:
@@ -469,7 +482,7 @@ lf undo -s box -y # revert the last run
469
482
 
470
483
  | command | what it does |
471
484
  |---|---|
472
- | `lf traefik setup [--email e] [--dashboard host\|traefik\|off] [--staging] [--image img] [--host-network] [--force]` | Installs or reconfigures landfall's Traefik. `--force` overwrites hand edits. |
485
+ | `lf traefik setup [--email e] [--dashboard host\|traefik\|off] [--staging] [--image img] [--host-network] [--no-http3] [--force]` | Installs or reconfigures landfall's Traefik. `--force` overwrites hand edits. |
473
486
  | `lf traefik use [container] [--network n --entrypoint e --resolver r]` | Routes sites through a Traefik you already run. |
474
487
  | `lf traefik rm [--certs]` | Removes landfall's Traefik (undoable), or stops using yours after `traefik use`. |
475
488
  | `lf traefik status` / `logs [-f]` / `restart` | Inspects or restarts Traefik. `lf traefik` alone means `status`. |