From 6841c1104a610120de45c5854eaf69a97c10c923 Mon Sep 17 00:00:00 2001 From: "Logan.Li" Date: Tue, 27 Oct 2026 12:15:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B7=A5=E5=85=B7=E9=85=8D=E7=BD=AE=20?= =?UTF-8?q?Ubuntu=20=E5=8C=96=20+=20nvm=20=E7=AE=A1=E7=90=86=20Node=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 工具目录重写为 Ubuntu 构建环境导向(7 项),每项带安装命令提示 (apt/nvm,未安装时一键复制) - 新增 nvm 工具条目(真实检测,本机验证 0.40.6);Node.js 改为 nvm 管理:默认版本可调,构建时通过 nvm install $NODE_VERSION 灵活指定版本 - DeployTool 新增 installHint 字段(模型/更新白名单/seed) - 新增 deploy/Dockerfile.buildnode:Ubuntu 22.04 + JDK17/Maven/Git/ Docker CLI/Golang + nvm 默认 Node(--build-arg NODE_VERSION 可改) - 工具页顶部说明条更新构建环境建议 --- backend/internal/database/database.go | 15 +++++---- backend/internal/handler/resources.go | 2 +- backend/internal/model/models.go | 1 + backend/static/index.html | 20 +++++------- deploy/Dockerfile.buildnode | 46 +++++++++++++++++++++++++++ frontend/src/pages/ToolConfig.tsx | 17 ++++++++-- 6 files changed, 79 insertions(+), 22 deletions(-) create mode 100644 deploy/Dockerfile.buildnode diff --git a/backend/internal/database/database.go b/backend/internal/database/database.go index f098dc6..b0f9a06 100644 --- a/backend/internal/database/database.go +++ b/backend/internal/database/database.go @@ -224,7 +224,7 @@ func seedResources() { } } -// seedTools 工具清单(CheckCommand 为真实版本探测命令,安装走保守检测策略) +// seedTools 工具清单(Ubuntu 构建环境导向;Node 由 nvm 管理默认版本,构建时可按需 nvm install) func seedTools() { var n int64 DB.Model(&model.DeployTool{}).Count(&n) @@ -232,11 +232,12 @@ func seedTools() { return } DB.Create([]model.DeployTool{ - {ToolKey: "jdk", DisplayName: "JDK", Category: "build", Version: "17", InstallMode: "preinstalled", Path: "/usr/lib/jvm/java-17", CheckCommand: "java -version", SortOrder: 1}, - {ToolKey: "maven", DisplayName: "Maven", Category: "build", Version: "3.9", InstallMode: "lazy", Path: "/opt/maven", CheckCommand: "mvn -version", SortOrder: 2}, - {ToolKey: "golang", DisplayName: "Golang", Category: "build", Version: "1.24", InstallMode: "preinstalled", Path: "/usr/local/go", CheckCommand: "go version", SortOrder: 3}, - {ToolKey: "nodejs", DisplayName: "Node.js", Category: "build", Version: "20", InstallMode: "lazy", Path: "/usr/local/nvm", CheckCommand: "node -v", SortOrder: 4}, - {ToolKey: "git", DisplayName: "Git", Category: "build", Version: "2.40", InstallMode: "preinstalled", Path: "/usr/bin/git", CheckCommand: "git --version", SortOrder: 5}, - {ToolKey: "docker-cli", DisplayName: "Docker CLI", Category: "deploy", Version: "26", InstallMode: "lazy", Path: "/usr/bin/docker", CheckCommand: "docker --version", SortOrder: 6}, + {ToolKey: "jdk", DisplayName: "JDK", Category: "build", Version: "17", InstallMode: "preinstalled", Path: "/usr/lib/jvm/java-17-openjdk-amd64", CheckCommand: "java -version", InstallHint: "apt update && apt install -y openjdk-17-jdk", SortOrder: 1}, + {ToolKey: "maven", DisplayName: "Maven", Category: "build", Version: "3.8", InstallMode: "lazy", Path: "/usr/share/maven", CheckCommand: "mvn -version", InstallHint: "apt install -y maven", SortOrder: 2}, + {ToolKey: "golang", DisplayName: "Golang", Category: "build", Version: "1.24", InstallMode: "preinstalled", Path: "/usr/local/go", CheckCommand: "go version", InstallHint: "apt install -y golang-1.24-go 或官方 tar 包解压至 /usr/local/go", SortOrder: 3}, + {ToolKey: "nvm", DisplayName: "nvm(Node 版本管理)", Category: "build", Version: "0.40", InstallMode: "preinstalled", Path: "$HOME/.nvm", CheckCommand: `. "$HOME/.nvm/nvm.sh" && nvm --version`, InstallHint: "curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash", SortOrder: 4}, + {ToolKey: "nodejs", DisplayName: "Node.js(nvm 管理)", Category: "build", Version: "20", InstallMode: "lazy", Path: "$HOME/.nvm/versions/node", CheckCommand: "node -v", InstallHint: "nvm install 20 && nvm alias default 20(构建时可用 nvm install 18 按需切版本)", SortOrder: 5}, + {ToolKey: "git", DisplayName: "Git", Category: "build", Version: "2.40", InstallMode: "preinstalled", Path: "/usr/bin/git", CheckCommand: "git --version", InstallHint: "apt install -y git", SortOrder: 6}, + {ToolKey: "docker-cli", DisplayName: "Docker CLI", Category: "deploy", Version: "26", InstallMode: "lazy", Path: "/usr/bin/docker", CheckCommand: "docker --version", InstallHint: "apt install -y docker.io", SortOrder: 7}, }) } diff --git a/backend/internal/handler/resources.go b/backend/internal/handler/resources.go index f9c1b1f..3c2deeb 100644 --- a/backend/internal/handler/resources.go +++ b/backend/internal/handler/resources.go @@ -448,7 +448,7 @@ func UpdateTool(c *gin.Context) { } var raw map[string]any _ = c.ShouldBindJSON(&raw) - for _, k := range []string{"installMode", "version", "path", "enabled"} { + for _, k := range []string{"installMode", "version", "path", "installHint", "enabled"} { if v, ok := raw[k]; ok { database.DB.Model(&t).Update(k, v) } diff --git a/backend/internal/model/models.go b/backend/internal/model/models.go index 4e6b333..81be180 100644 --- a/backend/internal/model/models.go +++ b/backend/internal/model/models.go @@ -225,6 +225,7 @@ type DeployTool struct { InstallMode string `gorm:"default:lazy" json:"installMode"` // preinstalled|lazy|disabled Path string `json:"path"` CheckCommand string `gorm:"type:text" json:"checkCommand"` // 真实版本探测命令 + InstallHint string `gorm:"type:text" json:"installHint"` // 安装命令提示(Ubuntu apt / nvm) Enabled bool `gorm:"default:true" json:"enabled"` LastCheck *time.Time `json:"lastCheck"` ErrorMsg string `json:"errorMsg"` diff --git a/backend/static/index.html b/backend/static/index.html index 30e2799..fe38bc3 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -1,14 +1,10 @@ - + - - - - - FlowStack · 发布系统 - - - - -
- +FlowStack + +
+

