prefect server in zig
at f511403a2b901063559cd17995b45527418e76c6 53 lines 1.6 kB view raw
1# Build stage 2FROM alpine:3.20 AS builder 3 4# install build dependencies 5RUN apk add --no-cache curl xz ca-certificates 6 7# download zig 0.15.2 based on architecture 8ARG TARGETARCH 9RUN case "$TARGETARCH" in \ 10 amd64) ZIG_ARCH="x86_64" ;; \ 11 arm64) ZIG_ARCH="aarch64" ;; \ 12 *) echo "Unsupported arch: $TARGETARCH" && exit 1 ;; \ 13 esac && \ 14 curl -fsSL "https://ziglang.org/download/0.15.2/zig-${ZIG_ARCH}-linux-0.15.2.tar.xz" | \ 15 tar -xJ -C /usr/local && \ 16 ln -s /usr/local/zig-${ZIG_ARCH}-linux-0.15.2/zig /usr/local/bin/zig 17 18WORKDIR /build 19COPY build.zig build.zig.zon ./ 20COPY src/ src/ 21 22RUN zig build -Doptimize=ReleaseFast 23 24# find and copy facil.io shared library 25RUN mkdir -p /build/lib && \ 26 find /build/.zig-cache -name "libfacil.io.so" -exec cp {} /build/lib/ \; 27 28# Runtime stage - minimal image 29FROM alpine:3.20 30 31# libstdc++ required for zig runtime, curl for healthcheck 32RUN apk add --no-cache libstdc++ curl 33 34WORKDIR /app 35 36COPY --from=builder /build/zig-out/bin/prefect-server /app/ 37COPY --from=builder /build/lib/ /app/lib/ 38 39ENV LD_LIBRARY_PATH=/app/lib 40ENV PREFECT_SERVER_API_HOST=0.0.0.0 41ENV PREFECT_SERVER_PORT=4200 42ENV PREFECT_SERVER_LOGGING_LEVEL=INFO 43 44EXPOSE 4200 45 46HEALTHCHECK --interval=10s --timeout=3s --start-period=5s --retries=3 \ 47 CMD curl -f http://localhost:4200/api/health || exit 1 48 49# default: run server with services (single-instance mode) 50# for horizontal scaling: 51# API servers: /app/prefect-server --no-services 52# background services: /app/prefect-server services 53CMD ["/app/prefect-server"]