mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-06-11 17:46:32 -04:00
84 lines
3.1 KiB
Docker
84 lines
3.1 KiB
Docker
FROM debian:stable-slim
|
|
|
|
ARG MINISIG=0.12
|
|
ARG ZIG_MINISIG=RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U
|
|
ARG V8=14.0.365.4
|
|
ARG ZIG_V8=v0.4.7
|
|
ARG TARGETPLATFORM
|
|
|
|
RUN apt-get update -yq && \
|
|
apt-get install -yq --no-install-recommends xz-utils ca-certificates \
|
|
pkg-config libglib2.0-dev \
|
|
clang make curl git && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Get Rust
|
|
# Download then execute (rather than `curl | sh`) so a failed download is not
|
|
# masked by sh's exit code under /bin/sh, which has no pipefail.
|
|
RUN curl --fail -sSL --retry 3 --retry-delay 2 -o /tmp/rustup.sh https://sh.rustup.rs && \
|
|
sh /tmp/rustup.sh --profile minimal -y && \
|
|
rm /tmp/rustup.sh
|
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
|
|
# install minisig
|
|
RUN curl --fail -L --retry 3 --retry-delay 2 -O https://github.com/jedisct1/minisign/releases/download/${MINISIG}/minisign-${MINISIG}-linux.tar.gz && \
|
|
tar xzf minisign-${MINISIG}-linux.tar.gz -C /
|
|
|
|
# clone lightpanda
|
|
RUN git clone --depth 1 https://github.com/lightpanda-io/browser.git
|
|
WORKDIR /browser
|
|
|
|
# install zig
|
|
RUN ZIG=$(grep '\.minimum_zig_version = "' "build.zig.zon" | cut -d'"' -f2) && \
|
|
case $TARGETPLATFORM in \
|
|
"linux/arm64") ARCH="aarch64" ;; \
|
|
*) ARCH="x86_64" ;; \
|
|
esac && \
|
|
curl --fail -L --retry 3 --retry-delay 2 -O https://ziglang.org/download/${ZIG}/zig-${ARCH}-linux-${ZIG}.tar.xz && \
|
|
curl --fail -L --retry 3 --retry-delay 2 -O https://ziglang.org/download/${ZIG}/zig-${ARCH}-linux-${ZIG}.tar.xz.minisig && \
|
|
/minisign-linux/${ARCH}/minisign -Vm zig-${ARCH}-linux-${ZIG}.tar.xz -P ${ZIG_MINISIG} && \
|
|
tar xf zig-${ARCH}-linux-${ZIG}.tar.xz && \
|
|
mv zig-${ARCH}-linux-${ZIG} /usr/local/lib && \
|
|
ln -s /usr/local/lib/zig-${ARCH}-linux-${ZIG}/zig /usr/local/bin/zig
|
|
|
|
# download and install v8
|
|
RUN case $TARGETPLATFORM in \
|
|
"linux/arm64") ARCH="aarch64" ;; \
|
|
*) ARCH="x86_64" ;; \
|
|
esac && \
|
|
curl --fail -L --retry 3 --retry-delay 2 -o libc_v8.a https://github.com/lightpanda-io/zig-v8-fork/releases/download/${ZIG_V8}/libc_v8_${V8}_linux_${ARCH}.a && \
|
|
mkdir -p v8/ && \
|
|
mv libc_v8.a v8/libc_v8.a
|
|
|
|
# build v8 snapshot
|
|
RUN zig build -Doptimize=ReleaseFast \
|
|
-Dprebuilt_v8_path=v8/libc_v8.a \
|
|
snapshot_creator -- src/snapshot.bin
|
|
|
|
# build release
|
|
RUN zig build -Doptimize=ReleaseFast \
|
|
-Dsnapshot_path=../../snapshot.bin \
|
|
-Dprebuilt_v8_path=v8/libc_v8.a
|
|
|
|
FROM debian:stable-slim
|
|
|
|
RUN apt-get update -yq && \
|
|
apt-get install -yq --no-install-recommends tini && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
FROM debian:stable-slim
|
|
|
|
# copy ca certificates
|
|
COPY --from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
|
|
|
COPY --from=0 /browser/zig-out/bin/lightpanda /bin/lightpanda
|
|
COPY --from=1 /usr/bin/tini /usr/bin/tini
|
|
|
|
EXPOSE 9222/tcp
|
|
|
|
# Lightpanda install only some signal handlers, and PID 1 doesn't have a default SIGTERM signal handler.
|
|
# Using "tini" as PID1 ensures that signals work as expected, so e.g. "docker stop" will not hang.
|
|
# (See https://github.com/krallin/tini#why-tini).
|
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
CMD ["/bin/lightpanda", "serve", "--host", "0.0.0.0", "--port", "9222", "--log-level", "info"]
|