FlowStack 前端尚未构建

+

请在项目根目录执行 ./run.sh build 生成前端产物后重新编译。

+
+ diff --git a/deploy/Dockerfile.buildnode b/deploy/Dockerfile.buildnode new file mode 100644 index 0000000..63fff44 --- /dev/null +++ b/deploy/Dockerfile.buildnode @@ -0,0 +1,46 @@ +# FlowStack 构建节点镜像(Ubuntu 22.04) +# 用法: docker build -f deploy/Dockerfile.buildnode -t flowstack-buildnode . +# 自定义默认 Node 版本: docker build --build-arg NODE_VERSION=18 -f deploy/Dockerfile.buildnode -t flowstack-buildnode . +FROM ubuntu:22.04 + +ARG DEBIAN_FRONTEND=noninteractive +ARG NODE_VERSION=20 +ENV NVM_DIR=/root/.nvm \ + NVM_NODE_DEFAULT=${NODE_VERSION} + +# 基础工具 + JDK17 + Maven + Git + Docker CLI(Ubuntu apt 一步到位) +RUN apt-get update && apt-get install -y --no-install-recommends \ + openjdk-17-jdk-headless \ + maven \ + git \ + docker.io \ + curl ca-certificates unzip xz-utils \ + tzdata \ + && rm -rf /var/lib/apt/lists/* + +# Golang(官方 tar,apt 的 golang 版本较旧) +ARG GOLANG_VERSION=1.24.2 +RUN curl -fsSL https://go.dev/dl/go${GOLANG_VERSION}.linux-amd64.tar.gz | tar -C /usr/local -xzf - \ + && ln -s /usr/local/go/bin/go /usr/local/bin/go \ + && ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt + +# nvm + 默认 Node 版本(构建时可在流水线脚本里 nvm install 灵活切换) +ARG NVM_VERSION=v0.40.1 +RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_VERSION}/install.sh | bash \ + && . "$NVM_DIR/nvm.sh" \ + && nvm install ${NODE_VERSION} \ + && nvm alias default ${NODE_VERSION} \ + && echo '. "$NVM_DIR/nvm.sh"' >> /root/.bashrc + +ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 \ + PATH=/usr/local/go/bin:$PATH + +# 构建工作空间 +RUN mkdir -p /data/flowstack-workspace +WORKDIR /data/flowstack-workspace + +# 验证工具链可用 +RUN java -version && mvn -version && go version && git --version \ + && . "$NVM_DIR/nvm.sh" && node -v && npm -v + +CMD ["bash", "-c", "echo 'FlowStack build node ready' && bash"] diff --git a/frontend/src/pages/ToolConfig.tsx b/frontend/src/pages/ToolConfig.tsx index c2e198a..240ed2c 100644 --- a/frontend/src/pages/ToolConfig.tsx +++ b/frontend/src/pages/ToolConfig.tsx @@ -10,6 +10,7 @@ import { RefreshCw, Terminal, AlertCircle, + Copy, } from 'lucide-react'; import { toast } from 'sonner'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; @@ -26,6 +27,7 @@ interface DeployTool { installedVersion: string; installMode: 'preinstalled' | 'lazy' | 'disabled'; path: string; + installHint: string; enabled: boolean; lastCheck: string | null; errorMsg: string; @@ -176,7 +178,7 @@ export default function ToolConfig() { {/* Description bar */}
- 管理 DevOps 工具的安装策略:预装在镜像中、首次使用自动下载(懒加载)、或禁用不安装 + 构建环境建议 Ubuntu 22.04(apt 安装下方工具);Node 由 nvm 管理——默认版本可在此调整,流水线构建时用 nvm install $NODE_VERSION 灵活指定版本。可用 deploy/Dockerfile.buildnode 一键构建节点镜像
{/* Content */} @@ -236,6 +238,17 @@ export default function ToolConfig() {
{tool.name}
{tool.key}
+ {tool.installHint && tool.status !== 'installed' && ( + + )} {tool.status === 'installed' && tool.path && (
路径: {tool.path}
)} @@ -262,7 +275,7 @@ export default function ToolConfig() { ) : ( tool.version && (
- 期望 v{tool.version} + {tool.key === 'nodejs' ? `默认 v${tool.version}(构建时可覆盖)` : `期望 v${tool.version}`}
) )}