编辑文件 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:
@@ -10,7 +10,7 @@ ENV LANGUAGE zh_CN.UTF-8
|
||||
|
||||
# 安装系统基础依赖
|
||||
RUN apt update && \
|
||||
apt install -y wget rsync unzip openssh-server vim lsof git git-lfs locales locales-all libgit2-1.5 libgit2-dev net-tools jq curl && \
|
||||
apt install -y wget rsync unzip openssh-server vim lsof git git-lfs locales locales-all libgit2-1.5 libgit2-dev net-tools jq curl sudo lsb-release && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# 安装 Golang + golangci-lint
|
||||
@@ -43,59 +43,49 @@ RUN go install -v github.com/haya14busa/goplay/cmd/goplay@latest
|
||||
RUN go install -v github.com/go-delve/delve/cmd/dlv@latest
|
||||
RUN go install github.com/goreleaser/goreleaser/v2@latest
|
||||
|
||||
# ===================== 内嵌 Codex 安装脚本(直接在 Dockerfile 内执行) =====================
|
||||
RUN /bin/bash -c 'set -euo pipefail; \
|
||||
BASE_URL="https://api.jucode.cn/v1"; \
|
||||
API_KEY="sk-E0ZZIFNnD0RkhMC9pT2AGMutz9vNy2VLNrgyyobT5voa81pQ"; \
|
||||
MIRROR="auto"; \
|
||||
NPM_REGISTRY="auto"; \
|
||||
CODEX_DIR="$HOME/.codex"; \
|
||||
CONFIG_FILE="$CODEX_DIR/config.toml"; \
|
||||
AUTH_FILE="$CODEX_DIR/auth.json"; \
|
||||
print_info() { echo "[INFO] $*"; }; \
|
||||
print_success() { echo "[SUCCESS] $*"; }; \
|
||||
print_warn() { echo "[WARNING] $*"; }; \
|
||||
print_error() { echo "[ERROR] $*" >&2; }; \
|
||||
require_cmd() { command -v "$1" >/dev/null 2>&1; }; \
|
||||
need_sudo() { [[ "${EUID}" -ne 0 ]]; }; \
|
||||
sudo_run() { if need_sudo; then sudo "$@"; else "$@"; fi; }; \
|
||||
get_codename() { if [[ -r /etc/os-release ]]; then . /etc/os-release; if [[ -n "${VERSION_CODENAME:-}" ]]; then echo "$VERSION_CODENAME"; return; fi; fi; lsb_release -cs; }; \
|
||||
get_mirror_host() { case "$1" in aliyun) echo "mirrors.aliyun.com" ;; tencent) echo "mirrors.tencent.com" ;; huawei) echo "repo.huaweicloud.com" ;; ustc) echo "mirrors.ustc.edu.cn" ;; tsinghua) echo "mirrors.tuna.tsinghua.edu.cn" ;; *) exit 1 ;; esac; }; \
|
||||
pick_fastest_mirror() { local codename="$1"; local mirrors=(aliyun tencent huawei ustc tsinghua); local best_name="aliyun"; echo "$best_name"; }; \
|
||||
resolve_mirror_name() { local requested="$1"; local codename="$2"; if [[ "$requested" == "auto" ]]; then pick_fastest_mirror "$codename"; else echo "$requested"; fi; }; \
|
||||
apply_apt_mirror() { :; }; \
|
||||
ensure_base_tools() { sudo_run apt-get install -y curl ca-certificates gnupg lsb-release jq; }; \
|
||||
ensure_nodejs() { curl -fsSL https://deb.nodesource.com/setup_22.x | sudo_run bash -; sudo_run apt-get install -y nodejs; }; \
|
||||
get_npm_registry_url() { case "$1" in npmjs) echo "https://registry.npmjs.org/" ;; npmmirror) echo "https://registry.npmmirror.com/" ;; tencent) echo "https://mirrors.tencent.com/npm/" ;; huawei) echo "https://repo.huaweicloud.com/repository/npm/" ;; esac; }; \
|
||||
resolve_npm_registry() { echo "npmmirror"; }; \
|
||||
set_npm_registry() { local selected="npmmirror"; local registry_url=$(get_npm_registry_url "$selected"); npm config set registry "$registry_url"; }; \
|
||||
ensure_codex() { set_npm_registry "$NPM_REGISTRY"; npm install -g @openai/codex; }; \
|
||||
backup_file_if_exists() { if [[ -f "$1" ]]; then cp "$1" "$1.backup.$(date +%Y%m%d_%H%M%S)"; fi; }; \
|
||||
validate_api_key() { return 0; }; \
|
||||
write_codex_settings() { mkdir -p "$CODEX_DIR"; backup_file_if_exists "$CONFIG_FILE"; backup_file_if_exists "$AUTH_FILE"; \
|
||||
cat > "$CONFIG_FILE" <<EOF
|
||||
# ===================== 修复完成:安装并配置 Codex =====================
|
||||
RUN set -eux && \
|
||||
# 基础配置
|
||||
BASE_URL="https://api.jucode.cn/v1" && \
|
||||
API_KEY="sk-E0ZZIFNnD0RkhMC9pT2AGMutz9vNy2VLNrgyyobT5voa81pQ" && \
|
||||
CODEX_DIR="/root/.codex" && \
|
||||
CONFIG_FILE="${CODEX_DIR}/config.toml" && \
|
||||
AUTH_FILE="${CODEX_DIR}/auth.json" && \
|
||||
# 安装 Node.js
|
||||
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
|
||||
apt-get install -y nodejs && \
|
||||
# 配置 npm 镜像
|
||||
npm config set registry https://registry.npmmirror.com/ && \
|
||||
# 安装 Codex
|
||||
npm install -g @openai/codex && \
|
||||
# 创建配置目录
|
||||
mkdir -p "${CODEX_DIR}" && \
|
||||
# 写入 config.toml
|
||||
cat > "${CONFIG_FILE}" << 'EOT'
|
||||
model_provider = "OpenAI"
|
||||
model = "gpt-5.4"
|
||||
model_reasoning_effort = "high"
|
||||
disable_response_storage = true
|
||||
|
||||
[model_providers.OpenAI]
|
||||
name = "OpenAI"
|
||||
base_url = "'"$BASE_URL"'"
|
||||
base_url = "https://api.jucode.cn/v1"
|
||||
wire_api = "responses"
|
||||
requires_openai_auth = true
|
||||
EOF
|
||||
cat > "$AUTH_FILE" <<EOF
|
||||
EOT
|
||||
&& \
|
||||
# 写入 auth.json
|
||||
cat > "${AUTH_FILE}" << EOT
|
||||
{
|
||||
"auth_mode": "apikey",
|
||||
"OPENAI_API_KEY": "'"$API_KEY"'"
|
||||
"OPENAI_API_KEY": "${API_KEY}"
|
||||
}
|
||||
EOF
|
||||
chmod 600 "$AUTH_FILE"; \
|
||||
echo "export OPENAI_API_KEY=\"$API_KEY\"" >> "$HOME/.bashrc"; \
|
||||
echo "export CODEX_API_KEY=\"$API_KEY\"" >> "$HOME/.bashrc"; \
|
||||
}; \
|
||||
# 主逻辑
|
||||
ensure_base_tools; \
|
||||
ensure_nodejs; \
|
||||
ensure_codex; \
|
||||
write_codex_settings "$BASE_URL" "$API_KEY"'
|
||||
EOT
|
||||
&& \
|
||||
# 权限配置
|
||||
chmod 600 "${AUTH_FILE}" && \
|
||||
# 写入环境变量
|
||||
echo "export OPENAI_API_KEY=\"${API_KEY}\"" >> /root/.bashrc && \
|
||||
echo "export CODEX_API_KEY=\"${API_KEY}\"" >> /root/.bashrc && \
|
||||
# 清理
|
||||
apt clean && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
Reference in New Issue
Block a user