# Build the redlib binary FROM rust:alpine3.19 AS builder ARG TARGET=aarch64-unknown-linux-musl # Install necessary packages for building the application RUN apk add --no-cache curl git musl-dev # Clone the redlib repository and build RUN git clone https://github.com/redlib-org/redlib && \ cd redlib && \ sed -i 's/--green: #5cff85;/--green: #0A8754;/g' static/style.css && \ sed -i 's/--accent: #d54455;/--accent: #4385BE;/g' static/style.css && \ sed -i 's/--text: black;/--text: #0F0F0F;/g' static/style.css && \ sed -i 's/--accent: #bb2b3b;/--accent: #2968AC;/g' static/style.css && \ sed -i 's/--text: white;/--text: #CFCFCF;/g' static/themes/black.css && \ sed -i 's/--panel-border: 1px solid #ccc;/--panel-border: 1px solid #eee;/g' static/style.css && \ sed -i 's/--panel-border: 1px solid #333;/--panel-border: 1px solid #161616;/g' static/style.css && \ sed -i 's/#bb2b3b/#2968AC/g' static/themes/black.css && \ sed -i 's/--text: black;/--text: #0F0F0F;/g' static/themes/light.css && \ sed -i 's/#bb2b3b/#4385BE/g' static/themes/light.css && \ sed -i 's/--panel-border: 1px solid #ccc;/--panel-border: 1px solid #eee;/g' static/themes/light.css && \ sed -i 's/#d54455/#4385BE/g' static/themes/dark.css && \ sed -i 's/--panel-border: 1px solid #333;/--panel-border: 1px solid #161616;/g' static/themes/dark.css && \ cargo build --release --target=${TARGET} && \ cp target/${TARGET}/release/redlib /usr/local/bin/redlib && \ cd .. && \ rm -rf redlib ################################################## # Create the final image FROM alpine:3.19 RUN apk add --no-cache curl # Create a non-root user RUN adduser --home /nonexistent --no-create-home --disabled-password redlib # Copy the compiled binary from the builder stage COPY --from=builder /usr/local/bin/redlib /usr/local/bin/redlib # Tell Docker to expose port 8080 EXPOSE 8080 # Run a healthcheck every minute to make sure redlib is functional HEALTHCHECK --interval=1m --timeout=3s CMD wget --spider -q http://localhost:8080/settings || exit 1 USER redlib CMD ["redlib"]