this repo has no description
1FROM rust:1.89-bookworm AS builder
2WORKDIR /app
3
4COPY Cargo.toml Cargo.lock ./
5COPY src ./src
6
7RUN cargo build --release
8
9FROM debian:bookworm-slim AS sidecar-fetch
10ARG TARGETARCH
11
12RUN arch="${TARGETARCH:-amd64}" \
13 && test "${arch}" = "amd64" || (echo "full image sidecars currently support linux/amd64 only" >&2 && exit 1)
14
15RUN apt-get update \
16 && apt-get install -y --no-install-recommends \
17 ca-certificates \
18 curl \
19 jq \
20 unzip \
21 && rm -rf /var/lib/apt/lists/*
22
23RUN set -eu; \
24 mkdir -p /out/sidecar/chromium; \
25 chromium_manifest_url="https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json"; \
26 chromium_url="$(curl -fsSL "${chromium_manifest_url}" | jq -r '.channels.Stable.downloads["chrome-headless-shell"][] | select(.platform == "linux64") | .url')"; \
27 test -n "${chromium_url}" && test "${chromium_url}" != "null"; \
28 curl -fL "${chromium_url}" -o /tmp/chromium.zip; \
29 unzip -q /tmp/chromium.zip -d /tmp/chromium; \
30 chromium_source="$(find /tmp/chromium -type f -name chrome-headless-shell | head -n 1)"; \
31 test -n "${chromium_source}"; \
32 chromium_root="$(dirname "${chromium_source}")"; \
33 cp -R "${chromium_root}"/. /out/sidecar/chromium/; \
34 cp "${chromium_source}" /out/sidecar/chromium/headless_shell; \
35 chmod +x /out/sidecar/chromium/headless_shell
36
37FROM debian:bookworm-slim AS runtime-base
38WORKDIR /app
39
40RUN apt-get update \
41 && apt-get install -y --no-install-recommends \
42 ca-certificates \
43 fonts-liberation \
44 libasound2 \
45 libatk-bridge2.0-0 \
46 libatk1.0-0 \
47 libc6 \
48 libcairo2 \
49 libcups2 \
50 libdbus-1-3 \
51 libdrm2 \
52 libexpat1 \
53 libgbm1 \
54 libglib2.0-0 \
55 libgtk-3-0 \
56 libnspr4 \
57 libnss3 \
58 libpango-1.0-0 \
59 libu2f-udev \
60 libx11-6 \
61 libx11-xcb1 \
62 libxcb1 \
63 libxcomposite1 \
64 libxcursor1 \
65 libxdamage1 \
66 libxext6 \
67 libxfixes3 \
68 libxi6 \
69 libxkbcommon0 \
70 libxrandr2 \
71 libxrender1 \
72 libxshmfence1 \
73 xdg-utils \
74 && rm -rf /var/lib/apt/lists/*
75
76COPY --from=builder /app/target/release/browser-stream /usr/local/bin/browser-stream
77COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh
78RUN chmod +x /usr/local/bin/entrypoint.sh
79
80RUN groupadd --system browserstream \
81 && useradd --system --gid browserstream --create-home --home-dir /home/browserstream browserstream
82
83ENV RUST_LOG=info
84ENV BROWSER_STREAM_NO_SANDBOX=1
85
86ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
87
88FROM runtime-base AS full
89COPY --from=sidecar-fetch /out/sidecar /opt/sidecar
90RUN apt-get update \
91 && apt-get install -y --no-install-recommends \
92 ffmpeg \
93 && rm -rf /var/lib/apt/lists/* \
94 && chown -R browserstream:browserstream /opt/sidecar
95
96ENV BROWSER_STREAM_CHROMIUM_PATH=/opt/sidecar/chromium/headless_shell
97ENV BROWSER_STREAM_FFMPEG_PATH=/usr/bin/ffmpeg
98
99USER browserstream
100
101FROM runtime-base AS slim
102RUN apt-get update \
103 && apt-get install -y --no-install-recommends \
104 chromium \
105 ffmpeg \
106 && rm -rf /var/lib/apt/lists/*
107
108USER browserstream
109
110FROM slim AS default