prefect server in zig
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"]