prefect server in zig
1# Build stage
2FROM alpine:3.20 AS builder
3
4# install build dependencies + CA certs for TLS
5RUN apk add --no-cache curl xz ca-certificates
6
7# download zig 0.15.2 based on architecture
8RUN ARCH=$(uname -m) && \
9 if [ "$ARCH" = "x86_64" ]; then ZIG_ARCH="x86_64"; \
10 elif [ "$ARCH" = "aarch64" ]; then ZIG_ARCH="aarch64"; \
11 else echo "Unsupported arch: $ARCH" && exit 1; fi && \
12 curl -L "https://ziglang.org/download/0.15.2/zig-${ZIG_ARCH}-linux-0.15.2.tar.xz" | \
13 tar -xJ -C /usr/local && \
14 ln -s /usr/local/zig-${ZIG_ARCH}-linux-0.15.2/zig /usr/local/bin/zig
15
16WORKDIR /build
17COPY build.zig build.zig.zon ./
18COPY src/ src/
19
20RUN zig build -Doptimize=ReleaseFast
21
22# copy facil.io shared library from zig cache
23RUN mkdir -p /build/lib && \
24 find / -name "libfacil.io.so" 2>/dev/null -exec cp {} /build/lib/ \;
25
26# Runtime stage
27FROM alpine:3.20
28
29RUN apk add --no-cache libstdc++
30
31WORKDIR /app
32
33# copy binary and shared library
34COPY --from=builder /build/zig-out/bin/prefect-server /app/
35COPY --from=builder /build/lib/ /app/lib/
36
37# set library path
38ENV LD_LIBRARY_PATH=/app/lib
39ENV PREFECT_SERVER_PORT=4200
40ENV PREFECT_SERVER_LOGGING_LEVEL=INFO
41
42EXPOSE 4200
43
44CMD ["/app/prefect-server"]