@codions/portta 0.0.0-develop.155.sha-e6e3870 → 0.0.0-develop.157.sha-ae5ce5e
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/dist/cli.js +92 -64
- package/dist/documentation.json +1 -1
- package/dist/host.js +1 -1
- package/dist/runtime/.env.example +30 -17
- package/dist/runtime/VERSION +1 -1
- package/dist/runtime/docker/compose/features/panel-public.yaml +6 -8
- package/dist/runtime/docker/compose/features/web.yaml +8 -4
- package/package.json +1 -1
package/dist/host.js
CHANGED
|
@@ -72223,7 +72223,7 @@ function createDaemonTaskflowHost(context) {
|
|
|
72223
72223
|
port: hostListen(env2).port,
|
|
72224
72224
|
workflowBuiltinsDir: taskflowAssets(env2).workflowBuiltinsDir,
|
|
72225
72225
|
version: env2.PORTTA_VERSION || "0.0.0-local",
|
|
72226
|
-
buildDate: true ? "2026-09-
|
|
72226
|
+
buildDate: true ? "2026-09-16T21:32:25Z" : (/* @__PURE__ */ new Date()).toISOString(),
|
|
72227
72227
|
environmentStore: createEnvironmentStore(paths.database),
|
|
72228
72228
|
hostEnvironmentProvider: new HostEnvironmentProvider(),
|
|
72229
72229
|
devContainerProvider: new DevContainerProvider(),
|
|
@@ -161,23 +161,28 @@ PORTTA_WEB_PORT=8081
|
|
|
161
161
|
# entrypoint. Requires PORTTA_AUTH_MODE=required; the panel
|
|
162
162
|
# authenticates requests itself.
|
|
163
163
|
# vpn routed by Traefik at PORTTA_WEB_HOST.<domain>, which is
|
|
164
|
-
# meaningful only on the remote-private profile.
|
|
165
|
-
#
|
|
164
|
+
# meaningful only on the remote-private profile. Refused on
|
|
165
|
+
# remote-public. Accepts PORTTA_AUTH_MODE=disabled, and
|
|
166
|
+
# `portta web up --expose vpn` makes the panel read-only unless
|
|
167
|
+
# --writable is given.
|
|
168
|
+
# domain routed by Traefik on one hostname of the gateway's own domain,
|
|
169
|
+
# PORTTA_PANEL_ADVERTISED_HOST. Requires PORTTA_AUTH_MODE=required.
|
|
166
170
|
#
|
|
167
|
-
# portta config set panel.access
|
|
171
|
+
# portta config set panel.access local|tailscale|vpn|public|domain
|
|
168
172
|
#
|
|
169
173
|
# switches between them on an installed host without reinstalling.
|
|
170
174
|
PORTTA_WEB_EXPOSE=local
|
|
171
175
|
PORTTA_WEB_HOST=portta-web
|
|
172
176
|
|
|
173
177
|
# The address the panel is advertised at in `public` mode, where the published
|
|
174
|
-
# port belongs to Traefik and 0.0.0.0 is not something anybody types
|
|
175
|
-
#
|
|
176
|
-
#
|
|
178
|
+
# port belongs to Traefik and 0.0.0.0 is not something anybody types, and the
|
|
179
|
+
# hostname Traefik routes in `domain` mode. In `public` mode it changes no
|
|
180
|
+
# binding.
|
|
177
181
|
PORTTA_PANEL_ADVERTISED_HOST=
|
|
178
182
|
|
|
179
|
-
# Refuse every mutating endpoint. Useful when an agent is driving the panel
|
|
180
|
-
#
|
|
183
|
+
# Refuse every mutating endpoint. Useful when an agent is driving the panel.
|
|
184
|
+
# `portta web up --expose vpn` sets it unless --writable is given; no other
|
|
185
|
+
# access mode turns it on by itself.
|
|
181
186
|
PORTTA_WEB_READ_ONLY=false
|
|
182
187
|
|
|
183
188
|
# The panel's own front door, which is now the panel's own business.
|
|
@@ -275,7 +280,7 @@ PORTTA_AUTH_USER=
|
|
|
275
280
|
# PORTTA_AUTH_USER=1000:1000
|
|
276
281
|
|
|
277
282
|
# ----------------------------------------------------------------------------
|
|
278
|
-
# Applying settings from the panel:
|
|
283
|
+
# Applying settings from the panel: enabled in this template
|
|
279
284
|
# ----------------------------------------------------------------------------
|
|
280
285
|
# Traefik reads its static configuration from the environment its container was
|
|
281
286
|
# created with, so a setting the panel saves takes effect only once the gateway
|
|
@@ -291,7 +296,8 @@ PORTTA_AUTH_USER=
|
|
|
291
296
|
# Be clear about what this grants: anyone who can write through the panel can
|
|
292
297
|
# run `portta up` on this host. It is refused in read-only mode, the applier
|
|
293
298
|
# takes no input, and the panel never gains `exec`. Leave it false on a host
|
|
294
|
-
# where the panel is reachable by anyone you would not hand a shell.
|
|
299
|
+
# where the panel is reachable by anyone you would not hand a shell. The panel
|
|
300
|
+
# cannot change this value; only an edit of this file on the host does.
|
|
295
301
|
#
|
|
296
302
|
# On a repository checkout -- PORTTA_WEB_BUILD or PORTTA_WEB_DEV -- the apply
|
|
297
303
|
# rebuilds the local images first. The build runs on the host daemon, not inside
|
|
@@ -302,18 +308,25 @@ PORTTA_AUTH_USER=
|
|
|
302
308
|
PORTTA_APPLY=true
|
|
303
309
|
|
|
304
310
|
# Prepare the project runner the panel may start to drive Compose for one
|
|
305
|
-
# project (up, stop, restart, build, down).
|
|
306
|
-
# absent from the Settings catalogue —
|
|
311
|
+
# project (up, stop, restart, build, down). Enabled in this template, and
|
|
312
|
+
# deliberately absent from the Settings catalogue — changing it is an edit on
|
|
313
|
+
# the host. The runner holds the Docker socket and a view of the host
|
|
314
|
+
# filesystem; set it to false where the panel is reachable by anyone you would
|
|
315
|
+
# not hand a shell.
|
|
307
316
|
# See docs/development/adr/0030-the-panel-and-a-project-lifecycle.md.
|
|
308
317
|
PORTTA_RUNNER=true
|
|
309
318
|
|
|
310
319
|
# ----------------------------------------------------------------------------
|
|
311
|
-
#
|
|
320
|
+
# The host daemon, and the Task Flow module (off by default)
|
|
312
321
|
# ----------------------------------------------------------------------------
|
|
313
|
-
#
|
|
314
|
-
# in `portta host serve`, a daemon on
|
|
315
|
-
#
|
|
316
|
-
#
|
|
322
|
+
# Work that needs the host -- issues through `gh` and Linear, and Task Flow's
|
|
323
|
+
# git worktrees, tmux and agent CLIs -- runs in `portta host serve`, a daemon on
|
|
324
|
+
# the host. Whenever the panel is on, it gets a name for the host and the
|
|
325
|
+
# daemon's token (state/host/token), read-only, and reaches the daemon through
|
|
326
|
+
# an authorised proxy.
|
|
327
|
+
#
|
|
328
|
+
# PORTTA_TASKFLOW only switches the Task Flow module on in the CLI, the daemon
|
|
329
|
+
# and the panel; the panel's route to the daemon does not depend on it.
|
|
317
330
|
#
|
|
318
331
|
# The daemon binds loopback by default, which a panel container reaches on
|
|
319
332
|
# Docker Desktop. On Linux, bind it to the Docker bridge gateway instead, for
|
package/dist/runtime/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.0-develop.
|
|
1
|
+
0.0.0-develop.157.sha-ae5ce5e
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# ============================================================================
|
|
2
2
|
# Portta: the panel on a public address, behind Portta ForwardAuth
|
|
3
3
|
# ============================================================================
|
|
4
|
-
# Applied when PORTTA_WEB_EXPOSE=public
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# Two properties make it safe enough to be the default, and both are load
|
|
4
|
+
# Applied when PORTTA_WEB_EXPOSE=public, the shortest path to a panel on a
|
|
5
|
+
# development VPS. Two properties make it safe enough, and both are load
|
|
8
6
|
# bearing:
|
|
9
7
|
#
|
|
10
8
|
# 1. The panel gets its OWN Traefik entrypoint (`panel`, :8090 inside the
|
|
@@ -15,16 +13,16 @@
|
|
|
15
13
|
#
|
|
16
14
|
# 2. The panel signs people in itself. There is no middleware on this
|
|
17
15
|
# router: `PORTTA_AUTH_MODE=required` is what stands in front of it, the
|
|
18
|
-
# panel's own process refuses to start
|
|
19
|
-
#
|
|
20
|
-
# See docs/development/adr/
|
|
16
|
+
# panel's own process refuses to start with `public` access in `disabled`
|
|
17
|
+
# mode, and `portta web up --expose public` refuses before that.
|
|
18
|
+
# See docs/development/adr/0051-authentication-is-optional-inside-a-trusted-network.md.
|
|
21
19
|
#
|
|
22
20
|
# The panel container itself publishes no host port here (web-bind.yaml is not
|
|
23
21
|
# applied), so the only way in is through this entrypoint.
|
|
24
22
|
#
|
|
25
23
|
# HTTP, not HTTPS, when the address is a bare IP: there is no certificate a
|
|
26
24
|
# public CA will issue for one. The password is checked by the panel but the
|
|
27
|
-
# connection is not encrypted
|
|
25
|
+
# connection is not encrypted.
|
|
28
26
|
# `--expose domain` is the mode that gets a real certificate.
|
|
29
27
|
# ============================================================================
|
|
30
28
|
|
|
@@ -178,9 +178,12 @@ services:
|
|
|
178
178
|
#
|
|
179
179
|
# `required` makes it sign people in: accounts, roles, sessions and
|
|
180
180
|
# tokens, all in its database. `disabled` makes every request the local
|
|
181
|
-
# operator
|
|
182
|
-
#
|
|
183
|
-
#
|
|
181
|
+
# operator. It is accepted with panel access `local`, `tailscale` and
|
|
182
|
+
# `vpn`, and the process refuses to start that way with `public` or
|
|
183
|
+
# `domain`. `local` bound to anything but loopback also needs
|
|
184
|
+
# PORTTA_AUTH_ALLOW_LAN=true. The secret signs sessions and is shared with
|
|
185
|
+
# the ForwardAuth service, which is the only other thing here that signs
|
|
186
|
+
# anything.
|
|
184
187
|
#
|
|
185
188
|
# PORTTA_PANEL_URL is where a browser reaches it, and three things come
|
|
186
189
|
# from it: whether the session cookie may be `Secure`, which origins a
|
|
@@ -188,6 +191,7 @@ services:
|
|
|
188
191
|
# loopback on the published port.
|
|
189
192
|
PORTTA_AUTH_MODE: ${PORTTA_AUTH_MODE:-disabled}
|
|
190
193
|
PORTTA_AUTH_SECRET: ${PORTTA_AUTH_SECRET:-}
|
|
194
|
+
PORTTA_AUTH_ALLOW_LAN: ${PORTTA_AUTH_ALLOW_LAN:-false}
|
|
191
195
|
PORTTA_PANEL_URL: ${PORTTA_PANEL_URL:-}
|
|
192
196
|
PORTTA_PANEL_TRUSTED_ORIGINS: ${PORTTA_PANEL_TRUSTED_ORIGINS:-}
|
|
193
197
|
PORTTA_RUNTIME_DYNAMIC_DIR: /app/state/traefik-dynamic
|
|
@@ -222,7 +226,7 @@ services:
|
|
|
222
226
|
# state/auth credentials the panel manages, never served directly
|
|
223
227
|
# state/ssh SSH credentials the panel manages, never served directly
|
|
224
228
|
# traefik/dynamic read-write, and the ONE place the panel configures
|
|
225
|
-
# Traefik. It may write
|
|
229
|
+
# Traefik. It may write three generated filenames there
|
|
226
230
|
# and refuses every other path in its own process.
|
|
227
231
|
# See docs/development/adr/0011-bounded-traefik-write-surface.md.
|
|
228
232
|
- ./.env:/app/state/.env
|
package/package.json
CHANGED