70a64e3709
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.
50 lines
2.2 KiB
YAML
50 lines
2.2 KiB
YAML
# OpenFUT FIFA-17 FUT backend — declarative deployment (server side, runs on 120).
|
|
#
|
|
# cp .env.example .env # set OPENFUT_ADVERTISE to THIS host's LAN IP
|
|
# docker compose up -d --build
|
|
#
|
|
# Brings up the 5 responders the game dials. OPENFUT_ADVERTISE is the address
|
|
# the servers hand the client (105) for every next hop (Blaze, roster, UTAS,
|
|
# POW) and is required — there is no silent loopback fallback in remote mode.
|
|
#
|
|
# The client (105) still needs its first-hop redirect (hook or DNAT) plus
|
|
# autopatch.py running locally; see client_arm.sh and the FIFARUNBOOK.
|
|
name: openfut-fut-backend
|
|
|
|
services:
|
|
fut-backend:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: openfut-fut-backend:dev
|
|
container_name: openfut-fut-backend
|
|
restart: unless-stopped
|
|
environment:
|
|
# Bind all interfaces inside the container.
|
|
OPENFUT_BIND: "${OPENFUT_BIND:-0.0.0.0}"
|
|
# Address advertised to the client for the next hop. MUST be this host's
|
|
# LAN IP as seen from the game machine (105). Required (see .env.example).
|
|
OPENFUT_ADVERTISE: "${OPENFUT_ADVERTISE:?set OPENFUT_ADVERTISE in .env to this host's LAN IP, e.g. 10.10.0.120}"
|
|
# POW content advertises port 8080 by default, which collides with the
|
|
# openfut-core publish on this host. Remap it to 8085 on the host and
|
|
# advertise the remapped endpoint.
|
|
POW_CONTENT_ADDR: "0.0.0.0:8080"
|
|
POW_CONTENT_HOST: "${OPENFUT_ADVERTISE}:8085"
|
|
# Launcher-selected EA/Origin identity shared by LSX, Blaze, POW and UTAS.
|
|
# FUT saves are isolated by persona beneath /state/accounts.
|
|
FUT_ACCOUNT_PATH: "/state/active_account.json"
|
|
FUT_PROFILE_ROOT: "/state/accounts"
|
|
FUT_SETTINGS: "off"
|
|
FUT_MODES: "1"
|
|
volumes:
|
|
- "../state:/state"
|
|
ports:
|
|
- "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 (host 8085 -> container 8080; avoids core:8080)
|