| 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"] |