Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
omni-code / sandbox / Dockerfile.work
Size: Mime:
FROM ubuntu:24.04

ENV DEBIAN_FRONTEND=noninteractive

ARG CODE_SERVER_VERSION=4.109.2

RUN apt-get update && apt-get install -y \
    ca-certificates \
    curl \
    apt-transport-https \
    git \
    git-lfs \
    openssh-client \
    sudo \
    python3 \
    python3-pip \
    python3-venv \
    pipx \
    ripgrep \
    fd-find \
    jq \
    sqlite3 \
    ffmpeg \
    pandoc \
    imagemagick \
    build-essential \
    pkg-config \
    libgit2-dev \
    gosu \
    iptables \
    unzip \
    gnupg2 \
    less \
    vim \
    wget \
    postgresql \
    postgresql-client \
    redis-server \
    libpq-dev \
    libvips42 \
    poppler-utils \
    locales \
    libssl-dev \
    libreadline-dev \
    zlib1g-dev \
    libyaml-dev \
    libffi-dev \
    libgdbm-dev \
    libncurses5-dev \
    libdb-dev \
    xz-utils \
    libbz2-dev \
    libsqlite3-dev \
    liblzma-dev \
    tk-dev \
    libreoffice-core \
    libreoffice-writer \
    libreoffice-impress \
    # VNC desktop support (activated via OMNI_CODE_VNC=1)
    xvfb \
    xfce4 \
    xfce4-goodies \
    x11vnc \
    novnc \
    websockify \
    xdotool \
    dbus-x11 \
    software-properties-common \
    && (apt-get install -y postgresql-16-pgvector || apt-get install -y postgresql-pgvector) \
    && rm -rf /var/lib/apt/lists/*

# Install Firefox from Mozilla PPA (Ubuntu 24.04 only has a snap stub)
RUN add-apt-repository -y ppa:mozillateam/ppa \
    && echo 'Package: *\nPin: release o=LP-PPA-mozillateam\nPin-Priority: 1001' > /etc/apt/preferences.d/mozilla-firefox \
    && apt-get update \
    && apt-get install -y firefox \
    && rm -rf /var/lib/apt/lists/*

RUN ARCH="$(dpkg --print-architecture)" \
    && curl -fOL "https://github.com/coder/code-server/releases/download/v${CODE_SERVER_VERSION}/code-server_${CODE_SERVER_VERSION}_${ARCH}.deb" \
    && apt-get update \
    && apt-get install -y "./code-server_${CODE_SERVER_VERSION}_${ARCH}.deb" \
    && rm -f "code-server_${CODE_SERVER_VERSION}_${ARCH}.deb" \
    && rm -rf /var/lib/apt/lists/*

RUN git lfs install --system

ENV NVM_DIR=/opt/nvm
ENV NODE_VERSION=20.18.1

RUN mkdir -p "${NVM_DIR}" \
    && curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash \
    && bash -lc "source ${NVM_DIR}/nvm.sh && nvm install ${NODE_VERSION} && nvm alias default ${NODE_VERSION} && npm install -g yarn@1.22.19"

ENV PATH="/opt/nvm/versions/node/v${NODE_VERSION}/bin:${PATH}"

ENV RBENV_ROOT=/opt/rbenv
ENV PATH="${RBENV_ROOT}/bin:${RBENV_ROOT}/shims:${PATH}"
ENV RUBY_VERSION=3.3.7

RUN git clone --depth 1 https://github.com/rbenv/rbenv.git "${RBENV_ROOT}" \
    && mkdir -p "${RBENV_ROOT}/plugins" \
    && git clone --depth 1 https://github.com/rbenv/ruby-build.git "${RBENV_ROOT}/plugins/ruby-build" \
    && rbenv install "${RUBY_VERSION}" \
    && rbenv global "${RUBY_VERSION}" \
    && gem update --system \
    && gem install bundler -v 2.4.22 \
    && gem install foreman

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

ENV PYENV_ROOT=/opt/pyenv
ENV PATH="${PYENV_ROOT}/bin:${PYENV_ROOT}/shims:${PATH}"
ENV PYTHON_VERSION=3.11.8
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/ms-playwright

RUN git clone --depth 1 https://github.com/pyenv/pyenv.git "${PYENV_ROOT}" \
    && bash -lc "pyenv install ${PYTHON_VERSION} && pyenv global ${PYTHON_VERSION}"

RUN bash -lc "python -m pip install --no-cache-dir --upgrade pip \
    && python -m pip install --no-cache-dir \
      'pandas>=2.2.3' \
      'databricks-sql-connector>=4.0.5' \
      'databricks-sdk>=0.57.0' \
      'python-dotenv>=1.1.1' \
      'playwright' \
      'panel>=1.7.2' \
      'duckdb>=1.3.1' \
      'sqlglot>=26.33.0'"

RUN mkdir -p "${PLAYWRIGHT_BROWSERS_PATH}" \
    && bash -lc "python -m playwright install --with-deps chromium" \
    && chmod -R a+rX "${PLAYWRIGHT_BROWSERS_PATH}" \
    && rm -rf /var/lib/apt/lists/*

RUN cat > /usr/local/bin/chrome-binary <<'SH'
#!/bin/sh

set -eu

if [ -n "${CHROME_BINARY_REAL:-}" ] && [ -x "${CHROME_BINARY_REAL}" ]; then
  exec "${CHROME_BINARY_REAL}" "$@"
fi

PLAYWRIGHT_CHROME=""
if [ -n "${PLAYWRIGHT_BROWSERS_PATH:-}" ]; then
  PLAYWRIGHT_CHROME=$(ls -1 "${PLAYWRIGHT_BROWSERS_PATH}"/chromium-*/chrome-linux64/chrome 2>/dev/null | tail -n 1 || true)
fi

if [ -n "${PLAYWRIGHT_CHROME}" ] && [ -x "${PLAYWRIGHT_CHROME}" ]; then
  exec "${PLAYWRIGHT_CHROME}" "$@"
fi

if [ -n "${HOME:-}" ]; then
  PLAYWRIGHT_CHROME=$(ls -1 "${HOME}/.cache/ms-playwright"/chromium-*/chrome-linux64/chrome 2>/dev/null | tail -n 1 || true)
fi

if [ -n "${PLAYWRIGHT_CHROME}" ] && [ -x "${PLAYWRIGHT_CHROME}" ]; then
  exec "${PLAYWRIGHT_CHROME}" "$@"
fi

for candidate in \
  /usr/bin/google-chrome \
  /usr/bin/google-chrome-stable \
  /opt/google/chrome/chrome \
  /usr/bin/chromium \
  /usr/bin/chromium-browser \
  ; do
  if [ -x "${candidate}" ]; then
    exec "${candidate}" "$@"
  fi
done

echo "No Chrome/Chromium binary found" >&2
exit 1
SH

RUN chmod +x /usr/local/bin/chrome-binary

ENV CHROME_BINARY=/usr/local/bin/chrome-binary

ENV PLAYWRIGHT_MCP_BROWSER=chromium
ENV PLAYWRIGHT_MCP_EXECUTABLE_PATH=/usr/local/bin/chrome-binary
ENV PLAYWRIGHT_MCP_SANDBOX=false

RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o /usr/share/keyrings/microsoft.gpg \
    && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ noble main" > /etc/apt/sources.list.d/azure-cli.list \
    && echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/ubuntu/24.04/prod noble main" > /etc/apt/sources.list.d/microsoft-prod.list \
    && apt-get update \
    && ACCEPT_EULA=Y apt-get install -y azure-cli msodbcsql18 mssql-tools18 unixodbc-dev \
    && rm -rf /var/lib/apt/lists/*

ENV PATH="/opt/mssql-tools18/bin:${PATH}"

RUN az extension add --name azure-devops

ENV PIPX_HOME=/opt/pipx
ENV PIPX_BIN_DIR=/usr/local/bin

RUN pipx install omni-code --pip-args='--extra-index-url https://pypi.fury.io/ericmichael/'

RUN npm install -g @playwright/cli@0.1.1

COPY entrypoint.sh /usr/local/bin/omni-sandbox-entrypoint
RUN chmod +x /usr/local/bin/omni-sandbox-entrypoint

COPY apply-network-isolation.sh /usr/local/bin/apply-network-isolation.sh
RUN chmod +x /usr/local/bin/apply-network-isolation.sh

COPY start-vnc.sh /usr/local/bin/start-vnc.sh
RUN chmod +x /usr/local/bin/start-vnc.sh

COPY entrypoint.work.sh /usr/local/bin/omni-sandbox-work-entrypoint
RUN chmod +x /usr/local/bin/omni-sandbox-work-entrypoint

ENV OMNI_WEB_AUTO_OPEN=false
EXPOSE 7681
EXPOSE 8080
EXPOSE 6080

ENTRYPOINT ["/usr/local/bin/omni-sandbox-work-entrypoint"]
CMD ["omni", "--mode", "server", "--host", "0.0.0.0", "--port", "7681"]