The backend image now builds the SPA and serves it on the API's own origin (fluksio/spa.py), so an instance is a single container with no proxy, DNS, port 80 or .env: `docker compose up -d` with the new compose.yml runs it on localhost:8080. It starts on fluksio serve (persisted secret key, first admin printed once) and brings its own Redis when REDIS_HOST is unset. Slimmer: python:3.13-slim, no dev group, uv once, fastapi without the cloud CLI. Optional features are per-feature extras (mqtt, influx, email, sentry, ml, server for all) picked with the EXTRAS build argument; numpy moved to `ml`. ffmpeg left the image for imageio-ffmpeg via the Modules screen. The operator stack runs the same image with app. and api. routed to it; the nginx frontend service, the LAN nginx proxy and DOMAIN in the backend are gone, and the MCP issuer is FRONTEND_HOST. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
17 lines
772 B
YAML
17 lines
772 B
YAML
# Direct LAN access — layered on top of compose.local.yml by `make dev-lan`.
|
|
#
|
|
# For reaching the app from a machine that cannot be given a DNS record or a
|
|
# hosts entry. Traefik routes on the Host header and a bare IP matches no
|
|
# router, so the app container is published on a host port as well:
|
|
# http://<host-ip>:${APP_PORT} is the whole app, dashboard, API and hooks.
|
|
services:
|
|
|
|
backend:
|
|
ports: !override
|
|
- "${APP_PORT:-8080}:8000"
|
|
environment:
|
|
# The address the instance gives out: the link the Panels dialog shows a
|
|
# screen and the one its emails carry. app.${DOMAIN} resolves on this host
|
|
# only, so `make dev-lan` passes the published port on the LAN address.
|
|
- FRONTEND_HOST=${LAN_URL:-http://app.${DOMAIN:-localhost}}
|