Docker · 1280 bytes Raw Blame History
1 # Multi-stage build for ZephyrFS Node
2 FROM rust:1.81-slim as builder
3
4 # Install system dependencies for building
5 RUN apt-get update && apt-get install -y \
6 pkg-config \
7 libssl-dev \
8 protobuf-compiler \
9 && rm -rf /var/lib/apt/lists/*
10
11 WORKDIR /app
12
13 # Copy Cargo files first for better layer caching
14 COPY Cargo.toml Cargo.lock ./
15
16 # Create dummy main.rs to build dependencies
17 RUN mkdir -p src && echo "fn main() {}" > src/main.rs
18 RUN cargo build --release && rm -rf src
19
20 # Copy actual source code
21 COPY src/ src/
22
23 # Build the actual application
24 RUN cargo build --release
25
26 # Final runtime image
27 FROM debian:bookworm-slim
28
29 # Install runtime dependencies
30 RUN apt-get update && apt-get install -y \
31 ca-certificates \
32 libssl3 \
33 && rm -rf /var/lib/apt/lists/*
34
35 # Create non-root user
36 RUN groupadd -r zephyr && useradd -r -g zephyr zephyr
37
38 # Create data directory
39 RUN mkdir -p /var/lib/zephyrfs && chown zephyr:zephyr /var/lib/zephyrfs
40
41 # Copy binary from builder stage
42 COPY --from=builder /app/target/release/zephyrfs-node /usr/local/bin/
43
44 USER zephyr
45
46 # Expose P2P and API ports
47 EXPOSE 4001 8080
48
49 # Health check
50 HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
51 CMD zephyrfs-node --health-check || exit 1
52
53 ENTRYPOINT ["zephyrfs-node"]