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
|