Files
bl/.ide/Dockerfile
xinian 44591d21b1
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed
编辑文件 Dockerfile
2026-03-29 11:14:23 +08:00

150 lines
25 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 此文件为远程开发环境配置文件
FROM debian:bookworm
# ==========================================
# 1. 基础环境变量配置
# ==========================================
ENV GO_VERSION=1.25.0
ENV GOPATH=/root/go
ENV PATH=/usr/local/go/bin:${GOPATH}/bin:${PATH}
ENV LC_ALL=zh_CN.UTF-8
ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN.UTF-8
ENV XDG_DATA_HOME=/var/lib
ENV XDG_CACHE_HOME=/workspace/.cache
ENV GOCACHE=/workspace/.cache/go-build
ENV GOMODCACHE=/workspace/.cache/gomod
# ==========================================
# 2. Codex 动态配置变量 (构建时的默认值运行时可被 -e 覆盖)
# ==========================================
ENV CODEX_BASE_URL="https://api.aibh.site/v1"
ENV CODEX_MODEL="gpt-5.4"
ENV OPENAI_API_KEY="sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr"
# ==========================================
# 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/*
# ==========================================
# 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}"
# ==========================================
# 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
# ==========================================
# 7. 核心优化内置动态 Entrypoint 脚本
# (每次容器启动时根据当前环境变量动态生成 Codex 配置)
# ==========================================
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
[model_providers.OpenAI]
name = "OpenAI"
base_url = "${CODEX_BASE_URL:-https://api.openai.com/v1}"
wire_api = "responses"
requires_openai_auth = true
EOF
# 动态渲染 auth.json
cat > /root/.codex/auth.json <<EOF
{
"auth_mode": "apikey",
"OPENAI_API_KEY": "${OPENAI_API_KEY:-}"
}
EOF
chmod 600 /root/.codex/auth.json
# 将变量注入当前 shell 环境 (用于终端直接使用 codex 命令)
export OPENAI_API_KEY="${OPENAI_API_KEY:-}"
export CODEX_API_KEY="${OPENAI_API_KEY:-}"
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"]