2025-02-23 13:04:36 +01:00
|
|
|
# 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
|
|
|
|
2024-03-27 12:04:54 -05:00
|
|
|
RUN apt-get update && \
|
2025-02-23 13:04:36 +01:00
|
|
|
apt-get install pkg-config musl-tools libssl-dev
|
2023-10-17 10:27:37 +02:00
|
|
|
|
2024-03-27 12:04:54 -05:00
|
|
|
RUN rustup update
|
2024-03-28 11:58:00 +01:00
|
|
|
ENV RUSTFLAGS='--remap-path-prefix $HOME=~ -C target-feature=+crt-static'
|
2024-03-27 12:04:54 -05:00
|
|
|
|
|
|
|
|
COPY . /src
|
|
|
|
|
WORKDIR /src
|
|
|
|
|
|
|
|
|
|
RUN rustup target add x86_64-unknown-linux-musl
|
|
|
|
|
RUN cargo build --target x86_64-unknown-linux-musl --release
|
|
|
|
|
|
2025-02-23 13:04:36 +01:00
|
|
|
# Build node stage
|
2024-03-28 11:58:00 +01:00
|
|
|
FROM node:lts as node-build
|
|
|
|
|
|
|
|
|
|
ENV NODE_OPTIONS=--openssl-legacy-provider
|
|
|
|
|
|
|
|
|
|
COPY ./frontend /app
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
RUN yarn install \
|
|
|
|
|
--prefer-offline \
|
|
|
|
|
--frozen-lockfile \
|
|
|
|
|
--non-interactive \
|
|
|
|
|
--production=false
|
|
|
|
|
RUN yarn build
|
|
|
|
|
RUN rm -rf node_modules
|
2024-03-27 12:04:54 -05:00
|
|
|
|
2025-02-23 13:04:36 +01:00
|
|
|
# Build resource stage (using ffmpeg)
|
|
|
|
|
FROM jrottenberg/ffmpeg:latest as resource-build
|
|
|
|
|
WORKDIR /src
|
|
|
|
|
COPY resources ./resources
|
|
|
|
|
RUN ffmpeg -loop 1 -i ./resources/freeze_frame.jpg -t 10 -r 1 -an \
|
|
|
|
|
-c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
|
|
|
|
|
./resources/freeze_frame.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
|
2024-03-28 11:58:00 +01:00
|
|
|
COPY --from=node-build /app/build /web
|
2025-02-23 13:04:36 +01:00
|
|
|
COPY --from=resource-build /src/resources/freeze_frame.ts /freeze_frame.ts
|
2024-03-27 12:04:54 -05:00
|
|
|
ENTRYPOINT ["/m3u-filter"]
|
|
|
|
|
CMD ["-s", "-p", "/config"]
|
2024-10-21 19:41:17 +02:00
|
|
|
|
2025-02-23 13:04:36 +01: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-02-23 13:04:36 +01:00
|
|
|
COPY --from=resource-build /src/resources/freeze_frame.ts /freeze_frame.ts
|
2024-12-29 11:36:44 +01:00
|
|
|
ENTRYPOINT ["/sbin/tini", "--", "/app/m3u-filter"]
|
2025-02-23 13:04:36 +01:00
|
|
|
CMD ["-s", "-p", "/app/config"]
|