@@ -2,123 +2,24 @@ FROM alpine AS cloner
22
33ARG VERSION
44
5- WORKDIR /src
5+ RUN mkdir -p /app /config && \
6+ apk add --update --no-cache wget && \
7+ wget -O /tmp/tuliprox.tgz https://github.com/euzu/tuliprox/releases/download/v${VERSION}/tuliprox_v${VERSION}_linux_x86_64.tgz && \
8+ tar -xzf /tmp/tuliprox.tgz -C /app --strip-components=1 && \
9+ chmod +x /app/tuliprox && \
10+ mkdir -p /app/resources && \
11+ mv /app/*.ts /app/resources/ && \
12+ mv /app/*.yml /config && \
13+ touch /config/user.txt && \
14+ rm -rf /tmp/tuliprox*
615
7- RUN apk add --update --no-cache git && \
8- git clone -b v$VERSION https://github.com/euzu/tuliprox.git .
16+ FROM ghcr.io/ipromknight/ubuntu:rolling
917
10- FROM rust:bookworm AS rust-build
11-
12- ARG RUST_TARGET=x86_64-unknown-linux-musl
13-
14- RUN apt-get update && apt-get install -y --no-install-recommends pkg-config musl-tools libssl-dev
15- RUN rustup update && rustup target add $RUST_TARGET
16- ENV RUSTFLAGS='--remap-path-prefix $HOME=~ -C target-feature=+crt-static'
17-
18- COPY --from=cloner /src/Cargo.toml /src/Cargo.lock /src/
19- COPY --from=cloner /src/backend/Cargo.toml /src/backend/
20- COPY --from=cloner /src/frontend/Cargo.toml /src/frontend/
21- COPY --from=cloner /src/shared/Cargo.toml /src/shared/
22-
23- RUN mkdir -p /src/src /src/backend/src /src/frontend/src /src/shared/src && \
24- echo "fn main() {}" > /src/src/main.rs && \
25- echo "fn main() {}" > /src/backend/src/main.rs && \
26- echo "fn main() {}" > /src/frontend/src/main.rs && \
27- echo "pub fn dummy() {}" > /src/shared/src/lib.rs
28-
29- WORKDIR /src
30-
31- RUN cargo build -p tuliprox --target $RUST_TARGET --release || true
32- RUN cargo build -p shared --target $RUST_TARGET --release || true
33-
34- COPY --from=cloner /src/ .
35-
36- RUN cargo build -p tuliprox --target $RUST_TARGET --release
37-
38- FROM rust:bookworm AS trunk-build
39-
40- ARG RUST_TARGET=x86_64-unknown-linux-musl
41-
42- RUN apt-get update && apt-get install -y --no-install-recommends \
43- pkg-config libssl-dev curl libclang-dev binaryen
44-
45- RUN rustup target add wasm32-unknown-unknown
46- RUN cargo install --locked trunk wasm-bindgen-cli
47-
48- COPY --from=cloner /src/Cargo.toml /src/Cargo.lock /src/
49- COPY --from=cloner /src/frontend/Cargo.toml /src/frontend/Trunk.toml /src/frontend/
50- COPY --from=cloner /src/shared/Cargo.toml /src/shared/
51-
52- RUN mkdir -p /src/frontend/src /src/shared/src && \
53- echo "fn main() {}" > /src/frontend/src/main.rs && \
54- echo "pub fn dummy() {}" > /src/shared/src/lib.rs
55-
56- WORKDIR /src/frontend
57-
58- RUN cargo build --target wasm32-unknown-unknown --release || true
59-
60- COPY --from=cloner /src/ /src/
61-
62- WORKDIR /src/frontend
63-
64- RUN trunk build --release
65-
66- # -----------------------------------------------------------------
67- # Stage 3: Build video resources with ffmpeg
68- # -----------------------------------------------------------------
69- FROM linuxserver/ffmpeg:latest AS resource-build
70-
71- COPY --from=cloner /src/resources /src/resources
72-
73- RUN ffmpeg -loop 1 -i /src/resources/channel_unavailable.jpg -t 10 -r 1 -an \
74- -vf "scale=1920:1080" \
75- -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
76- /src/resources/channel_unavailable.ts && \
77- ffmpeg -loop 1 -i /src/resources/user_connections_exhausted.jpg -t 10 -r 1 -an \
78- -vf "scale=1920:1080" \
79- -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
80- /src/resources/user_connections_exhausted.ts && \
81- ffmpeg -loop 1 -i /src/resources/provider_connections_exhausted.jpg -t 10 -r 1 -an \
82- -vf "scale=1920:1080" \
83- -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
84- /src/resources/provider_connections_exhausted.ts && \
85- ffmpeg -loop 1 -i /src/resources/user_account_expired.jpg -t 10 -r 1 -an \
86- -vf "scale=1920:1080" \
87- -c:v libx264 -preset veryfast -crf 23 -pix_fmt yuv420p \
88- /src/resources/user_account_expired.ts
89-
90- FROM alpine:latest AS tz-prep
91-
92- ARG TZ=UTC
93- ENV TZ=${TZ}
94-
95- RUN apk add --no-cache tzdata \
96- && mkdir -p /output/etc \
97- && mkdir -p /output/usr/share \
98- && cp -r /usr/share/zoneinfo /output/usr/share/zoneinfo \
99- && ln -sf /usr/share/zoneinfo/${TZ} /output/etc/localtime
100-
101-
102- FROM ghcr.io/ipromknight/alpine:rolling
103-
104- ARG RUST_TARGET=x86_64-unknown-linux-musl
105- ARG TZ=UTC
106- ENV TZ=${TZ}
107-
108- RUN apk add --no-cache bash curl ca-certificates tini
109-
110- COPY --from=tz-prep /output/usr/share/zoneinfo /usr/share/zoneinfo
111- COPY --from=rust-build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
112-
113- RUN ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime
18+ LABEL org.opencontainers.image.title="tuliprox"
11419
11520WORKDIR /app
116- COPY --from=rust-build /src/target/${RUST_TARGET}/release/tuliprox / app/tuliprox
117- COPY --from=trunk-build /src/frontend/dist / app/web
118- COPY --from=resource-build /src/resources /app/resources
119-
21+ ENV TULIPROX_HOME= "/ app"
22+ COPY --from=cloner / app .
23+ COPY --from=cloner /config /config
24+ COPY --chmod=0755 ./apps/tuliprox/promknight-entrypoint.sh /promknight-entrypoint.sh
12025USER 568
121-
122- EXPOSE 8901
123-
124- COPY --chmod=0755 apps/tuliprox/promknight-entrypoint.sh /promknight-entrypoint.sh
0 commit comments