This commit is contained in:
193
.ide/Dockerfile
193
.ide/Dockerfile
@@ -1,6 +1,9 @@
|
|||||||
# 此文件为远程开发环境配置文件
|
# 此文件为远程开发环境配置文件
|
||||||
FROM debian:bookworm
|
FROM debian:bookworm
|
||||||
|
|
||||||
|
# ==========================================
|
||||||
|
# 1. 基础环境变量配置
|
||||||
|
# ==========================================
|
||||||
ENV GO_VERSION=1.25.0
|
ENV GO_VERSION=1.25.0
|
||||||
ENV GOPATH=/root/go
|
ENV GOPATH=/root/go
|
||||||
ENV PATH=/usr/local/go/bin:${GOPATH}/bin:${PATH}
|
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 GOCACHE=/workspace/.cache/go-build
|
||||||
ENV GOMODCACHE=/workspace/.cache/gomod
|
ENV GOMODCACHE=/workspace/.cache/gomod
|
||||||
|
|
||||||
# 安装系统依赖
|
# ==========================================
|
||||||
RUN apt update && \
|
# 2. Codex 动态配置变量 (构建时的默认值,运行时可被 -e 覆盖)
|
||||||
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 && \
|
ENV CODEX_BASE_URL="https://api.aibh.site/v1"
|
||||||
rm -rf /var/lib/apt/lists/*
|
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 && \
|
# 3. 系统与核心工具安装 (合并层级,减少镜像体积)
|
||||||
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 && \
|
RUN set -ex; \
|
||||||
rm -rf go${GO_VERSION}.linux-amd64.tar.gz
|
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 && \
|
# 6. 统一缓存目录 & 环境变量
|
||||||
go install -v github.com/cweill/gotests/gotests@latest && \
|
# ==========================================
|
||||||
go install -v github.com/josharian/impl@latest && \
|
RUN mkdir -p /workspace/.cache/go-build /workspace/.cache/gomod /workspace/.cache/goimports && \
|
||||||
go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \
|
chmod -R a+rwx /workspace/.cache && \
|
||||||
go install -v github.com/go-delve/delve/cmd/dlv@latest && \
|
printf '%s\n' \
|
||||||
go install github.com/goreleaser/goreleaser/v2@latest
|
'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 | \
|
# 7. 核心优化:内置动态 Entrypoint 脚本
|
||||||
YES=1 bash -s -- --base-url https://api.aibh.site/v1 \
|
# (每次容器启动时,根据当前环境变量动态生成 Codex 配置)
|
||||||
--api-key sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr \
|
# ==========================================
|
||||||
--mirror auto
|
RUN cat > /entrypoint.sh <<'SCRIPT'
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# 确保目录存在
|
||||||
|
mkdir -p /root/.codex
|
||||||
|
|
||||||
|
# 动态渲染 config.toml
|
||||||
|
cat > /root/.codex/config.toml <<EOF
|
||||||
|
model_provider = "OpenAI"
|
||||||
|
model = "${CODEX_MODEL:-gpt-4o}"
|
||||||
|
model_reasoning_effort = "high"
|
||||||
|
disable_response_storage = true
|
||||||
|
|
||||||
# 安装 code-server 插件(逐个安装,失败不阻断;便于定位问题)
|
[model_providers.OpenAI]
|
||||||
# 已移除 pinage404.git-extension-pack:该扩展包会额外拉取多个依赖扩展,
|
name = "OpenAI"
|
||||||
# 在 code-server/Open VSX 环境中容易出现部分依赖不可用,导致“插件不可用”体验。
|
base_url = "${CODEX_BASE_URL:-https://api.openai.com/v1}"
|
||||||
RUN set -eux; \
|
wire_api = "responses"
|
||||||
USER_DATA_DIR=/var/lib/code-server; \
|
requires_openai_auth = true
|
||||||
EXTENSIONS_DIR="${USER_DATA_DIR}/extensions"; \
|
EOF
|
||||||
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; \
|
|
||||||
if [ -n "${FAILED_EXTENSIONS}" ]; then \
|
|
||||||
echo "以下插件安装失败:${FAILED_EXTENSIONS}"; \
|
|
||||||
else \
|
|
||||||
echo "所有插件安装完成 ✅"; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 最后再清理(必须放在插件安装之后)
|
# 动态渲染 auth.json
|
||||||
RUN apt clean && rm -rf /var/lib/apt/lists/*
|
cat > /root/.codex/auth.json <<EOF
|
||||||
|
{
|
||||||
|
"auth_mode": "apikey",
|
||||||
|
"OPENAI_API_KEY": "${OPENAI_API_KEY:-}"
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
chmod 600 /root/.codex/auth.json
|
||||||
|
|
||||||
# 统一缓存目录到工作区可写路径,避免插件在只读文件系统下卡住
|
# 将变量注入当前 shell 环境 (用于终端直接使用 codex 命令)
|
||||||
RUN mkdir -p /workspace/.cache/go-build /workspace/.cache/gomod /workspace/.cache/goimports && \
|
export OPENAI_API_KEY="${OPENAI_API_KEY:-}"
|
||||||
chmod -R a+rwx /workspace/.cache
|
export CODEX_API_KEY="${OPENAI_API_KEY:-}"
|
||||||
|
|
||||||
RUN printf '%s\n' \
|
echo "✅ Codex 配置已动态加载: Model=${CODEX_MODEL}, BaseURL=${CODEX_BASE_URL}"
|
||||||
'export XDG_CACHE_HOME=/workspace/.cache' \
|
|
||||||
'export GOCACHE=/workspace/.cache/go-build' \
|
|
||||||
'export GOMODCACHE=/workspace/.cache/gomod' \
|
|
||||||
>> /etc/profile
|
|
||||||
|
|
||||||
|
# 执行 Dockerfile 原本的 CMD (如: code-server 或 bash)
|
||||||
|
exec "$@"
|
||||||
|
SCRIPT
|
||||||
|
chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
# 将入口点设为该脚本
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
# 默认启动 bash (你可以通过 docker run 覆盖,比如改成 code-server)
|
||||||
|
CMD ["/bin/bash"]
|
||||||
|
|||||||
Reference in New Issue
Block a user