chore: import upstream snapshot with attribution
Test Browser Use CLI Install / uv pip install (ubuntu-latest) (push) Failing after 1s
Test Browser Use CLI Install / uvx browser-use from local wheel (push) Failing after 1s
Test Browser Use CLI Install / uvx browser-use[cli] from PyPI (push) Failing after 1s
package / pip-install-on-macos-latest-py-3.11 (push) Has been skipped
package / pip-install-on-macos-latest-py-3.13 (push) Has been skipped
package / pip-install-on-ubuntu-latest-py-3.11 (push) Has been skipped
package / pip-install-on-windows-latest-py-3.13 (push) Has been skipped
cloud_evals / trigger_cloud_eval_image_build (push) Failing after 1s
docker / build_publish_image (push) Failing after 1s
Test Browser Use CLI Install / browser-use skill sync (push) Failing after 1s
lint / code-style (push) Failing after 0s
lint / type-checker (push) Failing after 1s
package / pip-build (push) Failing after 1s
lint / syntax-errors (push) Failing after 3s
package / pip-install-on-ubuntu-latest-py-3.13 (push) Has been skipped
package / pip-install-on-windows-latest-py-3.11 (push) Has been skipped
test / ${{ matrix.test_filename }} (push) Has been skipped
test / evaluate-tasks (push) Has been skipped
test / setup-chromium (push) Failing after 2s
test / find_tests (push) Failing after 2s
Test Browser Use CLI Install / uv pip install (windows-latest) (push) Has been cancelled
Test Browser Use CLI Install / uv pip install (macos-latest) (push) Has been cancelled
Test Browser Use CLI Install / uv pip install (ubuntu-latest) (push) Failing after 1s
Test Browser Use CLI Install / uvx browser-use from local wheel (push) Failing after 1s
Test Browser Use CLI Install / uvx browser-use[cli] from PyPI (push) Failing after 1s
package / pip-install-on-macos-latest-py-3.11 (push) Has been skipped
package / pip-install-on-macos-latest-py-3.13 (push) Has been skipped
package / pip-install-on-ubuntu-latest-py-3.11 (push) Has been skipped
package / pip-install-on-windows-latest-py-3.13 (push) Has been skipped
cloud_evals / trigger_cloud_eval_image_build (push) Failing after 1s
docker / build_publish_image (push) Failing after 1s
Test Browser Use CLI Install / browser-use skill sync (push) Failing after 1s
lint / code-style (push) Failing after 0s
lint / type-checker (push) Failing after 1s
package / pip-build (push) Failing after 1s
lint / syntax-errors (push) Failing after 3s
package / pip-install-on-ubuntu-latest-py-3.13 (push) Has been skipped
package / pip-install-on-windows-latest-py-3.11 (push) Has been skipped
test / ${{ matrix.test_filename }} (push) Has been skipped
test / evaluate-tasks (push) Has been skipped
test / setup-chromium (push) Failing after 2s
test / find_tests (push) Failing after 2s
Test Browser Use CLI Install / uv pip install (windows-latest) (push) Has been cancelled
Test Browser Use CLI Install / uv pip install (macos-latest) (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
# Docker Setup for Browser-Use
|
||||
|
||||
This directory contains the optimized Docker build system for browser-use, achieving < 30 second builds.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Build base images (only needed once or when dependencies change)
|
||||
./docker/build-base-images.sh
|
||||
|
||||
# Build browser-use
|
||||
docker build -f Dockerfile.fast -t browseruse .
|
||||
|
||||
# Or use the standard Dockerfile (slower but self-contained)
|
||||
docker build -t browseruse .
|
||||
```
|
||||
|
||||
## Files
|
||||
|
||||
- `Dockerfile` - Standard self-contained build (~2 min)
|
||||
- `Dockerfile.fast` - Fast build using pre-built base images (~30 sec)
|
||||
- `docker/` - Base image definitions and build script
|
||||
- `base-images/system/` - Python + minimal system deps
|
||||
- `base-images/chromium/` - Adds Chromium browser
|
||||
- `base-images/python-deps/` - Adds Python dependencies
|
||||
- `build-base-images.sh` - Script to build all base images
|
||||
|
||||
## Performance
|
||||
|
||||
| Build Type | Time |
|
||||
|------------|------|
|
||||
| Standard Dockerfile | ~2 minutes |
|
||||
| Fast build (with base images) | ~30 seconds |
|
||||
| Rebuild after code change | ~16 seconds |
|
||||
@@ -0,0 +1,15 @@
|
||||
ARG BASE_TAG=latest
|
||||
FROM browseruse/base-system:${BASE_TAG}
|
||||
|
||||
WORKDIR /tmp
|
||||
COPY pyproject.toml ./
|
||||
|
||||
# Install chromium browser using temporary playwright installation
|
||||
RUN --mount=type=cache,target=/root/.cache,sharing=locked \
|
||||
echo "Installing chromium browser via temporary playwright..." && \
|
||||
pip install --no-cache-dir playwright && \
|
||||
PLAYWRIGHT_BROWSERS_PATH=/opt/playwright playwright install chromium --with-deps --no-shell && \
|
||||
ln -s /opt/playwright/chromium-*/chrome-linux/chrome /usr/bin/chromium-browser && \
|
||||
chmod -R 755 /opt/playwright && \
|
||||
pip uninstall playwright -y && \
|
||||
rm -f pyproject.toml
|
||||
@@ -0,0 +1,11 @@
|
||||
ARG BASE_TAG=latest
|
||||
FROM browseruse/base-chromium:${BASE_TAG}
|
||||
|
||||
ENV PYTHONUNBUFFERED=1 PATH="/app/.venv/bin:$PATH" PLAYWRIGHT_BROWSERS_PATH=/opt/playwright
|
||||
|
||||
WORKDIR /app
|
||||
COPY pyproject.toml uv.lock* ./
|
||||
|
||||
RUN --mount=type=cache,target=/root/.cache/uv,sharing=locked \
|
||||
uv venv && \
|
||||
uv sync --all-extras --no-dev --no-install-project --compile-bytecode
|
||||
@@ -0,0 +1,10 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
# Install minimal system dependencies
|
||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||
apt-get update && \
|
||||
apt-get install -y --no-install-recommends ca-certificates curl wget && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install uv package manager
|
||||
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
|
||||
Executable
+58
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
# Build script for browser-use base images
|
||||
set -euo pipefail
|
||||
|
||||
# Configuration
|
||||
REGISTRY="${DOCKER_REGISTRY:-browseruse}"
|
||||
PLATFORMS="${PLATFORMS:-linux/amd64}"
|
||||
PUSH="${PUSH:-false}"
|
||||
|
||||
# Build function
|
||||
build_image() {
|
||||
local name=$1
|
||||
local dockerfile=$2
|
||||
local build_args="${3:-}"
|
||||
|
||||
echo "[INFO] Building ${name}..."
|
||||
|
||||
local build_cmd="docker build"
|
||||
local tag_args="-t ${REGISTRY}/${name}:latest -t ${REGISTRY}/${name}:$(date +%Y%m%d)"
|
||||
|
||||
# Use buildx for multi-platform or push
|
||||
if [[ "$PLATFORMS" == *","* ]] || [ "$PUSH" = "true" ]; then
|
||||
build_cmd="docker buildx build --platform=$PLATFORMS"
|
||||
[ "$PUSH" = "true" ] && build_cmd="$build_cmd --push" || build_cmd="$build_cmd"
|
||||
fi
|
||||
|
||||
$build_cmd $tag_args $build_args -f $dockerfile ..
|
||||
}
|
||||
|
||||
# Main
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Parse arguments
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--push) PUSH=true; shift ;;
|
||||
--registry) REGISTRY="$2"; shift 2 ;;
|
||||
--platforms) PLATFORMS="$2"; shift 2 ;;
|
||||
--help)
|
||||
echo "Usage: $0 [--push] [--registry REG] [--platforms P]"
|
||||
exit 0 ;;
|
||||
*) echo "Unknown option: $1"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Create buildx builder if needed
|
||||
if [[ "$PLATFORMS" == *","* ]] || [ "$PUSH" = "true" ]; then
|
||||
docker buildx inspect browseruse-builder >/dev/null 2>&1 || \
|
||||
docker buildx create --name browseruse-builder --use
|
||||
docker buildx use browseruse-builder
|
||||
fi
|
||||
|
||||
# Build images in order
|
||||
build_image "base-system" "base-images/system/Dockerfile"
|
||||
build_image "base-chromium" "base-images/chromium/Dockerfile" "--build-arg BASE_TAG=latest"
|
||||
build_image "base-python-deps" "base-images/python-deps/Dockerfile" "--build-arg BASE_TAG=latest"
|
||||
|
||||
echo "[INFO] Build complete. Use: FROM ${REGISTRY}/base-python-deps:latest"
|
||||
Reference in New Issue
Block a user