fifa17-python: commit working FUT backend deployment (client/server split)
Freeze the running offline FUT backend into version control as fifa17-recon/docker/fifa17-python/ - declarative and rebuildable from a fresh checkout: * OPENFUT_BIND / OPENFUT_ADVERTISE client/server split in the responders (lsx, blaze, roster, utas, pow) + entrypoint.sh; OPENFUT_ADVERTISE is required for remote mode (compose and entrypoint fail without it) * docker-compose.yml reproducing the frozen baseline container exactly (env, ports incl. the 8085->8080 POW-content remap, /state bind, restart) * .env.example / .env for site config - the LAN IP is never hardcoded in source * tools/ + data/ staged from openfut-fut-backend:python-baseline-2026-08-10, verified byte-identical to the running container at freeze time * client_arm.sh (the 105 client-side arming counterpart) * Dockerfile bakes /app/SHA256SUMS.txt so any image is self-identifying * docs/BASELINE-python-2026-08-10.md: frozen image/container/hash record, restore instructions and rebuild-equivalence procedure Secrets (redir key/cert, .env) and runtime state (docker/state) stay gitignored. The live container is untouched pending the .105 launcher audit.
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# 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.
|
||||
|
||||
## Restore
|
||||
|
||||
```sh
|
||||
# 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-backend` container 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/state` was **not** moved during restructure (bind path must not change
|
||||
while the container is live); the new compose mounts `../state` from the same
|
||||
location.
|
||||
- TURN/relay re-addressing (multiplayer) and long-tail endpoints (weather,
|
||||
matchday, kit assets) are deferred feature gaps — tracked separately.
|
||||
Reference in New Issue
Block a user