Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
63 lines (59 loc) · 2.53 KB
/
Copy pathDockerfile
File metadata and controls
63 lines (59 loc) · 2.53 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
# Control plane. Only source is in git: the console and Go helpers build here, and the
# prebuilt slot payloads come from the release pinned in deploy/payload.json.
FROM --platform=$BUILDPLATFORM node:22-bookworm-slim AS web
RUN npm install -g pnpm@10
WORKDIR /src/web
COPY web/package.json web/pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY web/ ./
RUN pnpm build
FROM --platform=$BUILDPLATFORM golang:1.25-bookworm AS helpers
ENV CGO_ENABLED=0 GOOS=linux GOARCH=amd64
WORKDIR /src/worker
COPY worker/go.mod worker/go.sum ./
RUN go mod download
COPY worker/ ./
RUN go build -buildvcs=false -trimpath -o /out/kin-worker ./cmd/kin-worker \
&& go build -buildvcs=false -trimpath -o /out/kin-egress ./cmd/kin-egress
FROM --platform=$BUILDPLATFORM node:22-bookworm-slim AS payload
WORKDIR /src
COPY deploy/payload.json deploy/payload.json
COPY scripts/fetch-payload.mjs scripts/fetch-payload.mjs
RUN node scripts/fetch-payload.mjs --dest /payload
FROM node:22-bookworm-slim
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates iptables iproute2 python3 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=docker:27-cli /usr/local/bin/docker /usr/local/bin/docker
WORKDIR /opt/vm2api
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY src ./src
COPY scripts ./scripts
COPY VERSION CHANGELOG.md ./
COPY docker/kin-os ./docker/kin-os
COPY docker/kin-kvm ./docker/kin-kvm
COPY --from=web /src/web/dist ./web/dist
COPY --from=payload /payload/bin/ /opt/vm2api/image-bin/
COPY --from=helpers /out/ /opt/vm2api/image-bin/
COPY share/wrap-cli /opt/vm2api/image-wrap-cli
COPY --from=payload /payload/share/wrap-cli/ /opt/vm2api/image-wrap-cli/
COPY --from=payload /payload/share/crag/ /opt/vm2api/image-crag/
COPY scripts/docker-entrypoint.sh /usr/local/bin/vm2api-entrypoint
RUN chmod 755 /usr/local/bin/vm2api-entrypoint /opt/vm2api/image-bin/* \
&& rm -f /opt/vm2api/src/lib/oauth/auth.js \
&& cp -a /opt/vm2api/src/config /opt/vm2api/image-config \
&& mkdir -p /opt/vm2api/vms /opt/vm2api/data /opt/vm2api/bin /opt/vm2api/share
ENV NODE_ENV=production \
HOST=0.0.0.0 \
PORT=8787 \
KIN_PROJECT_ROOT=/opt/vm2api \
KIN_DATA_DIR=/opt/vm2api/data \
KIN_KERNEL_BIN=/opt/vm2api/bin/kin-kernel \
KIN_EGRESS_BIN=/opt/vm2api/bin/kin-egress \
KIN_WORKER_BIN=/opt/vm2api/bin/kin-worker \
KIN_CODEX_KERNEL_BIN=/opt/vm2api/bin/kin-codex-kernel \
KIN_OAUTH_AUTH_BIN=/opt/vm2api/bin/kin-oauth-auth \
KIN_COMPUTER_BIN=/opt/vm2api/bin/kin-computer
EXPOSE 8787
ENTRYPOINT ["/usr/local/bin/vm2api-entrypoint"]