编辑文件 Dockerfile
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
FROM debian:bookworm
|
FROM debian:bookworm
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 1. 基础环境变量配置
|
# 1. 基础环境变量
|
||||||
# ==========================================
|
# ==========================================
|
||||||
ENV GO_VERSION=1.25.0
|
ENV GO_VERSION=1.25.0
|
||||||
ENV GOPATH=/root/go
|
ENV GOPATH=/root/go
|
||||||
@@ -16,45 +16,74 @@ ENV GOCACHE=/workspace/.cache/go-build
|
|||||||
ENV GOMODCACHE=/workspace/.cache/gomod
|
ENV GOMODCACHE=/workspace/.cache/gomod
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 2. Codex 动态配置变量 (构建时的默认值,运行时可被 -e 随意覆盖)
|
# 2. Codex 配置 (需要更换时,直接修改这里,重新 build 即可)
|
||||||
# ==========================================
|
# ==========================================
|
||||||
ENV CODEX_BASE_URL="https://api.aibh.site/v1"
|
ENV CODEX_BASE_URL="https://api.aibh.site/v1"
|
||||||
ENV CODEX_MODEL="gpt-5.4"
|
ENV CODEX_MODEL="gpt-5.4"
|
||||||
ENV OPENAI_API_KEY="sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr"
|
ENV OPENAI_API_KEY="sk-foAHgsJtmanACECtBlFYZE2z4LkwBboEOYETO3ZdWvCxdmNr"
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 3. 系统与核心工具安装 (合并层级,极大减小镜像体积)
|
# 3. 安装系统依赖、Golang、Code-server
|
||||||
# ==========================================
|
# ==========================================
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
apt update && \
|
apt update && \
|
||||||
apt install -y --no-install-recommends \
|
apt install -y --no-install-recommends \
|
||||||
wget rsync unzip openssh-server vim lsof git git-lfs \
|
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 && \
|
locales libgit2-1.5 libgit2-dev net-tools jq curl ca-certificates sudo gnupg lsb-release xz-utils && \
|
||||||
# 安装 Golang \
|
# 安装 Golang \
|
||||||
curl -fsSLO "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" && \
|
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 -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" && \
|
rm -f "go${GO_VERSION}.linux-amd64.tar.gz" && \
|
||||||
# 安装 golangci-lint \
|
# 安装 golangci-lint \
|
||||||
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 && \
|
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 \
|
# 安装 code-server \
|
||||||
curl -fsSL https://code-server.dev/install.sh | sh && \
|
curl -fsSL https://code-server.dev/install.sh | sh && \
|
||||||
# 清理缓存 \
|
# 清理缓存 \
|
||||||
apt clean && rm -rf /var/lib/apt/lists/*
|
apt clean && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 4. 安装 Go & Node 工具链
|
# 4. [国内加速] 安装 Node.js 与 Codex (直接用淘宝源下载二进制包,防卡死)
|
||||||
# ==========================================
|
# ==========================================
|
||||||
RUN set -ex; \
|
RUN set -ex; \
|
||||||
|
# 安装 Go 工具链 \
|
||||||
go install -v golang.org/x/tools/gopls@latest && \
|
go install -v golang.org/x/tools/gopls@latest && \
|
||||||
go install -v github.com/cweill/gotests/gotests@latest && \
|
go install -v github.com/cweill/gotests/gotests@latest && \
|
||||||
go install -v github.com/josharian/impl@latest && \
|
go install -v github.com/josharian/impl@latest && \
|
||||||
go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \
|
go install -v github.com/haya14busa/goplay/cmd/goplay@latest && \
|
||||||
go install -v github.com/go-delve/delve/cmd/dlv@latest && \
|
go install -v github.com/go-delve/delve/cmd/dlv@latest && \
|
||||||
go install github.com/goreleaser/goreleaser/v2@latest && \
|
go install github.com/goreleaser/goreleaser/v2@latest && \
|
||||||
npm install -g @openai/codex
|
# 从淘宝镜像直接下载 Node.js 22 预编译包 (彻底绕过 nodesource 恶心网络) \
|
||||||
|
NODE_VER="v22.11.0" && \
|
||||||
|
wget -q "https://npmmirror.com/mirrors/node/${NODE_VER}/node-${NODE_VER}-linux-x64.tar.xz" -O /tmp/node.tar.xz && \
|
||||||
|
tar -xJf /tmp/node.tar.xz -C /usr/local --strip-components=1 && \
|
||||||
|
rm -f /tmp/node.tar.xz && \
|
||||||
|
# 强制锁定 npm 为淘宝源 \
|
||||||
|
npm config set registry https://registry.npmmirror.com/ && \
|
||||||
|
# 安装 Codex CLI \
|
||||||
|
npm install -g @openai/codex && \
|
||||||
|
# 生成 Codex 配置文件 \
|
||||||
|
mkdir -p /root/.codex && \
|
||||||
|
cat > /root/.codex/config.toml <<EOF \
|
||||||
|
model_provider = "OpenAI" \
|
||||||
|
model = "${CODEX_MODEL}" \
|
||||||
|
model_reasoning_effort = "high" \
|
||||||
|
disable_response_storage = true \
|
||||||
|
\
|
||||||
|
[model_providers.OpenAI] \
|
||||||
|
name = "OpenAI" \
|
||||||
|
base_url = "${CODEX_BASE_URL}" \
|
||||||
|
wire_api = "responses" \
|
||||||
|
requires_openai_auth = true \
|
||||||
|
EOF
|
||||||
|
cat > /root/.codex/auth.json <<EOF \
|
||||||
|
{ \
|
||||||
|
"auth_mode": "apikey", \
|
||||||
|
"OPENAI_API_KEY": "${OPENAI_API_KEY}" \
|
||||||
|
} \
|
||||||
|
EOF
|
||||||
|
chmod 600 /root/.codex/auth.json && \
|
||||||
|
echo "export OPENAI_API_KEY=\"${OPENAI_API_KEY}\"" >> /root/.bashrc && \
|
||||||
|
echo "export CODEX_API_KEY=\"${OPENAI_API_KEY}\"" >> /root/.bashrc
|
||||||
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
# 5. 安装 code-server 插件
|
# 5. 安装 code-server 插件
|
||||||
@@ -96,45 +125,4 @@ RUN mkdir -p /workspace/.cache/go-build /workspace/.cache/gomod /workspace/.cach
|
|||||||
'export XDG_CACHE_HOME=/workspace/.cache' \
|
'export XDG_CACHE_HOME=/workspace/.cache' \
|
||||||
'export GOCACHE=/workspace/.cache/go-build' \
|
'export GOCACHE=/workspace/.cache/go-build' \
|
||||||
'export GOMODCACHE=/workspace/.cache/gomod' \
|
'export GOMODCACHE=/workspace/.cache/gomod' \
|
||||||
>> /etc/profile
|
>> /etc/profile
|
||||||
|
|
||||||
# ==========================================
|
|
||||||
# 7. 核心:使用 printf 安全生成启动脚本 (彻底解决 Heredoc 格式报错)
|
|
||||||
# ==========================================
|
|
||||||
RUN printf '%s\n' \
|
|
||||||
'#!/bin/bash' \
|
|
||||||
'set -e' \
|
|
||||||
'mkdir -p /root/.codex' \
|
|
||||||
'' \
|
|
||||||
'cat > /root/.codex/config.toml << EOF' \
|
|
||||||
'model_provider = "OpenAI"' \
|
|
||||||
'model = "${CODEX_MODEL:-gpt-5.4}"' \
|
|
||||||
'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' \
|
|
||||||
'' \
|
|
||||||
'cat > /root/.codex/auth.json << EOF' \
|
|
||||||
'{' \
|
|
||||||
' "auth_mode": "apikey",' \
|
|
||||||
' "OPENAI_API_KEY": "${OPENAI_API_KEY:-}"' \
|
|
||||||
'}' \
|
|
||||||
'EOF' \
|
|
||||||
'' \
|
|
||||||
'chmod 600 /root/.codex/auth.json' \
|
|
||||||
'' \
|
|
||||||
'export OPENAI_API_KEY="${OPENAI_API_KEY:-}"' \
|
|
||||||
'export CODEX_API_KEY="${OPENAI_API_KEY:-}"' \
|
|
||||||
'' \
|
|
||||||
'echo "✅ Codex 动态配置已加载: Model=${CODEX_MODEL}, BaseURL=${CODEX_BASE_URL}"' \
|
|
||||||
'exec "$@"' > /entrypoint.sh && chmod +x /entrypoint.sh
|
|
||||||
|
|
||||||
# 设置入口点
|
|
||||||
ENTRYPOINT ["/entrypoint.sh"]
|
|
||||||
# 默认启动 bash
|
|
||||||
CMD ["/bin/bash"]
|
|
||||||
Reference in New Issue
Block a user