# multi-stage build: compile natively inside x86_64 linux container # uses Debian (glibc) because zig 0.15's C++ codegen for musl # produces illegal instructions in RocksDB's LRU cache FROM --platform=linux/amd64 debian:bookworm-slim AS builder RUN apt-get update && apt-get install -y --no-install-recommends curl xz-utils ca-certificates && rm -rf /var/lib/apt/lists/* RUN curl -fSL https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz \ | tar xJ -C /opt ENV PATH=/opt/zig-x86_64-linux-0.15.2:$PATH WORKDIR /build # fetch dependencies first (cacheable — only changes when build.zig.zon changes) COPY build.zig build.zig.zon ./ RUN zig build --fetch-only 2>/dev/null || true # then copy source and build COPY src/ src/ RUN zig build -Doptimize=ReleaseSafe -Dcpu=baseline -Dtarget=x86_64-linux-gnu FROM --platform=linux/amd64 debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && rm -rf /var/lib/apt/lists/* COPY --from=builder /build/zig-out/bin/zlay /usr/local/bin/zlay RUN mkdir -p /data/events /data/collection-index ENV RELAY_DATA_DIR=/data/events EXPOSE 3000 3001 ENTRYPOINT ["/usr/local/bin/zlay"]