The frozen baseline image predates two hot-patches made in the running container after build: * utas_server.py: FUT_MODES-gated offlineSeason block in GetHubData's club response (keeps the offline-season summary valid) * test_hub_offline_season_contract.py added to /app/tools Sync fifa17-python/tools to the running container (verified byte-identical, 237 files incl. the redir cert pair) and snapshot the live FS as openfut-fut-backend:python-running-2026-08-10 (docker commit). A fresh build from the committed sources now reproduces the running backend exactly (baked SHA256SUMS.txt diffed against the container manifest: identical).
5.0 KiB
Python backend baseline — 2026-08-10
Frozen rollback target for the working offline FUT backend (Python migration) as
it ran on 10.10.0.120. Everything here was recorded from the live system before
any cleanup/restructure; the image and state are archived in
/home/alex/OpenFUT/docker-backups/.
Frozen image
| field | value |
|---|---|
| tag | openfut-fut-backend:python-baseline-2026-08-10 |
| image id | e1f93ad647ab |
| digest | sha256:e1f93ad647abbec32e2751f3e88fed75d3e574d4500395b21c31d0f0b96abac6 |
| created | 2026-08-10T02:14:56Z (built as openfut-fut-backend:dev) |
| size | 278 MB |
| archive | docker-backups/openfut-fut-backend-python-baseline-2026-08-10.tar.gz (53 MB, docker save | gzip -1) |
Frozen container
| field | value |
|---|---|
| id | f16d3204cbf48151be232ff8f4194b429e311042f8f6f95644760d4b8eba2938 |
| created | 2026-08-10T02:14:56.194470252Z |
| image | openfut-fut-backend:dev (= baseline image id) |
| restart | unless-stopped |
| network | docker_default, IP 172.19.0.2, aliases openfut-fut-backend, fut-backend |
| log | json-file |
| inspect | docker-backups/openfut-fut-backend-container-inspect-2026-08-10.json |
Environment (Config.Env)
FUT_SETTINGS=off
FUT_MODES=1
OPENFUT_BIND=0.0.0.0
OPENFUT_ADVERTISE=10.10.0.120
POW_CONTENT_ADDR=0.0.0.0:8080
POW_CONTENT_HOST=10.10.0.120:8085
FUT_ACCOUNT_PATH=/state/active_account.json
FUT_PROFILE_ROOT=/state/accounts
PYTHON_VERSION=3.12.13 (python:3.12-slim base)
Volumes / mounts
Bind mount docker/state (host) -> /state (container, rw). Runtime state:
active_account.json (active persona) + accounts/ (FUT saves by persona).
Snapshot: docker-backups/state-2026-08-10/.
Ports (host -> container)
| host | container | service |
|---|---|---|
| 4216 | 4216 | LSX (Origin bootstrap) |
| 42127 | 42127 | Blaze redirector (TLS) |
| 42130 | 42130 | Blaze main |
| 42131 | 42131 | Nucleus OAuth stub |
| 8081 | 8081 | FUT roster XML (HTTPS) |
| 8099 | 8099 | UTAS / RS4 FUT REST API |
| 8094 | 8094 | POW / EASFC API |
| 8085 | 8080 | POW content (remapped to avoid openfut-core:8080) |
All listeners verified bound on 0.0.0.0 in the container (LSX/Blaze/nucleus,
roster, UTAS, POW, POW content).
Dataset manifest
docker-backups/SHA256SUMS-container-baseline-2026-08-10.txt — sha256 of all
323 files under /app/tools + /app/data inside the running container.
fifa17-python/tools/ and fifa17-python/data/ are the staged sources that
built this image (verified byte-identical to the container copies at freeze
time). Images rebuilt from git now bake their own /app/SHA256SUMS.txt; the
rebuild-equivalence check is diff between that and this manifest; the only expected deltas are pycache files (not committed) and the redir cert pair (regenerated per build).
Restore
# From the archived image (works offline, exact layers):
docker load -i /home/alex/OpenFUT/docker-backups/openfut-fut-backend-python-baseline-2026-08-10.tar.gz
docker tag openfut-fut-backend:python-baseline-2026-08-10 openfut-fut-backend:dev
# Or rebuild from git:
cd /home/alex/OpenFUT/fifa17-recon/docker/fifa17-python
cp .env.example .env # set OPENFUT_ADVERTISE
docker compose up -d --build
Status at freeze time
- The 2026-08-10
openfut-fut-backendcontainer was left running untouched (the .105 launcher audit uses it). No rebuild/replacement happens until that audit finishes; the frozen image is the rollback target if cleanup breaks it. docker/statewas not moved during restructure (bind path must not change while the container is live); the new compose mounts../statefrom the same location.- TURN/relay re-addressing (multiplayer) and long-tail endpoints (weather, matchday, kit assets) are deferred feature gaps — tracked separately.
Running state vs image — what the frozen image does NOT contain
The baseline image (python-baseline-2026-08-10 / dev) was built at 02:14Z,
but the container's /app was hot-patched afterwards:
tools/utas_server.py— gained theFUT_MODES-gatedofflineSeasonblock in GetHubData's club response (keeps the hub's offline-season summary valid).tools/test_hub_offline_season_contract.py— added to/app/tools.
docker save captures the image, not the container's writable layer, so the
baseline tar.gz lacks those two changes. Two paths cover the exact runtime:
openfut-fut-backend:python-running-2026-08-10—docker commitof the running container (sha256:093a98fa0496...), the exact runtime FS.- The committed
fifa17-python/tools+data— synced to match the running container byte-for-byte (237 files verified, incl. the redir cert pair), so a fresh build reproduces the actual running backend. Proven by rebuilding from the committed sources and diffing the baked/app/SHA256SUMS.txtagainst the container manifest: identical.
Archive: docker-backups/openfut-fut-backend-python-running-2026-08-10.tar.gz.