FROM ghcr.io/rust-lang/rust:nightly-bookworm-slim@sha256:a0f43abebdf4b8d3a6e545115af863c77f35b48a63b63b9d174fdb6bbd31315e as build RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ cmake \ curl \ git \ sqlite3 \ npm \ pkg-config \ clang \ gcc \ libssl-dev \ libatk1.0-dev \ libwebkit2gtk-4.1-dev \ libharfbuzz-dev \ libgtk-3-dev \ libsoup-3.0-dev \ libpango1.0-dev \ libgdk-pixbuf-2.0-dev \ zlib1g-dev \ make \ && rm -rf /var/lib/apt/lists/* ENV LANG=C.UTF-8 ENV LANGUAGE=C.UTF-8 ENV LC_ALL=C.UTF-8 # install leptos build helper cli COPY rust-toolchain.toml . RUN cargo --version RUN cargo install -f wasm-bindgen-cli --version 0.2.92 RUN cargo install cargo-leptos --version 0.2.16 --force ADD ./package.json ./package.json ADD ./package-lock.json ./package-lock.json RUN npm i -g sass RUN npm install # Build WORKDIR /build # install rust toolchain COPY . . COPY .cargo/docker-config.toml .cargo/config.toml ARG BUILD_TYPE ENV BUILD_TYPE=${BUILD_TYPE:-release} ENV BUILD_PKG=${BUILD_PKG:-llama_forge_rs} RUN echo Building $BUILD_TYPE for pkg: $BUILD_PKG ENV VALID_TYPES="debug release" RUN if ! echo "${VALID_TYPES}" | grep -wq "${BUILD_TYPE}"; then echo "Invalid BUILD_TYPE value. It should be one of ${VALID_TYPES}." && exit 1; fi ENV LEPTOS_OUTPUT_NAME=${BUILD_PKG} ENV LEPTOS_SITE_ADDR="0.0.0.0:3000" ENV LEPTOS_TAILWIND_VERSION=v3.4.3 ENV LEPTOS_SASS_VERSION=1.71.0 ENV LEPTOS_WASM_OPT_VERSION=version_116 ARG CARGO_BUILD_JOBS ENV CARGO_BUILD_JOBS=${CARGO_BUILD_JOBS:-4} RUN if [ "$BUILD_TYPE" = "release" ]; then \ cargo leptos build -p $BUILD_PKG --release; \ elif [ "$BUILD_TYPE" = "debug" ]; then \ cargo leptos build -p $BUILD_PKG; \ else \ echo "Invalid BUILD_TYPE value. It should be either 'release' or 'debug'." && exit 1; \ fi RUN mkdir -p ./out/target \ && cp -r ./target/site ./out/target/site \ && cp -r ./target/x86_64-unknown-linux-gnu/$BUILD_TYPE/$BUILD_PKG ./out/server RUN chmod +x ./out/server RUN sqlite3 ./out/db.sqlite3 "VACUUM;" FROM gcr.io/distroless/base-debian12@sha256:611d30d7f6d9992c37b1e1a212eefdf1f7c671deb56db3707e24eb01da8c4c2a WORKDIR /app # ADD ./rules.json ./rules.json this should now be provided as a mount COPY --from=build /build/out ./ ENTRYPOINT ["./server"] CMD []