89 lines
3.0 KiB
Docker
89 lines
3.0 KiB
Docker
# syntax=docker/dockerfile:1.7
|
|
|
|
ARG RUST_VERSION=1.95.0
|
|
ARG DEBIAN_VERSION=bookworm
|
|
ARG DENO_VERSION=2.7.14
|
|
ARG NGINX_VERSION=1.27-alpine
|
|
|
|
FROM rust:${RUST_VERSION}-${DEBIAN_VERSION} AS rust-source
|
|
WORKDIR /src
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
git \
|
|
libssl-dev \
|
|
pkg-config \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY crates ./crates
|
|
COPY resources ./resources
|
|
COPY tests ./tests
|
|
|
|
FROM rust-source AS runtime-builder
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
|
--mount=type=cache,target=/usr/local/cargo/git \
|
|
--mount=type=cache,target=/src/target \
|
|
cargo build --release -p worker-runtime --bin worker-runtime-rest-server --features ws-server,fs-store \
|
|
&& mkdir -p /out \
|
|
&& cp /src/target/release/worker-runtime-rest-server /out/worker-runtime-rest-server
|
|
|
|
FROM rust-source AS server-builder
|
|
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
|
--mount=type=cache,target=/usr/local/cargo/git \
|
|
--mount=type=cache,target=/src/target \
|
|
cargo build --release -p yoi-workspace-server --bin yoi-workspace-server \
|
|
&& mkdir -p /out \
|
|
&& cp /src/target/release/yoi-workspace-server /out/yoi-workspace-server
|
|
|
|
FROM denoland/deno:${DENO_VERSION} AS web-builder
|
|
WORKDIR /src/web/workspace
|
|
COPY web/workspace ./
|
|
RUN deno task build
|
|
|
|
FROM debian:${DEBIAN_VERSION}-slim AS runtime
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
bash \
|
|
ca-certificates \
|
|
git \
|
|
libssl3 \
|
|
openssh-client \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& useradd --system --uid 10001 --gid root --home-dir /runtime-data --shell /usr/sbin/nologin yoi \
|
|
&& mkdir -p /runtime-data /workdirs \
|
|
&& chown -R yoi:root /runtime-data /workdirs
|
|
|
|
COPY --from=runtime-builder /out/worker-runtime-rest-server /usr/local/bin/worker-runtime-rest-server
|
|
|
|
USER yoi
|
|
EXPOSE 38800
|
|
VOLUME ["/runtime-data", "/workdirs"]
|
|
ENTRYPOINT ["worker-runtime-rest-server"]
|
|
CMD ["--bind", "0.0.0.0:38800", "--display-name", "Docker Runtime", "--fs-root", "/runtime-data", "--workdir-target", "/workdirs"]
|
|
|
|
FROM debian:${DEBIAN_VERSION}-slim AS server
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
git \
|
|
libssl3 \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& useradd --system --uid 10002 --gid root --home-dir /server-data --shell /usr/sbin/nologin yoi \
|
|
&& mkdir -p /server-data /workspace \
|
|
&& chown -R yoi:root /server-data /workspace
|
|
|
|
COPY --from=server-builder /out/yoi-workspace-server /usr/local/bin/yoi-workspace-server
|
|
|
|
USER yoi
|
|
EXPOSE 8787
|
|
VOLUME ["/server-data", "/workspace"]
|
|
ENTRYPOINT ["yoi-workspace-server"]
|
|
CMD ["serve", "--workspace", "/workspace", "--db", "/server-data/workspace.db", "--listen", "0.0.0.0:8787"]
|
|
|
|
FROM nginx:${NGINX_VERSION} AS webui
|
|
COPY docker/nginx.conf /etc/nginx/conf.d/default.conf
|
|
COPY --from=web-builder /src/web/workspace/build /usr/share/nginx/html
|
|
EXPOSE 80
|