Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
56 lines (41 loc) · 1.61 KB
/
Copy pathDockerfile
File metadata and controls
56 lines (41 loc) · 1.61 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
# Build stage for Rust server
FROM rust:1.92 as rust-builder
WORKDIR /app
# Copy Cargo files for dependency caching
COPY server/Cargo.toml ./server/
RUN mkdir -p server/src && echo "fn main() {}" > server/src/main.rs
# Build dependencies only (for caching)
RUN cd server && cargo build --release || true
# Copy source code (this will overwrite the dummy main.rs)
COPY server ./server
# Build the application
WORKDIR /app/server
RUN cargo build --release
# Build stage for ship game (Bevy WASM)
FROM rust:1.92 as ship-builder
WORKDIR /app
RUN rustup target add wasm32-unknown-unknown
# Must match ship-game's wasm-bindgen crate version in Cargo.lock (schema must match CLI).
RUN cargo install wasm-bindgen-cli --version 0.2.120
COPY ship-game ./ship-game
RUN RUSTFLAGS='--cfg getrandom_backend="wasm_js"' cargo build --manifest-path ship-game/Cargo.toml --target wasm32-unknown-unknown --release
RUN mkdir -p /app/client-public/ship && \
wasm-bindgen --no-typescript --target web \
--out-dir /app/client-public/ship \
--out-name ship \
/app/ship-game/target/wasm32-unknown-unknown/release/ship_game.wasm
# Runtime stage
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Copy the binary from builder
COPY --from=rust-builder /app/server/target/release/timehelm-server /app/server
# Copy static files: client/public (index.html, run.js) + ship WASM
COPY client/public ./client/public
COPY --from=ship-builder /app/client-public/ship ./client/public/ship
# Expose port
EXPOSE 8080
# Run the server
CMD ["/app/server"]