Add Dockerfile
This commit is contained in:
parent
83d5f68f8d
commit
5cbc830439
9
.dockerignore
Normal file
9
.dockerignore
Normal file
@ -0,0 +1,9 @@
|
||||
# Ignore everything
|
||||
*
|
||||
|
||||
# Except:
|
||||
!/assets
|
||||
!/src
|
||||
!/style
|
||||
!/Cargo.lock
|
||||
!/Cargo.toml
|
70
Dockerfile
Normal file
70
Dockerfile
Normal file
@ -0,0 +1,70 @@
|
||||
FROM rust:slim AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Select the nightly toolchain and add needed targets
|
||||
RUN rustup toolchain install nightly
|
||||
RUN rustup default nightly
|
||||
RUN rustup target add wasm32-unknown-unknown
|
||||
RUN rustup target add x86_64-unknown-linux-musl
|
||||
|
||||
# Install a few dependencies
|
||||
RUN set -eux; \
|
||||
apt-get update; \
|
||||
apt-get install -y --no-install-recommends \
|
||||
libssl-dev \
|
||||
pkg-config \
|
||||
npm \
|
||||
musl-tools; \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN cargo install cargo-leptos
|
||||
RUN npm install tailwindcss -g
|
||||
|
||||
# Copy project dependency manifests
|
||||
COPY Cargo.toml Cargo.lock /app/
|
||||
|
||||
# Add the target to Cargo.toml so we can statically link:
|
||||
RUN echo 'bin-target-triple = "x86_64-unknown-linux-musl"' >> Cargo.toml
|
||||
|
||||
# Create dummy files to force cargo to build the dependencies
|
||||
RUN mkdir /app/src && mkdir /app/style && mkdir /app/assets && \
|
||||
echo "fn main() {}" > /app/src/main.rs && \
|
||||
touch /app/src/lib.rs && \
|
||||
touch /app/style/main.scss
|
||||
|
||||
# Prebuild dependencies
|
||||
RUN cargo-leptos build --release --precompress
|
||||
|
||||
RUN rm -rf /app/src /app/style /app/assets
|
||||
COPY style /app/style
|
||||
|
||||
# Minify CSS
|
||||
RUN npx tailwindcss -i /app/style/main.scss -o /app/style/main.scss --minify
|
||||
|
||||
COPY assets /app/assets
|
||||
COPY src /app/src
|
||||
|
||||
# Touch files to force rebuild
|
||||
RUN touch /app/src/main.rs && touch /app/src/lib.rs
|
||||
|
||||
# Actually build the binary
|
||||
RUN cargo-leptos build --release --precompress
|
||||
|
||||
# Build the final image
|
||||
FROM scratch
|
||||
|
||||
LABEL license="MIT"
|
||||
LABEL description="LibreTunes, an open-source browser audio player and \
|
||||
library manager built for collaborative listening."
|
||||
|
||||
# Copy the binary and the compressed assets to the "site root"
|
||||
COPY --from=builder /app/target/x86_64-unknown-linux-musl/release/libretunes /libretunes
|
||||
COPY --from=builder /app/target/site /target/site
|
||||
|
||||
# Configure Leptos settings
|
||||
ENV LEPTOS_SITE_ADDR=0.0.0.0:3000
|
||||
ENV LEPTOS_SITE_ROOT=/site
|
||||
EXPOSE 3000
|
||||
|
||||
ENTRYPOINT [ "/libretunes" ]
|
Loading…
x
Reference in New Issue
Block a user