diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1b1128c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,80 @@ +################## +### BASE STAGE ### +################## +FROM rust:1.92.0 as base + +# Install build dependencies +# RUN cargo install --locked trunk@^0.18.8 strip_cargo_version +RUN cargo install --locked strip_cargo_version@0.0.3 +# RUN rustup target add wasm32-unknown-unknown +RUN rustup target add x86_64-unknown-linux-musl + +# required by "ring" +RUN apt-get update && apt-get install -y musl-tools + +WORKDIR /app +RUN mkdir gui srv lib + +########################### +### STRIP-VERSION STAGE ### +########################### +FROM base AS strip-version + +COPY Cargo.lock Cargo.toml ./ +COPY ./gui/Cargo.toml ./gui/ +COPY ./srv/Cargo.toml ./srv/ +COPY ./lib/Cargo.toml ./lib/ +RUN strip_cargo_version + +################### +### BUILD STAGE ### +################### +FROM base AS build + +RUN cargo init --lib gui +RUN cargo init --bin srv +RUN cargo init --lib lib + +COPY --from=strip-version /app/gui/Cargo.toml /app/gui/ +COPY --from=strip-version /app/srv/Cargo.toml /app/srv/ +COPY --from=strip-version /app/lib/Cargo.toml /app/lib/ +COPY --from=strip-version /app/Cargo.toml /app/Cargo.lock /app/ + +# Compile dependencies first, so that they are cached by Docker +WORKDIR /app/srv +RUN cargo build --release --target x86_64-unknown-linux-musl + +# TODO: build gui for wasm +# WORKDIR /app/gui +# RUN cargo build --release --target wasm32-unknown-unknown + +WORKDIR /app +COPY . . + +WORKDIR /app/srv +RUN cargo build --release --target x86_64-unknown-linux-musl +RUN strip /app/target/x86_64-unknown-linux-musl/release/inkopslista-srv + +# TODO: build gui for wasm +# WORKDIR /app/gui +# RUN trunk build --release + +######################## +### PRODUCTION STAGE ### +######################## +FROM scratch + +ENV RUST_LOG="info" +ENV ROCKET_ADDRESS="0.0.0.0" +ENV ROCKET_PORT="8000" + +WORKDIR / + +# Copy application binary +COPY --from=build /app/target/x86_64-unknown-linux-musl/release/inkopslista-srv / + +# TODO: +# # Copy static web files +# COPY --from=build /app/frontend/dist /www + +CMD ["/inkopslista-srv"]