An encrypted personal cloud built on the AT Protocol.
1FROM oven/bun:1 AS web-deps
2
3WORKDIR /build/web
4COPY web/package.json web/bun.lock ./
5RUN bun install --frozen-lockfile
6
7FROM zot.sans-self.org/infra/rust-wasm:latest AS wasm-builder
8
9WORKDIR /build
10COPY Cargo.toml Cargo.lock ./
11COPY crates/ crates/
12
13RUN wasm-pack build crates/opake-wasm --target web --out-dir ../../web/src/wasm/opake-wasm --out-name opake
14
15FROM web-deps AS web-builder
16
17ARG VITE_APPVIEW_URL=https://appview.opake.app
18ARG VITE_SITE_URL=https://opake.app
19ENV VITE_APPVIEW_URL=$VITE_APPVIEW_URL
20ENV VITE_SITE_URL=$VITE_SITE_URL
21
22COPY web/ ./
23COPY --from=wasm-builder /build/web/src/wasm/opake-wasm/ ./src/wasm/opake-wasm/
24
25RUN bun run tsc && bun run vite build
26
27FROM oven/bun:1-slim
28
29RUN groupadd -g 1000 opake || true && useradd -u 1000 -g 1000 -m opake || true
30
31WORKDIR /app
32COPY --from=web-builder --chown=1000:1000 /build/web/dist/ ./dist/
33COPY --from=web-builder --chown=1000:1000 /build/web/node_modules/ ./node_modules/
34COPY --from=web-builder --chown=1000:1000 /build/web/package.json ./
35COPY --from=web-builder --chown=1000:1000 /build/web/serve.ts ./
36
37USER 1000:1000
38EXPOSE 3000
39
40ENV NODE_ENV=production
41ENV PORT=3000
42
43CMD ["bun", "run", "serve.ts"]