# Multi-stage build for the autopilot binary. # Production image is intended for development / CI / emulation (Option B in # _docs/02_document/deployment/containerization.md §4); on-airframe deployment # uses the native systemd unit (Option A — see deploy/systemd/). # ----------------------------------------------------------------------------- # Stage 1: build # ----------------------------------------------------------------------------- ARG RUST_VERSION=1.82 FROM rust:${RUST_VERSION}-bookworm AS build WORKDIR /workspace # Cache dependency compilation by copying manifests first, then source. COPY Cargo.toml Cargo.lock* rust-toolchain.toml ./ COPY .cargo ./.cargo COPY crates ./crates # Default feature set. Override with `--build-arg CARGO_FEATURES=vlm` to enable VLM. ARG CARGO_FEATURES= RUN if [ -n "$CARGO_FEATURES" ]; then \ cargo build --release --features "$CARGO_FEATURES"; \ else \ cargo build --release; \ fi # ----------------------------------------------------------------------------- # Stage 2: runtime — production-equivalent NVDEC/TensorRT plumbing (Jetson) # ----------------------------------------------------------------------------- # For emulation environments without GPU we use ubuntu:22.04 (see compose). FROM ubuntu:22.04 AS runtime # Runtime deps (ca-certificates for HTTPS to missions API; libssl for TLS). RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates libssl3 \ && rm -rf /var/lib/apt/lists/* # Non-root user per containerization.md §4. RUN groupadd --system --gid 10001 autopilot \ && useradd --system --uid 10001 --gid autopilot --shell /usr/sbin/nologin autopilot \ && mkdir -p /etc/azaion/autopilot /var/lib/autopilot \ && chown -R autopilot:autopilot /var/lib/autopilot COPY --from=build /workspace/target/release/autopilot /usr/local/bin/autopilot USER autopilot:autopilot ENV AUTOPILOT_CONFIG=/etc/azaion/autopilot/config.toml \ RUST_LOG=info \ AUTOPILOT_HEALTH_BIND=0.0.0.0:8080 EXPOSE 8080 ENTRYPOINT ["/usr/local/bin/autopilot"]