One image for the whole app: engine, API and dashboard on one port

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.
This commit is contained in:
2026-10-16 11:40:02 +02:00
parent 9d9dac0bd0
commit dea25ec08d
39 changed files with 573 additions and 728 deletions
+35
View File
@@ -0,0 +1,35 @@
# Fluksio in one container. From a clone of this repository:
#
# docker compose up -d
# docker compose logs fluksio # the admin password, printed once
#
# then open http://localhost:8080. Change the left side of `ports` to use
# another host port. The operator stack under docker/ is a different file.
name: fluksio
services:
fluksio:
build:
context: .
dockerfile: backend/Dockerfile
args:
# Optional features, comma separated: mqtt, influx, email, sentry, ml,
# or server for all of them. Rebuild after a change: `docker compose up -d --build`.
EXTRAS: ""
image: fluksio:latest
restart: unless-stopped
ports:
- "8080:8000"
volumes:
- data:/data
environment:
# The address people and devices reach this instance at. Panel links and
# mails are built from it.
FRONTEND_HOST: http://localhost:8080
# Schedules run in this timezone, such as Europe/Berlin.
TZ: UTC
# Where frames a flow only shows live are held.
shm_size: 128mb
volumes:
data: