# syntax=docker/dockerfile:1 # ---- OpenFUT Bridge: FIFA integration / reverse-engineering proxy ---- # Multi-stage build; slim Debian runtime. reqwest uses rustls-tls and the # bridge self-signs its own cert at startup (rcgen) — no OpenSSL needed. FROM rust:1-bookworm AS builder WORKDIR /build COPY Cargo.toml Cargo.lock* ./ RUN mkdir -p src src/bin \ && echo 'fn main() {}' > src/main.rs \ && echo '' > src/lib.rs \ && echo 'fn main() {}' > src/bin/replay.rs \ && cargo build --release --bin openfut-bridge 2>/dev/null || true RUN rm -rf src COPY src ./src RUN touch src/main.rs src/lib.rs \ && cargo build --release --bin openfut-bridge # ---- Runtime ---- FROM debian:bookworm-slim AS runtime RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates curl \ && rm -rf /var/lib/apt/lists/* RUN useradd --system --uid 10002 --create-home --home-dir /app openfut WORKDIR /app COPY --from=builder /build/target/release/openfut-bridge /usr/local/bin/openfut-bridge # Captures are written at runtime — keep them on a named volume. RUN mkdir -p /app/captures && chown openfut:openfut /app/captures USER openfut ENV BRIDGE_LISTEN_ADDR=0.0.0.0:8443 \ CORE_URL=http://core:8080 \ CAPTURES_DIR=/app/captures \ PLACEHOLDER_MODE=true \ TLS_ENABLED=true \ RUST_LOG=openfut_bridge=info,tower_http=info EXPOSE 8443 VOLUME ["/app/captures"] # The bridge serves TLS; -k because the cert is self-signed. /_bridge/health # is the bridge's own admin endpoint (not a proxied FIFA route). HEALTHCHECK --interval=15s --timeout=4s --start-period=8s --retries=5 \ CMD curl -fsSk https://127.0.0.1:8443/_bridge/health || exit 1 ENTRYPOINT ["openfut-bridge"]