Include all addon workspaces and vendored dependencies in image builds, and expose deploy time plus commit metadata on the home page. Amp-Thread-ID: https://ampcode.com/threads/T-01a033d4-0e44-708e-af0e-6166283416ff Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
76 lines
2.7 KiB
Docker
76 lines
2.7 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
FROM node:22-bookworm AS package-builder
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends build-essential ca-certificates curl libssl-dev pkg-config \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \
|
|
| sh -s -- -y --profile minimal --default-toolchain stable
|
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
RUN cargo install wasm-pack --version 0.15.0 --locked
|
|
|
|
WORKDIR /src
|
|
COPY Cargo.toml Cargo.lock rust-toolchain.toml ./
|
|
COPY .cargo ./.cargo
|
|
RUN toolchain="$(sed -n 's/^channel = "\([^"]*\)"/\1/p' rust-toolchain.toml)" \
|
|
&& rustup toolchain install "$toolchain" --profile minimal --component rust-src --target wasm32-unknown-unknown
|
|
|
|
COPY package.json package-lock.json ./
|
|
COPY core/package.json ./core/package.json
|
|
COPY addons ./addons
|
|
COPY vendor ./vendor
|
|
RUN --mount=type=cache,target=/root/.npm npm ci --include=dev
|
|
|
|
COPY core ./core
|
|
COPY server/build.mjs ./server/build.mjs
|
|
RUN --mount=type=cache,target=/src/target mkdir -p /out \
|
|
&& wasm-pack build core --target web --out-dir /out/pkg --release \
|
|
&& node server/build.mjs /src /out
|
|
|
|
FROM golang:1.24-bookworm AS server-builder
|
|
|
|
WORKDIR /src
|
|
COPY go.work ./
|
|
COPY server/go.mod server/go.sum ./server/
|
|
RUN --mount=type=cache,target=/go/pkg/mod go mod download
|
|
COPY server ./server
|
|
RUN --mount=type=cache,target=/go/pkg/mod \
|
|
--mount=type=cache,target=/root/.cache/go-build \
|
|
CGO_ENABLED=1 go test ./server/... \
|
|
&& CGO_ENABLED=1 go build -trimpath -ldflags="-s -w" -o /out/yawn-server ./server
|
|
|
|
FROM debian:bookworm-slim AS runtime
|
|
|
|
ARG YAWN_DEPLOYED_AT=""
|
|
ARG YAWN_DEPLOY_COMMIT_MESSAGE=""
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ca-certificates curl \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& groupadd --system --gid 10001 yawn \
|
|
&& useradd --system --uid 10001 --gid yawn --home-dir /app --create-home yawn \
|
|
&& mkdir -p /data \
|
|
&& chown yawn:yawn /data
|
|
|
|
WORKDIR /app
|
|
COPY --from=server-builder --chown=yawn:yawn /out/yawn-server /app/yawn-server
|
|
COPY --from=package-builder --chown=yawn:yawn /out /app/packages
|
|
COPY --from=package-builder --chown=yawn:yawn /src/node_modules/monaco-editor/min /app/node_modules/monaco-editor/min
|
|
|
|
ENV PORT=5002 \
|
|
YAWN_ROOT=/app \
|
|
YAWN_PACKAGES=/app/packages \
|
|
YAWN_DATABASE=/data/yawn.db \
|
|
YAWN_DEPLOYED_AT="${YAWN_DEPLOYED_AT}" \
|
|
YAWN_DEPLOY_COMMIT_MESSAGE="${YAWN_DEPLOY_COMMIT_MESSAGE}"
|
|
|
|
USER yawn:yawn
|
|
VOLUME ["/data"]
|
|
EXPOSE 5002
|
|
STOPSIGNAL SIGTERM
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
|
CMD curl --fail --silent --show-error "http://127.0.0.1:${PORT}/healthz" || exit 1
|
|
|
|
ENTRYPOINT ["/app/yawn-server"]
|