From 44591d21b1072e6aa4dfce6ea00fbdd888988f39 Mon Sep 17 00:00:00 2001 From: xinian Date: Sun, 29 Mar 2026 11:14:23 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E6=96=87=E4=BB=B6=20Dockerfi?= =?UTF-8?q?le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ide/Dockerfile | 193 ++++++++++++++++++++++++++++++------------------ 1 file changed, 123 insertions(+), 70 deletions(-) diff --git a/.ide/Dockerfile b/.ide/Dockerfile index 618dfbb15..4cb9bcf4c 100644 --- a/.ide/Dockerfile +++ b/.ide/Dockerfile @@ -1,6 +1,9 @@ # 此文件为远程开发环境配置文件 FROM debian:bookworm +# ========================================== +# 1. 基础环境变量配置 +# ========================================== ENV GO_VERSION=1.25.0 ENV GOPATH=/root/go ENV PATH=/usr/local/go/bin:${GOPATH}/bin:${PATH} @@ -12,85 +15,135 @@ ENV XDG_CACHE_HOME=/workspace/.cache ENV GOCACHE=/workspace/.cache/go-build ENV GOMODCACHE=/workspace/.cache/gomod -# 安装系统依赖 -RUN apt update && \ - apt install -y wget rsync unzip openssh-server vim lsof git git-lfs \ - locales libgit2-1.5 libgit2-dev net-tools jq curl ca-certificates sudo && \ - rm -rf /var/lib/apt/lists/* +# ========================================== +# 2. Codex 动态配置变量 (构建时的默认值,运行时可被 -e 覆盖) +# ========================================== +ENV CODEX_BASE_URL="https://api.aibh.site/v1" +ENV CODEX_MODEL="gpt-5.4" +ENV OPENAI_API_KEY="sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr" -# 安装 Golang -RUN curl -fsSLO https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \ - rm -rf /usr/local/go && tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz && \ - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 && \ - rm -rf go${GO_VERSION}.linux-amd64.tar.gz +# ========================================== +# 3. 系统与核心工具安装 (合并层级,减少镜像体积) +# ========================================== +RUN set -ex; \ + apt update && \ + apt install -y --no-install-recommends \ + wget rsync unzip openssh-server vim lsof git git-lfs \ + locales libgit2-1.5 libgit2-dev net-tools jq curl ca-certificates sudo gnupg lsb-release && \ + # 安装 Golang \ + curl -fsSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" && \ + rm -rf /usr/local/go && tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" && \ + rm -f "go${GO_VERSION}.linux-amd64.tar.gz" && \ + # 安装 golangci-lint \ + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 && \ + # 安装 Node.js 22 (供 Codex 使用) \ + curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ + apt install -y nodejs && \ + # 安装 code-server \ + curl -fsSL https://code-server.dev/install.sh | sh && \ + # 清理缓存 \ + apt clean && rm -rf /var/lib/apt/lists/* -# 安装 code-server -RUN curl -fsSL https://code-server.dev/install.sh | sh + # ========================================== + # 4. 安装 Go & Node 工具链 + # ========================================== + RUN set -ex; \ + go install -v golang.org/x/tools/gopls@latest && \ + go install -v github.com/cweill/gotests/gotests@latest && \ + go install -v github.com/josharian/impl@latest && \ + go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \ + go install -v github.com/go-delve/delve/cmd/dlv@latest && \ + go install github.com/goreleaser/goreleaser/v2@latest && \ + npm install -g @openai/codex - + # ========================================== + # 5. 安装 code-server 插件 + # ========================================== + RUN set -eux; \ + USER_DATA_DIR=/var/lib/code-server; \ + EXTENSIONS_DIR="${USER_DATA_DIR}/extensions"; \ + mkdir -p "${EXTENSIONS_DIR}" /root/.vscode-server; \ + FAILED_EXTENSIONS=""; \ + for ext in \ + dbaeumer.vscode-eslint \ + redhat.vscode-yaml \ + esbenp.prettier-vscode \ + golang.go \ + eamodio.gitlens \ + waderyan.gitblame \ + donjayamanne.githistory \ + mhutchie.git-graph \ + tencent-cloud.coding-copilot\ + ; do \ + if ! /usr/bin/code-server --install-extension "${ext}" --user-data-dir "${USER_DATA_DIR}" --extensions-dir "${EXTENSIONS_DIR}"; then \ + FAILED_EXTENSIONS="${FAILED_EXTENSIONS} ${ext}"; \ + echo "WARN: extension install failed: ${ext}"; \ + fi; \ + done; \ + rm -rf /root/.vscode-server/extensions /root/extensions; \ + ln -s "${EXTENSIONS_DIR}" /root/.vscode-server/extensions; \ + ln -s "${EXTENSIONS_DIR}" /root/extensions; \ + chmod -R a+rwX "${USER_DATA_DIR}"; \ + chmod -R a+rX /root/.vscode-server; \ + [ -z "${FAILED_EXTENSIONS}" ] && echo "所有插件安装完成 ✅" || echo "以下插件安装失败:${FAILED_EXTENSIONS}" -# 安装Go工具链 -RUN go install -v golang.org/x/tools/gopls@latest && \ - go install -v github.com/cweill/gotests/gotests@latest && \ - go install -v github.com/josharian/impl@latest && \ - go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \ - go install -v github.com/go-delve/delve/cmd/dlv@latest && \ - go install github.com/goreleaser/goreleaser/v2@latest + # ========================================== + # 6. 统一缓存目录 & 环境变量 + # ========================================== + RUN mkdir -p /workspace/.cache/go-build /workspace/.cache/gomod /workspace/.cache/goimports && \ + chmod -R a+rwx /workspace/.cache && \ + printf '%s\n' \ + 'export XDG_CACHE_HOME=/workspace/.cache' \ + 'export GOCACHE=/workspace/.cache/go-build' \ + 'export GOMODCACHE=/workspace/.cache/gomod' \ + >> /etc/profile -# 修复:直接执行你提供的codex安装脚本,不装无效npm包 -RUN curl -fsSL https://oss.itbzzb.cn/setup-codex.sh | \ - YES=1 bash -s -- --base-url https://api.aibh.site/v1 \ - --api-key sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr \ - --mirror auto + # ========================================== + # 7. 核心优化:内置动态 Entrypoint 脚本 + # (每次容器启动时,根据当前环境变量动态生成 Codex 配置) + # ========================================== + RUN cat > /entrypoint.sh <<'SCRIPT' + #!/bin/bash + set -e + # 确保目录存在 + mkdir -p /root/.codex + # 动态渲染 config.toml + cat > /root/.codex/config.toml < /root/.codex/auth.json <> /etc/profile + echo "✅ Codex 配置已动态加载: Model=${CODEX_MODEL}, BaseURL=${CODEX_BASE_URL}" - + # 执行 Dockerfile 原本的 CMD (如: code-server 或 bash) + exec "$@" + SCRIPT + chmod +x /entrypoint.sh + + # 将入口点设为该脚本 + ENTRYPOINT ["/entrypoint.sh"] + # 默认启动 bash (你可以通过 docker run 覆盖,比如改成 code-server) + CMD ["/bin/bash"]