环境准备:Python、Go、Node.js 与 Docker 的搭建

说实话,环境搭建这事儿,看着简单,但坑是真不少。我见过太多人卡在第一步——不是版本冲突,就是路径不对,折腾半天连个 hello world 都跑不起来。这一章,咱们就把四个核心环境一次性捋清楚。

你想想看,SBOM 生成工具覆盖了主流语言生态:Python 的 pip-audit、Go 的 syft、Node.js 的 npm audit,还有 Docker 镜像扫描。哪个环境出问题,后面的实战都白搭。所以,咱们一步到位。

核心原则:版本锁定 + 隔离管理。别用系统自带的 Python 或 Node,也别一股脑装最新版。生产环境讲究的是可复现。

3.1 Python 环境搭建

Python 是我用得最多的语言。我个人习惯用 pyenv 管理多版本,而不是直接装系统级 Python。为什么?因为项目 A 可能依赖 Python 3.8,项目 B 要 3.11,你总不能来回卸载重装吧?

3.1.1 安装 pyenv

# macOS / Linux
curl https://pyenv.run | bash

# 然后配置 shell 环境
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc

Windows 用户可以用 pyenv-win,或者直接用 Anaconda。不过我个人更推荐 WSL2 + pyenv 的组合,体验跟 Linux 几乎一样。

3.1.2 安装指定版本

# 查看可安装版本
pyenv install --list

# 安装 Python 3.10.12(SBOM 工具常用版本)
pyenv install 3.10.12

# 设置全局版本
pyenv global 3.10.12

# 验证
python --version

小技巧:安装慢的话,可以设置镜像源。我曾经在内网环境折腾了一下午,最后发现是网络问题。export PYTHON_BUILD_MIRROR_URL 能救急。

3.1.3 虚拟环境

每个项目都应该有自己的虚拟环境。我习惯用 venv,轻量且内置。

# 创建虚拟环境
python -m venv sbom-env

# 激活
source sbom-env/bin/activate  # Linux/macOS
# sbom-env\Scripts\activate   # Windows

# 安装 SBOM 相关工具
pip install cyclonedx-bom
pip install pip-audit

注意:别用 sudo pip install!我曾经手滑一次,把系统 Python 搞崩了,重装了系统才恢复。虚拟环境里随便折腾,出错了直接删掉重来。

3.2 Go 语言环境搭建

Go 的安装比 Python 简单得多。但有个坑——GOPATH 和 Go Modules 的切换。我记得刚开始用 Go 1.16 时,还被 GOPATH 模式坑过几次。

3.2.1 安装 Go

# 下载最新稳定版(以 1.22 为例)
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz

# 解压到 /usr/local
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz

# 配置环境变量
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
source ~/.bashrc

# 验证
go version

3.2.2 Go Modules 配置

从 Go 1.16 开始,Modules 是默认模式。我建议你直接开启,别回头用 GOPATH。

# 设置代理(国内必备)
go env -w GOPROXY=https://goproxy.cn,direct

# 创建项目
mkdir sbom-tools && cd sbom-tools
go mod init sbom-tools

# 安装 syft(SBOM 生成工具)
go install github.com/anchore/syft/cmd/syft@latest

为什么用 Go?SBOM 领域很多核心工具(syft、grype、trivy)都是 Go 写的。Go 的静态编译特性让这些工具部署起来特别方便——一个二进制文件,扔哪都能跑。

3.3 Node.js 环境搭建

Node.js 的版本管理,我推荐 nvm。npm 的依赖树有时候能绕晕你,但 nvm 至少能保证版本不乱。

3.3.1 安装 nvm

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 重新加载 shell
source ~/.bashrc

# 安装 Node.js LTS 版本
nvm install --lts

# 使用指定版本
nvm use 20.11.0

# 验证
node --version
npm --version

3.3.2 配置 npm 镜像

国内用户一定要配镜像,不然 npm install 能等到你怀疑人生。

# 设置淘宝镜像
npm config set registry https://registry.npmmirror.com

# 验证
npm config get registry

3.3.3 安装 SBOM 相关工具

# 全局安装 npm-audit 相关工具
npm install -g @cyclonedx/bom
npm install -g npm-audit

# 或者用 npx 临时运行(推荐)
npx @cyclonedx/bom --help

避坑指南:我曾经在 CI 环境里用全局安装,结果不同项目依赖冲突。后来改用 npx 或者项目级 devDependencies,再也没出过问题。

3.4 Docker 环境配置

Docker 是 SBOM 扫描的重头戏。容器镜像的依赖清单,全靠 Docker 环境来拉取和分析。

3.4.1 安装 Docker Engine

# Ubuntu / Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户加入 docker 组(避免每次 sudo)
sudo usermod -aG docker $USER
# 重新登录生效

3.4.2 配置镜像加速

Docker Hub 在国内访问极慢。我建议你配好镜像加速器,不然拉个基础镜像都要半小时。

# 编辑 /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3.4.3 验证 Docker 环境

# 运行测试容器
docker run hello-world

# 查看版本
docker --version
docker compose version

安全提醒:别把 Docker 的 socket 暴露给不信任的容器。我曾经见过一个案例,攻击者通过挂载 /var/run/docker.sock 逃逸到宿主机。生产环境一定要限制容器权限。

3.5 环境验证清单

所有环境装完后,我习惯跑一遍验证脚本。确保每个工具都能正常工作,后面实战才不会卡壳。

工具 验证命令 预期输出
Python python --version Python 3.10.x
pip pip --version pip 23.x from ...
Go go version go 1.22.x
Node.js node --version v20.x.x
npm npm --version 10.x.x
Docker docker --version Docker version 25.x
syft syft --version syft 1.x.x
cyclonedx-bom cyclonedx-bom --version 3.x.x

3.6 环境架构总览

下面这张图,把四个环境的关系和工具链串起来了。你照着搭,不会错。

SBOM 环境架构图 SBOM 环境架构总览 Python 环境 pyenv + venv cyclonedx-bom / pip-audit Go 环境 Go Modules syft / grype / trivy Node.js 环境 nvm + npm @cyclonedx/bom / npm audit Docker 镜像加速 容器扫描 SBOM 依赖清单生成 CycloneDX JSON/XML SPDX Tag/JSON 💡 四个环境独立安装,互不干扰。SBOM 工具可跨语言调用,最终统一输出标准格式。 建议使用版本管理工具(pyenv / nvm / go install)避免系统级污染。

嗯,到这里,四个环境就全搭好了。你可能会问:「这么多工具,会不会冲突?」放心,Python 有虚拟环境,Node 有 nvm 隔离,Go 是静态编译,Docker 跑在容器里——它们各玩各的,互不干扰。