- Add Dockerfile.buttplug: builds Rust/WASM + TS, serves via nginx - Add nginx.buttplug.conf: serves /dist and /wasm with correct MIME types - Add .gitea/workflows/docker-build-buttplug.yml: path-filtered CI workflow - Strip Rust toolchain and buttplug build from frontend Dockerfile - Move buttplug to devDependencies (types only at build time) - Remove vite-plugin-wasm from frontend (WASM now served by nginx) - Add /buttplug proxy in vite.config (dev: localhost:8080) - Add buttplug service to compose.yml - Load buttplug dynamically in play page via runtime import - Fix faq page: suppress no-unnecessary-state-wrap for reassigned SvelteSet Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
66 lines
2.0 KiB
Docker
66 lines
2.0 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
# ============================================================================
|
|
# Builder stage - compile Rust/WASM and TypeScript
|
|
# ============================================================================
|
|
FROM node:22.11.0-slim AS builder
|
|
|
|
# Install build dependencies for Rust
|
|
RUN apt-get update && apt-get install -y \
|
|
curl \
|
|
build-essential \
|
|
pkg-config \
|
|
libssl-dev \
|
|
ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Enable corepack for pnpm
|
|
RUN npm install -g corepack@latest && corepack enable
|
|
|
|
# Install Rust toolchain
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
|
|
--default-toolchain stable \
|
|
--profile minimal \
|
|
--target wasm32-unknown-unknown
|
|
|
|
ENV PATH="/root/.cargo/bin:${PATH}"
|
|
|
|
# Install wasm-bindgen-cli
|
|
RUN cargo install wasm-bindgen-cli
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy workspace configuration
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
|
|
COPY packages/buttplug ./packages/buttplug
|
|
|
|
# Install dependencies
|
|
RUN pnpm install --frozen-lockfile --filter @sexy.pivoine.art/buttplug
|
|
|
|
# Build WASM
|
|
RUN RUSTFLAGS='--cfg getrandom_backend="wasm_js" --cfg=web_sys_unstable_apis' \
|
|
pnpm --filter @sexy.pivoine.art/buttplug build:wasm
|
|
|
|
# Build TypeScript
|
|
RUN pnpm --filter @sexy.pivoine.art/buttplug build
|
|
|
|
# ============================================================================
|
|
# Runner stage - nginx serving dist/ and wasm/
|
|
# ============================================================================
|
|
FROM nginx:1.27-alpine AS runner
|
|
|
|
# Remove default nginx config
|
|
RUN rm /etc/nginx/conf.d/default.conf
|
|
|
|
# Copy nginx config
|
|
COPY nginx.buttplug.conf /etc/nginx/conf.d/buttplug.conf
|
|
|
|
# Copy built artifacts
|
|
COPY --from=builder /app/packages/buttplug/dist /usr/share/nginx/html/dist
|
|
COPY --from=builder /app/packages/buttplug/wasm /usr/share/nginx/html/wasm
|
|
|
|
EXPOSE 80
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
|
|
CMD wget --no-verbose --tries=1 --spider http://localhost/dist/index.js || exit 1
|