lldap/Dockerfile
2022-07-14 22:24:41 +07:00

132 lines
4.5 KiB
Docker

# Create our development image
FROM rust:1.62-slim-bullseye AS builder-base
# Set env for our builder
ENV CARGO_TERM_COLOR="always" \
RUSTFLAGS="-Ctarget-feature=-crt-static" \
OPENSSL_INCLUDE_DIR="/usr/include/openssl/" \
CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER="arm-linux-gnueabihf-gcc" \
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER="aarch64-linux-gnu-gcc"
# Get develop package and npm
RUN apt update && \
apt install -y --no-install-recommends curl git wget libssl-dev build-essential make perl pkg-config && \
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
apt update && \
apt install -y --no-install-recommends nodejs && \
apt clean && \
rm -rf /var/lib/apt/lists/* && \
npm install -g npm && \
npm install -g yarn && \
npm install -g pnpm
#######################################################
### Only enable if building non-native architecture ###
#######################################################
## aarch64 build
### Set openssl path
#ENV OPENSSL_LIB_DIR="/usr/lib/aarch64-linux-gnu/"
#RUN dpkg --add-architecture arm64 && \
# apt update && \
# apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-arm64-cross libc6-dev-arm64-cross libssl-dev:arm64 && \
# apt clean && \
# rm -rf /var/lib/apt/lists/*
### add arm64 target
#RUN rustup target add aarch64-unknown-linux-gnu
## armhf build
### Set openssl path
#ENV OPENSSL_LIB_DIR="/usr/lib/arm-linux-gnueabihf/"
#RUN dpkg --add-architecture armhf && \
# apt update && \
# apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc6-armhf-cross libc6-dev-armhf-cross libssl-dev:armhf && \
# apt clean && \
# rm -rf /var/lib/apt/lists/*
### add armhf target
#RUN rustup target add rustup target add armv7-unknown-linux-gnueabihf
# Install cargo-chef and wasm-pack via cargo [npm doesn't have arm64 bin]
RUN RUSTFLAGS="-Ctarget-feature=-crt-static" cargo install cargo-chef wasm-pack
RUN rustup target add wasm32-unknown-unknown
# Install rollup
RUN npm install -g rollup
# Prepare dependencies
FROM builder-base AS planner
WORKDIR /lldap-src
COPY . .
RUN cargo chef prepare --recipe-path /tmp/recipe.json
# Build depedencies
FROM builder-base AS builder
COPY --from=planner /tmp/recipe.json recipe.json
RUN RUSTFLAGS="-Ctarget-feature=-crt-static" cargo chef cook --release -p migration-tool
RUN RUSTFLAGS="-Ctarget-feature=-crt-static" cargo chef cook --release -p lldap_app --target wasm32-unknown-unknown
RUN RUSTFLAGS="-Ctarget-feature=-crt-static" cargo chef cook --release -p lldap
WORKDIR /lldap-src
COPY . .
# Compiling application, take your time
### amd64
#RUN cargo build --target=x86_64-unknown-linux-gnu --release -p lldap -p migration-tool
#######################################################
### Only enable if building non-native architecture ###
#######################################################
### arm64
RUN cargo build --target=aarch64-unknown-linux-gnu --release -p lldap -p migration-tool
### armhf
#RUN cargo build --target=armv7-unknown-linux-gnueabihf --release -p lldap -p migration-tool
### Build frontend
RUN app/build.sh
# Prepare our application path
RUN mkdir -p /lldap/app
# Web and App dir
COPY docker-entrypoint.sh /docker-entrypoint.sh
COPY lldap_config.docker_template.toml /lldap/
# The applications
RUN cp target/*/release/lldap /lldap/lldap && \
cp target/*/release/migration-tool /lldap/migration-tool && \
cp -R app/index.html \
app/pkg \
app/static \
/lldap/app/
# Fetch our fonts
WORKDIR /lldap
RUN set -x \
&& for file in $(cat /lldap/app/static/libraries.txt); do wget -P app/static "$file"; done \
&& for file in $(cat /lldap/app/static/fonts/fonts.txt); do wget -P app/static/fonts "$file"; done \
&& chmod a+r -R .
### Final image
FROM alpine:3.16
WORKDIR /app
ENV UID=1000 \
GID=1000 \
USER=lldap
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing/" >> /etc/apk/repositories && \
apk add --no-cache tini ca-certificates bash gosu && \
addgroup -g $GID $USER && \
adduser \
--disabled-password \
--gecos "" \
--home "$(pwd)" \
--ingroup "$USER" \
--no-create-home \
--uid "$UID" \
"$USER" && \
mkdir -p /data && \
chown $USER:$USER /data
### Copy out the binary and web from builder
COPY --from=builder --chown=$USER:$USER /lldap /app
COPY --from=builder --chown=$USER:$USER /docker-entrypoint.sh /docker-entrypoint.sh
VOLUME ["/data"]
WORKDIR /app
ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"]
#CMD ["run", "--config-file", "/data/lldap_config.toml"]