misukisu commited on
Commit
419258c
·
verified ·
1 Parent(s): c281005

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +59 -0
Dockerfile ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ------------------------------------------------------------------------------
2
+ # 1. Builder Stage
3
+ # ------------------------------------------------------------------------------
4
+ FROM rust:1.80-slim-bookworm AS builder
5
+
6
+ WORKDIR /app
7
+
8
+ RUN apt-get update && apt-get install -y --no-install-recommends \
9
+ pkg-config \
10
+ libssl-dev \
11
+ ca-certificates \
12
+ && rm -rf /var/lib/apt/lists/*
13
+
14
+ # Cache dependency builds using skeleton manifests
15
+ COPY Cargo.toml ./
16
+ RUN mkdir src && echo "fn main() {}" > src/main.rs
17
+ RUN cargo build --release
18
+ RUN rm -rf src
19
+
20
+ # Copy real source files and compile binary
21
+ COPY src ./src
22
+ RUN touch src/main.rs && cargo build --release
23
+
24
+ # ------------------------------------------------------------------------------
25
+ # 2. Runtime Stage
26
+ # ------------------------------------------------------------------------------
27
+ FROM debian:bookworm-slim AS runtime
28
+
29
+ RUN apt-get update && apt-get install -y --no-install-recommends \
30
+ ca-certificates \
31
+ libssl3 \
32
+ curl \
33
+ && rm -rf /var/lib/apt/lists/*
34
+
35
+ # Non-root user setup (UID 1000 for Hugging Face Spaces compatibility)
36
+ RUN useradd -m -u 1000 appuser
37
+
38
+ # Prepare volume storage
39
+ RUN mkdir -p /data/index && chown -R appuser:appuser /data
40
+
41
+ WORKDIR /app
42
+
43
+ # Copy binary from builder
44
+ COPY --from=builder /app/target/release/rust-mcp-search /usr/local/bin/rust-mcp-search
45
+
46
+ ENV PORT=7860 \
47
+ HOST=0.0.0.0 \
48
+ MCP_TRANSPORT=http \
49
+ DATA_DIR=/data/index \
50
+ RUST_LOG=info
51
+
52
+ USER 1000
53
+
54
+ EXPOSE 7860
55
+
56
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
57
+ CMD curl -f http://localhost:${PORT}/health || exit 1
58
+
59
+ ENTRYPOINT ["/usr/local/bin/rust-mcp-search"]