| |
| |
| FROM oven/bun:1-alpine AS frontend-builder |
|
|
| WORKDIR /app |
|
|
| |
| RUN apk add --no-cache git |
|
|
| |
| COPY client/js/package.json client/js/tsconfig.json* ./client/js/ |
| COPY demo/package.json demo/tsconfig.json* demo/svelte.config.js* ./demo/ |
|
|
| |
| WORKDIR /app/client/js |
| RUN bun install --frozen-lockfile |
|
|
| |
| COPY client/js/src/ ./src/ |
| COPY client/js/bun.lock* ./ |
|
|
| |
| RUN bun run build |
| RUN bun link |
|
|
| |
| WORKDIR /app/demo |
| RUN bun link @robothub/transport-server-client |
| RUN bun install --frozen-lockfile |
|
|
| |
| COPY demo/src/ ./src/ |
| COPY demo/static/ ./static/ |
| COPY demo/vite.config.ts* demo/tailwind.config.* demo/.prettierrc* ./ |
|
|
| |
| RUN bun run build |
|
|
| |
| FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim |
|
|
| |
| ENV PYTHONUNBUFFERED=1 \ |
| PYTHONDONTWRITEBYTECODE=1 \ |
| UV_SYSTEM_PYTHON=1 \ |
| UV_COMPILE_BYTECODE=1 \ |
| UV_CACHE_DIR=/tmp/uv-cache |
|
|
| |
| RUN apt-get update && apt-get install -y \ |
| |
| build-essential \ |
| gcc \ |
| g++ \ |
| |
| libavformat-dev \ |
| libavcodec-dev \ |
| libavdevice-dev \ |
| libavutil-dev \ |
| libswscale-dev \ |
| libswresample-dev \ |
| |
| libgl1-mesa-glx \ |
| libglib2.0-0 \ |
| libsm6 \ |
| libxext6 \ |
| libxrender-dev \ |
| libgomp1 \ |
| pkg-config \ |
| |
| ffmpeg \ |
| |
| git \ |
| |
| && apt-get clean \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| RUN groupadd -r appuser && useradd -r -g appuser -m -s /bin/bash -u 1000 appuser |
|
|
| |
| WORKDIR /app |
| RUN chown -R appuser:appuser /app |
|
|
| |
| USER appuser |
|
|
| |
| COPY --chown=appuser:appuser server/pyproject.toml server/uv.lock* ./server/ |
|
|
| |
| WORKDIR /app/server |
| RUN --mount=type=cache,target=/tmp/uv-cache,uid=1000,gid=1000 \ |
| uv sync --locked --no-install-project --no-dev |
|
|
| |
| COPY --chown=appuser:appuser server/ ./ |
|
|
| |
| RUN --mount=type=cache,target=/tmp/uv-cache,uid=1000,gid=1000 \ |
| uv sync --locked --no-editable --no-dev |
|
|
| |
| COPY --chown=appuser:appuser --from=frontend-builder /app/demo/build /app/static-frontend |
|
|
| |
| WORKDIR /app |
|
|
| |
| ENV PATH="/app/server/.venv/bin:$PATH" |
|
|
| |
| EXPOSE 7860 |
|
|
| |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \ |
| CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/health')" || exit 1 |
|
|
| |
| CMD ["sh", "-c", "cd server && SERVE_FRONTEND=true uv run python launch_with_ui.py --host 0.0.0.0 --port 7860"] |