feat: Docker images, RVF export, and README update

- Add docker/ folder with Dockerfile.rust (132MB), Dockerfile.python (569MB),
  and docker-compose.yml
- Remove stale root-level Dockerfile and docker-compose files
- Implement --export-rvf CLI flag for standalone RVF package generation
- Generate wifi-densepose-v1.rvf (13KB) with model weights, vital config,
  SONA profile, and training provenance
- Update README with Docker pull/run commands and RVF export instructions
- Update test count to 542+ and fix Docker port mappings
- Reply to issues #43, #44, #45 with Docker/RVF availability

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
ruv
2026-02-28 23:44:30 -05:00
parent fc409dfd6a
commit add9f192aa
14 changed files with 533 additions and 701 deletions

9
docker/.dockerignore Normal file
View File

@@ -0,0 +1,9 @@
target/
.git/
*.md
*.log
__pycache__/
*.pyc
.env
node_modules/
.claude/

29
docker/Dockerfile.python Normal file
View File

@@ -0,0 +1,29 @@
# WiFi-DensePose Python Sensing Pipeline
# RSSI-based presence/motion detection + WebSocket server
FROM python:3.11-slim-bookworm
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies
COPY v1/requirements-lock.txt /app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt \
&& pip install --no-cache-dir websockets uvicorn fastapi
# Copy application code
COPY v1/ /app/v1/
COPY ui/ /app/ui/
# Copy sensing modules
COPY v1/src/sensing/ /app/v1/src/sensing/
EXPOSE 8765
EXPOSE 8080
ENV PYTHONUNBUFFERED=1
CMD ["python", "-m", "v1.src.sensing.ws_server"]

46
docker/Dockerfile.rust Normal file
View File

@@ -0,0 +1,46 @@
# WiFi-DensePose Rust Sensing Server
# Includes RuVector signal intelligence crates
# Multi-stage build for minimal final image
# Stage 1: Build
FROM rust:1.85-bookworm AS builder
WORKDIR /build
# Copy workspace files
COPY rust-port/wifi-densepose-rs/Cargo.toml rust-port/wifi-densepose-rs/Cargo.lock ./
COPY rust-port/wifi-densepose-rs/crates/ ./crates/
# Copy vendored RuVector crates
COPY vendor/ruvector/ /build/vendor/ruvector/
# Build release binary
RUN cargo build --release -p wifi-densepose-sensing-server 2>&1 \
&& strip target/release/sensing-server
# Stage 2: Runtime
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Copy binary
COPY --from=builder /build/target/release/sensing-server /app/sensing-server
# Copy UI assets
COPY ui/ /app/ui/
# HTTP API
EXPOSE 3000
# WebSocket
EXPOSE 3001
# ESP32 UDP
EXPOSE 5005/udp
ENV RUST_LOG=info
ENTRYPOINT ["/app/sensing-server"]
CMD ["--source", "simulated", "--tick-ms", "100", "--ui-path", "/app/ui"]

26
docker/docker-compose.yml Normal file
View File

@@ -0,0 +1,26 @@
version: "3.9"
services:
sensing-server:
build:
context: ..
dockerfile: docker/Dockerfile.rust
image: ruvnet/wifi-densepose:latest
ports:
- "3000:3000" # REST API
- "3001:3001" # WebSocket
- "5005:5005/udp" # ESP32 UDP
environment:
- RUST_LOG=info
command: ["--source", "simulated", "--tick-ms", "100", "--ui-path", "/app/ui"]
python-sensing:
build:
context: ..
dockerfile: docker/Dockerfile.python
image: ruvnet/wifi-densepose:python
ports:
- "8765:8765" # WebSocket
- "8080:8080" # UI
environment:
- PYTHONUNBUFFERED=1

Binary file not shown.