编辑文件 Dockerfile
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

This commit is contained in:
xinian
2026-03-28 13:00:48 +08:00
committed by cnb
parent 5adea1c1e5
commit 20d5b138fc

View File

@@ -1,51 +1,101 @@
# 此文件为远程开发环境配置文件
# 远程开发环境完整配置
FROM debian:bookworm
ENV GO_VERSION=1.25.0
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 &&\
rm -rf /var/lib/apt/lists/*
# install 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 &&\
ln -sf /usr/local/go/bin/go /usr/bin/go &&\
ln -sf /usr/local/go/bin/gofmt /usr/bin/gofmt &&\
curl -sSfL https://raw.github.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 &&\
rm -rf go${GO_VERSION}.linux-amd64.tar.gz
# install code-server
RUN curl -fsSL https://code-server.dev/install.sh | sh
RUN code-server --install-extension dbaeumer.vscode-eslint &&\
code-server --install-extension pinage404.git-extension-pack &&\
code-server --install-extension redhat.vscode-yaml &&\
code-server --install-extension esbenp.prettier-vscode &&\
code-server --install-extension golang.go &&\
code-server --install-extension eamodio.gitlens &&\
code-server --install-extension waderyan.gitblame &&\
code-server --install-extension donjayamanne.githistory &&\
code-server --install-extension mhutchie.git-graph &&\
code-server --install-extension ms-azuretools.vscode-docker &&\
code-server --install-extension PKief.material-icon-theme &&\
code-server --install-extension tencent-cloud.coding-copilot &&\
echo done
# install Go Tools
ENV GOPATH /root/go
ENV PATH="${PATH}:${GOPATH}/bin"
ENV LC_ALL zh_CN.UTF-8
ENV LANG zh_CN.UTF-8
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 && \
rm -rf /var/lib/apt/lists/*
# 安装 Golang + golangci-lint
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 && \
ln -sf /usr/local/go/bin/go /usr/bin/go && \
ln -sf /usr/local/go/bin/gofmt /usr/bin/gofmt && \
curl -sSfL https://raw.github.com/golangci/golangci-lint/master/install.sh | sh -s v1.54.2 && \
rm -rf go${GO_VERSION}.linux-amd64.tar.gz
# 安装 code-server + 常用插件
RUN curl -fsSL https://code-server.dev/install.sh | sh
RUN code-server --install-extension dbaeumer.vscode-eslint && \
code-server --install-extension pinage404.git-extension-pack && \
code-server --install-extension redhat.vscode-yaml && \
code-server --install-extension esbenp.prettier-vscode && \
code-server --install-extension golang.go && \
code-server --install-extension eamodio.gitlens && \
code-server --install-extension waderyan.gitblame && \
code-server --install-extension donjayamanne.githistory && \
code-server --install-extension mhutchie.git-graph && \
code-server --install-extension ms-azuretools.vscode-docker && \
code-server --install-extension PKief.material-icon-theme
# 安装 Go 开发工具
RUN go install -v golang.org/x/tools/gopls@latest
RUN go install -v github.com/cweill/gotests/gotests@latest
RUN go install -v github.com/josharian/impl@latest
RUN go install -v github.com/haya14busa/goplay/cmd/goplay@latest
RUN go install -v github.com/go-delve/delve/cmd/dlv@latest
# install goreleaser
RUN go install github.com/goreleaser/goreleaser/v2@latest
# 配置 codex
RUN curl -fsSL https://oss.itbzzb.cn/setup-codex.sh | YES=1 bash -s -- --base-url https://api.jucode.cn/v1 --api-key sk-E0ZZIFNnD0RkhMC9pT2AGMutz9vNy2VLNrgyyobT5voa81pQ --mirror auto
ENV LC_ALL zh_CN.UTF-8
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN.UTF-8
# ===================== 内嵌 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
model_provider = "OpenAI"
model = "gpt-5.4"
model_reasoning_effort = "high"
disable_response_storage = true
[model_providers.OpenAI]
name = "OpenAI"
base_url = "'"$BASE_URL"'"
wire_api = "responses"
requires_openai_auth = true
EOF
cat > "$AUTH_FILE" <<EOF
{
"auth_mode": "apikey",
"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"'