-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.backend
More file actions
75 lines (56 loc) · 2.44 KB
/
Copy pathDockerfile.backend
File metadata and controls
75 lines (56 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Builder stage
FROM rust:1.80-slim-bullseye as builder
WORKDIR /app
# Install build dependencies
RUN apt-get update && apt-get install -y pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
# Copy workspace configuration
COPY Cargo.toml Cargo.lock ./
# Create dummy crates to cache dependencies
# We need to mirror the workspace structure
RUN mkdir -p backend/core/src && echo "fn main() {}" > backend/core/src/lib.rs && touch backend/core/src/main.rs
RUN mkdir -p backend/tools/src && echo "fn main() {}" > backend/tools/src/lib.rs
RUN mkdir -p backend/planner/src && echo "fn main() {}" > backend/planner/src/lib.rs
RUN mkdir -p backend/executor/src && echo "fn main() {}" > backend/executor/src/lib.rs
RUN mkdir -p backend/scheduler/src && echo "fn main() {}" > backend/scheduler/src/lib.rs
RUN mkdir -p backend/supervisor/src && echo "fn main() {}" > backend/supervisor/src/lib.rs
RUN mkdir -p backend/cli/src && echo "fn main() {}" > backend/cli/src/main.rs
# Copy TOMLs
COPY backend/core/Cargo.toml backend/core/
COPY backend/tools/Cargo.toml backend/tools/
COPY backend/planner/Cargo.toml backend/planner/
COPY backend/executor/Cargo.toml backend/executor/
COPY backend/scheduler/Cargo.toml backend/scheduler/
COPY backend/supervisor/Cargo.toml backend/supervisor/
COPY backend/cli/Cargo.toml backend/cli/
# Build dependencies
# RUN cargo build --release --bin clawforge
# optimizing cache is tricky with workspace + path dependencies without cargo-chef.
# For simplicity in this phase, we'll just copy everything and build.
# If build times are slow, we will add cargo-chef later.
COPY . .
# Build the application
RUN cargo build --release --bin clawforge
# Runtime stage
FROM debian:bullseye-slim
WORKDIR /app
# Install runtime dependencies
RUN apt-get update && apt-get install -y ca-certificates libssl1.1 && rm -rf /var/lib/apt/lists/*
# Copy binary from builder
COPY --from=builder /app/target/release/clawforge /usr/local/bin/clawforge
# Create a non-root user and group
RUN groupadd -r clawforge && useradd -r -g clawforge -s /sbin/nologin clawforge
# Create data directory owned by the runtime user
RUN mkdir -p /data && chown clawforge:clawforge /data
# Set environment variables
ENV CLAWFORGE_BIND_ADDRESS=0.0.0.0
ENV CLAWFORGE_PORT=3000
ENV CLAWFORGE_DB_PATH=/data/clawforge.db
ENV RUST_LOG=info
# Drop to non-root before running
USER clawforge
# Expose port
EXPOSE 3000
# Volume for persistence
VOLUME ["/data"]
# Run the binary
CMD ["clawforge", "serve"]