Lytt på alle adresser (IPv4 og IPv6) som standard
SOAPBOX_BIND er nå tom som standard = alle adresser, så Caddy på en annen maskin når appen over Tailscale/MagicDNS uansett om navnet løses til v4 eller v6. Waitress bandt bare 0.0.0.0 inne i containeren, så IPv6-tilkoblinger via pasta ble avvist; nå brukes listen="*:8080" (dual-stack). Verifisert mot maskinens Tailscale-IPv4 og -IPv6. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
This commit is contained in:
parent
a0b48bc39a
commit
14bb9f97ab
6 changed files with 25 additions and 19 deletions
14
.env.example
14
.env.example
|
|
@ -32,13 +32,13 @@ SOAPBOX_OWNER_PASSWORD=bytt-meg-naa
|
||||||
#SOAPBOX_SECRET_KEY=
|
#SOAPBOX_SECRET_KEY=
|
||||||
|
|
||||||
# --- Bare for run.sh / compose (ikke lest av appen) ---
|
# --- Bare for run.sh / compose (ikke lest av appen) ---
|
||||||
# Adresse og port containeren eksponeres på; Caddy proxyer hit.
|
# Port Caddy proxyer til. Tom SOAPBOX_BIND = lytt på alle adresser, IPv4 og
|
||||||
# Caddy på samme maskin: SOAPBOX_BIND=127.0.0.1
|
# IPv6 – riktig når Caddy står på en annen maskin og når appen over Tailscale
|
||||||
# Caddy på en annen maskin via SOAPBOX_BIND=100.x.y.z (denne maskinens
|
# med MagicDNS (kan gi enten v4 eller v6). Sett SOAPBOX_BIND til én adresse
|
||||||
# Tailscale: Tailscale-IP, se `tailscale ip -4`)
|
# (f.eks. 127.0.0.1 når Caddy kjører lokalt) for å begrense. Appen har ingen
|
||||||
# Appen har ingen egen TLS eller IP-filtrering, så bind aldri til 0.0.0.0 på
|
# egen TLS eller IP-filtrering, så på en maskin med offentlig IP bør
|
||||||
# en maskin med offentlig IP – bruk en adresse bare Caddy når.
|
# brannmuren bare slippe Caddy/tailnettet inn på porten.
|
||||||
SOAPBOX_BIND=127.0.0.1
|
SOAPBOX_BIND=
|
||||||
SOAPBOX_PORT=8080
|
SOAPBOX_PORT=8080
|
||||||
# Podman-volum (navn) eller katalog (absolutt sti) for /data
|
# Podman-volum (navn) eller katalog (absolutt sti) for /data
|
||||||
SOAPBOX_VOLUME=soapbox-data
|
SOAPBOX_VOLUME=soapbox-data
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ blog.domene.no {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Eksempel 3: Caddy på en annen maskin, appen nås over Tailscale.
|
# Eksempel 3: Caddy på en annen maskin, appen nås over Tailscale.
|
||||||
# På app-maskinen: SOAPBOX_BIND=<dens Tailscale-IP>. Her brukes MagicDNS-navnet,
|
# App-maskinen lytter på alle adresser (standard), så MagicDNS-navnet fungerer
|
||||||
# men Tailscale-IP-en (100.x.y.z) fungerer like godt.
|
# uansett om det løses til IPv4 eller IPv6.
|
||||||
blogg.domene.no {
|
blogg.domene.no {
|
||||||
encode zstd gzip
|
encode zstd gzip
|
||||||
reverse_proxy app-maskin.tailnet-navn.ts.net:8080
|
reverse_proxy app-maskin.tailnet-navn.ts.net:8080
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,9 @@ Ny versjon: `git pull && ./build.sh && ./run.sh`. Data ligger i podman-volumet `
|
||||||
(standard `./backups/soapbox-data-<tidsstempel>.tar.gz`) og beholder de `SOAPBOX_BACKUP_KEEP`
|
(standard `./backups/soapbox-data-<tidsstempel>.tar.gz`) og beholder de `SOAPBOX_BACKUP_KEEP`
|
||||||
nyeste (standard 5). Gjenopprett med `podman volume import soapbox-data <fil>`.
|
nyeste (standard 5). Gjenopprett med `podman volume import soapbox-data <fil>`.
|
||||||
|
|
||||||
Caddy er ren reverse proxy, se `Caddyfile.example`. Kjører Caddy på en annen maskin (f.eks. over
|
Caddy er ren reverse proxy, se `Caddyfile.example`. Appen lytter som standard på alle adresser
|
||||||
Tailscale), sett `SOAPBOX_BIND` til denne maskinens Tailscale-IP så appen bare lytter på tailnettet. Ved sub-path skal Caddy **ikke** strippe
|
(IPv4 og IPv6), så Caddy kan stå på en annen maskin og nå den over Tailscale/MagicDNS. Sett
|
||||||
|
`SOAPBOX_BIND=127.0.0.1` for å begrense når Caddy kjører lokalt. Ved sub-path skal Caddy **ikke** strippe
|
||||||
prefikset – appen monteres selv under stien fra `SOAPBOX_SITE_URL`.
|
prefikset – appen monteres selv under stien fra `SOAPBOX_SITE_URL`.
|
||||||
|
|
||||||
## Flytte bloggen (nytt domene og/eller sub-path)
|
## Flytte bloggen (nytt domene og/eller sub-path)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ services:
|
||||||
container_name: soapbox
|
container_name: soapbox
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "${SOAPBOX_BIND:-127.0.0.1}:${SOAPBOX_PORT:-8080}:8080"
|
# Alle adresser (v4+v6). Sett f.eks. "127.0.0.1:${SOAPBOX_PORT:-8080}:8080" for å begrense.
|
||||||
|
- "${SOAPBOX_PORT:-8080}:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- ${SOAPBOX_VOLUME:-soapbox-data}:/data:Z
|
- ${SOAPBOX_VOLUME:-soapbox-data}:/data:Z
|
||||||
env_file:
|
env_file:
|
||||||
|
|
|
||||||
6
run.sh
6
run.sh
|
|
@ -16,7 +16,7 @@ fi
|
||||||
|
|
||||||
# Verdier som bare gjelder for podman-kjøringen (ikke appen)
|
# Verdier som bare gjelder for podman-kjøringen (ikke appen)
|
||||||
envval() { grep -E "^$1=" "$ENV_FILE" | head -n1 | cut -d= -f2- || true; }
|
envval() { grep -E "^$1=" "$ENV_FILE" | head -n1 | cut -d= -f2- || true; }
|
||||||
BIND="$(envval SOAPBOX_BIND)"; BIND="${BIND:-127.0.0.1}"
|
BIND="$(envval SOAPBOX_BIND)" # tom = alle adresser (v4+v6)
|
||||||
PORT="$(envval SOAPBOX_PORT)"; PORT="${PORT:-8080}"
|
PORT="$(envval SOAPBOX_PORT)"; PORT="${PORT:-8080}"
|
||||||
VOLUME="$(envval SOAPBOX_VOLUME)"; VOLUME="${VOLUME:-soapbox-data}"
|
VOLUME="$(envval SOAPBOX_VOLUME)"; VOLUME="${VOLUME:-soapbox-data}"
|
||||||
MEMORY="$(envval SOAPBOX_MEMORY)"; MEMORY="${MEMORY:-512m}"
|
MEMORY="$(envval SOAPBOX_MEMORY)"; MEMORY="${MEMORY:-512m}"
|
||||||
|
|
@ -60,10 +60,10 @@ podman run -d --replace --name soapbox \
|
||||||
--restart=always \
|
--restart=always \
|
||||||
--cap-drop=all --security-opt=no-new-privileges \
|
--cap-drop=all --security-opt=no-new-privileges \
|
||||||
--memory "$MEMORY" \
|
--memory "$MEMORY" \
|
||||||
-p "${BIND}:${PORT}:8080" \
|
-p "${BIND:+${BIND}:}${PORT}:8080" \
|
||||||
-v "${VOLUME}:/data:Z" \
|
-v "${VOLUME}:/data:Z" \
|
||||||
--env-file "$ENV_FILE" \
|
--env-file "$ENV_FILE" \
|
||||||
"$IMAGE"
|
"$IMAGE"
|
||||||
|
|
||||||
echo "soapbox kjører på http://${BIND}:${PORT}/ (data i ${VOLUME})"
|
echo "soapbox lytter på ${BIND:-alle adresser}:${PORT} (data i ${VOLUME})"
|
||||||
echo "Logger: podman logs -f soapbox"
|
echo "Logger: podman logs -f soapbox"
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,9 @@ def main(argv: list[str] | None = None) -> int:
|
||||||
sub = parser.add_subparsers(dest="cmd", required=True)
|
sub = parser.add_subparsers(dest="cmd", required=True)
|
||||||
|
|
||||||
serve = sub.add_parser("serve", help="Start webserveren")
|
serve = sub.add_parser("serve", help="Start webserveren")
|
||||||
serve.add_argument("--host", default="0.0.0.0")
|
serve.add_argument(
|
||||||
|
"--host", default="*", help="Adresse å lytte på; '*' = alle, både IPv4 og IPv6"
|
||||||
|
)
|
||||||
serve.add_argument("--port", type=int, default=8080)
|
serve.add_argument("--port", type=int, default=8080)
|
||||||
serve.add_argument(
|
serve.add_argument(
|
||||||
"--debug",
|
"--debug",
|
||||||
|
|
@ -44,12 +46,14 @@ def main(argv: list[str] | None = None) -> int:
|
||||||
|
|
||||||
app = create_app(cfg)
|
app = create_app(cfg)
|
||||||
if args.debug:
|
if args.debug:
|
||||||
app.run(host=args.host, port=args.port, debug=True)
|
# Werkzeugs dev-server kjenner ikke "*"; "::" gir dual-stack på Linux
|
||||||
|
app.run(host="::" if args.host == "*" else args.host, port=args.port, debug=True)
|
||||||
else:
|
else:
|
||||||
from waitress import serve as waitress_serve
|
from waitress import serve as waitress_serve
|
||||||
|
|
||||||
print(f"Soapbox lytter på http://{args.host}:{args.port}{cfg.base_path}/admin/")
|
print(f"Soapbox lytter på {args.host}:{args.port}{cfg.base_path}/admin/")
|
||||||
waitress_serve(app, host=args.host, port=args.port, threads=4)
|
# listen= (ikke host=) er det som gir dual-stack med "*"
|
||||||
|
waitress_serve(app, listen=f"{args.host}:{args.port}", threads=4)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if args.cmd == "build":
|
if args.cmd == "build":
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue