Build & Push Frontend Docker Image / build-and-push (push) Canceled after 0s
Build Validation / validate (push) Canceled after 6s
Build & Push Backend Docker Image / build-and-push (push) Failing after 10m10s
Build & Push Gateway Docker Image / build-and-push (push) Failing after 10m9s
A professional workspace for AI coding agents with: - Real-time streaming chat with SSE - Session management (fork, clone, tree navigation) - MCP tools browser & metadata panel - Skills browser (global, project, package sources) - Voice input & STT provider configuration - Integrated terminal & file explorer - Model selector with capability metadata - Keyboard-first UI with command palette - 8 languages (en, pt-BR, es, ja, zh-CN, ar, bn, hi) - Tauri 2 desktop app - React 19 + TypeScript + Vite 8 + Tailwind CSS 4 - Pi Agent extension runtime Originally forked from OpenCodeUI, now an independent project. License: GPL-3.0-only
115 lines
3.8 KiB
Docker
115 lines
3.8 KiB
Docker
# ============================================
|
|
# OpenCode WebUI - Backend
|
|
# ============================================
|
|
# Debian slim + opencode serve + agent tooling
|
|
|
|
FROM docker:29-cli AS docker-cli
|
|
|
|
FROM debian:bookworm-slim
|
|
|
|
ARG USE_CHINA_MIRROR=0
|
|
ARG APT_MIRROR=http://mirrors.tuna.tsinghua.edu.cn/debian
|
|
ARG APT_SECURITY_MIRROR=http://mirrors.tuna.tsinghua.edu.cn/debian-security
|
|
ARG NPM_CONFIG_REGISTRY=https://registry.npmmirror.com
|
|
ARG NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node
|
|
ARG MISE_INSTALL_URL=https://mise.run
|
|
ARG OPENCODE_INSTALL_URL=https://opencode.ai/install
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
LANG=C.UTF-8 \
|
|
LC_ALL=C.UTF-8 \
|
|
TERM=xterm-256color \
|
|
COLORTERM=truecolor \
|
|
EDITOR=vim \
|
|
NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY} \
|
|
NODEJS_ORG_MIRROR=${NODEJS_ORG_MIRROR}
|
|
|
|
RUN if [ "${USE_CHINA_MIRROR}" = "1" ] && [ -f /etc/apt/sources.list.d/debian.sources ]; then \
|
|
sed -i \
|
|
-e "s|http://deb.debian.org/debian|${APT_MIRROR}|g" \
|
|
-e "s|http://security.debian.org/debian-security|${APT_SECURITY_MIRROR}|g" \
|
|
/etc/apt/sources.list.d/debian.sources; \
|
|
fi
|
|
|
|
# Agent 常用基础环境。语言运行时交给 mise,安装到持久化的 /root。
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
bash \
|
|
ca-certificates \
|
|
curl \
|
|
dnsutils \
|
|
fd-find \
|
|
file \
|
|
fonts-dejavu-core \
|
|
fonts-liberation \
|
|
fonts-noto-cjk \
|
|
fonts-noto-color-emoji \
|
|
g++ \
|
|
git \
|
|
git-lfs \
|
|
gnupg \
|
|
jq \
|
|
less \
|
|
make \
|
|
nano \
|
|
openssh-client \
|
|
patch \
|
|
procps \
|
|
python3 \
|
|
python3-venv \
|
|
ripgrep \
|
|
rsync \
|
|
tini \
|
|
tzdata \
|
|
unzip \
|
|
vim-tiny \
|
|
wget \
|
|
xz-utils \
|
|
zip \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Docker CLI + Compose/Buildx plugin,只复制客户端,不安装 dockerd/containerd/runc。
|
|
RUN mkdir -p /usr/local/libexec/docker/cli-plugins
|
|
COPY --from=docker-cli /usr/local/bin/docker /usr/local/bin/docker
|
|
COPY --from=docker-cli /usr/local/libexec/docker/cli-plugins/docker-compose /usr/local/libexec/docker/cli-plugins/docker-compose
|
|
COPY --from=docker-cli /usr/local/libexec/docker/cli-plugins/docker-buildx /usr/local/libexec/docker/cli-plugins/docker-buildx
|
|
|
|
# Debian 的 fd 二进制叫 fdfind,补一个常见命令名。
|
|
RUN ln -sf /usr/bin/fdfind /usr/local/bin/fd
|
|
|
|
# 安装 mise。GitHub Actions 等 CI 环境会在构建时下载,运行时安装的工具仍落在持久化 /root。
|
|
RUN curl -fsSL "${MISE_INSTALL_URL}" | sh \
|
|
&& MISE_BIN="$(find /root -name mise -type f 2>/dev/null | head -1)" \
|
|
&& if [ -z "${MISE_BIN}" ]; then echo "mise binary not found" >&2; exit 1; fi \
|
|
&& cp "${MISE_BIN}" /usr/local/bin/mise \
|
|
&& chmod +x /usr/local/bin/mise \
|
|
&& mise --version
|
|
|
|
# 安装 opencode。
|
|
RUN curl -fsSL "${OPENCODE_INSTALL_URL}" | bash \
|
|
&& OPENCODE_BIN="$(find /root -name opencode -type f 2>/dev/null | head -1)" \
|
|
&& if [ -z "${OPENCODE_BIN}" ]; then echo "opencode binary not found" >&2; exit 1; fi \
|
|
&& cp "${OPENCODE_BIN}" /usr/local/bin/opencode \
|
|
&& chmod +x /usr/local/bin/opencode \
|
|
&& opencode --version
|
|
|
|
# 工作目录
|
|
RUN mkdir -p /workspace
|
|
WORKDIR /workspace
|
|
|
|
ENV MISE_DATA_DIR=/root/.local/share/mise \
|
|
MISE_CONFIG_DIR=/root/.config/mise \
|
|
MISE_STATE_DIR=/root/.local/state/mise \
|
|
OPENCODE_DISABLE_AUTOUPDATE=true \
|
|
OPENCODE_DISABLE_TERMINAL_TITLE=true \
|
|
WORKSPACE=/workspace
|
|
|
|
ENV PATH="/root/.local/bin:/root/.cargo/bin:/root/.local/share/mise/shims:/root/.local/share/mise/bin:${PATH}"
|
|
|
|
COPY ./docker/backend-entrypoint.sh /usr/local/bin/backend-entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/backend-entrypoint.sh
|
|
|
|
EXPOSE 4096
|
|
|
|
ENTRYPOINT ["tini", "--", "/usr/local/bin/backend-entrypoint.sh"]
|
|
CMD ["opencode", "serve", "--port", "4096", "--hostname", "0.0.0.0"]
|