Repository navigation
Expand file tree
/
Copy pathDockerfile.api
More file actions
65 lines (64 loc) · 3 KB
/
Copy pathDockerfile.api
File metadata and controls
65 lines (64 loc) · 3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# syntax=docker/dockerfile:1
# Multi-stage build for jmodguard-api.
# Pins Rust 1.96 (lockfile MSRV; edition 2024). JSON API + OAuth only: do not
# embed frontend/ (Bunny serves that from Storage/CDN). linux/amd64 manifest
# digest for rust:1.96-bookworm (must match the FROM line below).
# Local: docker build --secret id=github_token,env=GITHUB_TOKEN -f Dockerfile.api .
FROM rust:1.96-bookworm@sha256:d99f7b31f49909348dc59b51f3c95d1efded1701ffb222f095aaab7de3c4abd8 AS builder
WORKDIR /app
# git and the rust-toolchain.toml toolchain are installed before source COPY
# so those layers stay cached when only application source changes.
RUN apt-get update \
&& apt-get install -y --no-install-recommends git \
&& rm -rf /var/lib/apt/lists/*
COPY rust-toolchain.toml ./
RUN rustup show
COPY Cargo.toml Cargo.lock LICENSE.md ./
COPY src ./src
COPY crates ./crates
COPY deploy ./deploy
COPY migrations ./migrations
COPY vendor ./vendor
COPY scripts/bootstrap-container.sh ./scripts/bootstrap-container.sh
RUN --mount=type=secret,id=github_token,required=true \
GIT_CONFIG_COUNT=1 \
GIT_CONFIG_KEY_0=credential.helper \
GIT_CONFIG_VALUE_0='!f() { echo username=x-access-token; echo password=$(cat /run/secrets/github_token); }; f' \
CARGO_NET_GIT_FETCH_WITH_CLI=true \
cargo fetch --locked
ARG SOURCE_SHA=unknown
RUN JMODGUARD_BUILD_SHA=${SOURCE_SHA} CARGO_NET_GIT_FETCH_WITH_CLI=true \
cargo build --locked --release -p jmodguard-api -p jmodguard-updater --no-default-features \
&& mkdir -p /app/release/bin /app/release/share/jmodguard \
&& cp target/release/jmodguard-api target/release/jmodguard-launcher /app/release/bin/ \
&& cp scripts/bootstrap-container.sh /app/release/bin/jmodguard-bootstrap \
&& cp LICENSE.md /app/release/share/jmodguard/LICENSE.md \
&& cd /app/release \
&& sha256sum bin/jmodguard-api bin/jmodguard-launcher > share/jmodguard/files.sha256 \
&& mkdir -p /app/oci-layer/usr/local/bin /app/oci-layer/usr/local/share/jmodguard \
&& cp -a bin/. /app/oci-layer/usr/local/bin/ \
&& cp -a share/jmodguard/. /app/oci-layer/usr/local/share/jmodguard/
FROM debian:bookworm-slim@sha256:5ae3c39ebd15e229dcedd5cee596b2497182493d41ff162e824ba13fc1b2b867
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --system --uid 10001 --home /data --shell /usr/sbin/nologin jmodguard \
&& mkdir -p /data \
&& chown jmodguard:jmodguard /data
WORKDIR /data
COPY --from=builder /app/oci-layer/ /
ARG SOURCE_SHA=unknown
VOLUME ["/data"]
USER 10001
ENV JMODGUARD_DB_PATH=/data/jmodguard.db
ENV JMODGUARD_CONFIG=/data/config.toml
ENV JMODGUARD_WEB_BIND=0.0.0.0:8080
ENV JMODGUARD_LOG_DIRECTORY=""
# Fail closed unless Bunny/portable remote credentials are present.
ENV JMODGUARD_REQUIRE_REMOTE_DB=1
ENV JMODGUARD_BASE_SHA=${SOURCE_SHA}
ENV JMODGUARD_BASE_ABI=debian-bookworm-amd64
ENV JMODGUARD_ROLE=api
ENV JMODGUARD_SELF_UPDATE=0
EXPOSE 8080
ENTRYPOINT ["/bin/sh", "/usr/local/bin/jmodguard-bootstrap"]