Files
tuliprox/docker/Dockerfile
T

62 lines
2.1 KiB
Docker
Raw Normal View History

# Build rust stage
2024-03-27 12:04:54 -05:00
FROM rust:bookworm as rust-build
2023-10-17 10:24:42 +02:00
2025-03-14 16:09:07 +01:00
RUN apt-get update && apt-get install -y --no-install-recommends pkg-config musl-tools libssl-dev
2023-10-17 10:27:37 +02:00
2025-03-14 16:09:07 +01:00
# Update Rust toolchain and add necessary target
RUN rustup update && rustup target add x86_64-unknown-linux-musl
# Set Rust compiler flags for better optimization and reproducibility
ENV RUSTFLAGS='--remap-path-prefix $HOME=~ -C target-feature=+crt-static'
2024-03-27 12:04:54 -05:00
2025-03-14 16:09:07 +01:00
# Copy the actual source code and build the project
2024-03-27 12:04:54 -05:00
WORKDIR /src
2025-03-14 16:09:07 +01:00
COPY . /src
2024-03-27 12:04:54 -05:00
RUN cargo build --target x86_64-unknown-linux-musl --release
# Build node stage
FROM node:lts as node-build
ENV NODE_OPTIONS=--openssl-legacy-provider
COPY ./frontend /app
WORKDIR /app
2025-03-14 16:09:07 +01:00
RUN yarn install --prefer-offline --frozen-lockfile --non-interactive --production=false && \
yarn build && rm -rf node_modules
2024-03-27 12:04:54 -05:00
# Build resource stage (using ffmpeg)
FROM jrottenberg/ffmpeg:latest as resource-build
WORKDIR /src
COPY resources ./resources
2025-03-16 17:08:00 +01:00
RUN ffmpeg -loop 1 -i ./resources/channel_unavailable.jpg -t 10 -r 1 -an \
2025-03-14 15:52:03 +01:00
-vf "scale=1920:1080" \
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
2025-03-16 17:08:00 +01:00
./resources/channel_unavailable.ts
RUN ffmpeg -loop 1 -i ./resources/user_connections_exhausted.jpg -t 10 -r 1 -an \
-vf "scale=1920:1080" \
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
./resources/user_connections_exhausted.ts \
# Final container (Scratch)
2024-10-21 19:41:17 +02:00
FROM scratch as scratch-final
2023-10-17 10:27:37 +02:00
WORKDIR /
2024-03-27 12:04:54 -05:00
COPY --from=rust-build /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=rust-build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=rust-build /src/target/x86_64-unknown-linux-musl/release/m3u-filter /m3u-filter
COPY --from=node-build /app/build /web
2025-03-23 13:00:43 +01:00
COPY --from=resource-build /src/resources /resources
2024-03-27 12:04:54 -05:00
ENTRYPOINT ["/m3u-filter"]
CMD ["-s", "-p", "/config"]
2024-10-21 19:41:17 +02:00
# Final container (Alpine)
2024-10-21 19:41:17 +02:00
FROM alpine:latest as alpine-final
2024-12-29 11:36:44 +01:00
RUN apk add --no-cache bash curl ca-certificates tini
2024-10-21 19:41:17 +02:00
WORKDIR /app
COPY --from=rust-build /src/target/x86_64-unknown-linux-musl/release/m3u-filter m3u-filter
COPY --from=node-build /app/build web
2025-03-23 13:00:43 +01:00
COPY --from=resource-build /src/resources /resources
2024-12-29 11:36:44 +01:00
ENTRYPOINT ["/sbin/tini", "--", "/app/m3u-filter"]
CMD ["-s", "-p", "/app/config"]