burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
852e4ed verified
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
# Dockerfile for OpenApp Environment
# This image provides OpenApps web application simulation for UI agent training
#
# This Dockerfile works for both local builds and HuggingFace Spaces deployment:
# - Local build: cd envs/openapp_env && docker build -t openapp-env:latest -f server/Dockerfile .
# - HuggingFace: Automatically deployed via `openenv push`
#
# Run with web interface:
# docker run -p 8000:8000 -e ENABLE_WEB_INTERFACE=true openapp-env:latest
FROM python:3.11-slim
# Set metadata
LABEL maintainer="OpenEnv Team"
LABEL description="OpenApp Environment with BrowserGym for UI agent training"
LABEL org.opencontainers.image.source="https://github.com/meta-pytorch/OpenEnv"
# Set working directory
WORKDIR /app/env
# Install system dependencies
# - git: required to clone OpenApps from GitHub
# - curl: for healthcheck
# - Playwright/BrowserGym dependencies: fonts, libraries for browser automation
RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
curl \
ca-certificates \
wget \
gnupg \
# Playwright/Chromium dependencies
libnss3 \
libnspr4 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libdbus-1-3 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxrandr2 \
libgbm1 \
libasound2 \
libpango-1.0-0 \
libcairo2 \
libatspi2.0-0 \
libxshmfence1 \
fonts-liberation \
libappindicator3-1 \
xdg-utils && \
rm -rf /var/lib/apt/lists/*
# Set environment variables
ENV PYTHONUNBUFFERED=1
# Set working directory
WORKDIR /app/env
# Copy environment files
# Context is always the env directory (envs/openapp_env/)
# - GitHub Actions: uses context: envs/openapp_env
# - HuggingFace: openenv push uploads env dir as context
COPY . /app/env
# Install OpenApps FIRST to establish openai<2 (required by agentlab)
# This must happen before openenv-core to avoid version conflict
WORKDIR /app
RUN git clone https://github.com/facebookresearch/OpenApps.git openapps && \
cd openapps && \
pip install --no-cache-dir -e .
# Verify OpenApps installation
RUN python -c "import open_apps; print('βœ“ OpenApps installed')"
# Install openenv-core from GitHub with --no-deps to avoid openai>=2.7.2 conflict
# Then install only the server dependencies (no openai needed for server)
RUN pip install --no-cache-dir --no-deps "openenv-core[core]>=0.2.1" && \
pip install --no-cache-dir fastapi pydantic uvicorn requests websockets fastmcp "beartype>=0.17.2"
# Install openapp_env and remaining dependencies
WORKDIR /app/env
RUN pip install --no-cache-dir -e .
# Ensure fastmcp runtime deps are on compatible versions after all installs.
RUN pip install --no-cache-dir --upgrade "beartype>=0.22.6" "fastmcp>=2.14.5"
# Verify installation
RUN python -c "import openapp_env; print('βœ“ openapp_env installed')" && \
python -c "import openapp_env.server.app; print('βœ“ openapp_env.server.app importable')"
# Install Playwright browsers (Chromium for BrowserGym)
# We already installed system dependencies above, so just install the browser
RUN playwright install chromium
# Copy startup script
WORKDIR /app/env
COPY server/start.sh /app/start.sh
RUN chmod +x /app/start.sh
# OpenApp-specific environment variables (can be overridden at runtime)
ENV OPENAPPS_URL=http://localhost:5001
ENV OPENAPPS_PORT=5001
ENV OPENAPP_HEADLESS=true
ENV OPENAPP_MAX_STEPS=50
# Hydra requires USER environment variable
ENV USER=root
# Enable web interface by default (set to false to disable)
ENV ENABLE_WEB_INTERFACE=true
# Expose ports (8000 for FastAPI, 5001 for OpenApps)
EXPOSE 8000 5001
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
# Run the startup script that launches both OpenApps server and FastAPI server
# Web interface will be available at /web if ENABLE_WEB_INTERFACE=true
# API documentation available at /docs
CMD ["/app/start.sh"]