2. 安装与环境配置

开始装 Nextflow 之前,我先问一句:你 JDK 装了吗?

Nextflow 是用 Groovy 写的,Groovy 跑在 JVM 上。所以 JDK 是必须的。我见过不少人直接跳这一步,结果跑 nextflow 命令时报「Java not found」——白白浪费半小时排查。嗯,咱们先把根基打牢。

2.1 JDK 依赖:版本与检查

Nextflow 官方要求 JDK 11 以上。我个人推荐 JDK 17 或 21(长期支持版)。为什么?因为 JDK 8 已经停止公开更新,而且 Nextflow 后续版本可能放弃对旧版的支持。我在项目中遇到过集群上装的是 JDK 8,跑 Nextflow 24.x 直接报错,不得不升级。

先检查你系统有没有 Java:

java -version

如果输出类似这样,说明 JDK 已安装:

openjdk version "21" 2023-09-19 LTS
OpenJDK Runtime Environment (build 21+35-LTS)
OpenJDK 64-Bit Server VM (build 21+35-LTS, mixed mode, sharing)

如果没有,或者版本太老,去 https://adoptium.net 下载对应系统的 JDK,或者用包管理器装:

# Ubuntu / Debian
sudo apt install openjdk-17-jdk

# CentOS / RHEL
sudo yum install java-17-openjdk

# macOS (Homebrew)
brew install openjdk@17
小技巧: 我习惯把 JDK 装在 /opt/java 下,然后在 ~/.bashrc 里设 JAVA_HOME 和 PATH,这样多版本切换也方便。

2.2 Nextflow 安装方式对比

方式 优点 缺点 我推荐场景
Conda 安装 自动管理依赖,环境隔离 需要先装 Conda/Mamba 团队协作、多项目环境
curl 手动安装 一步到位,无需额外包管理器 需要手动设置 PATH 单机快速测试、CI/CD

2.3 方式一:通过 Conda 安装(推荐)

如果你已经在用 Conda,那就最省心了。创建一个新环境,装 Nextflow:

conda create -n nextflow -c bioconda nextflow
conda activate nextflow

如果你想用更快的 Mamba(我强烈建议):

mamba create -n nextflow -c bioconda nextflow
mamba activate nextflow

装完之后,Nextflow 会自动下载 Java 依赖(如果你系统里没有 Java,conda 也会帮你装一个)。但要注意,conda 自带的 JDK 版本可能偏旧。我曾经遇到 conda 的 JDK 是 11,但 Nextflow 新版本推荐 17,结果跑 pipeline 时性能下降。所以我会额外手动升级环境里的 JDK:

conda install -n nextflow openjdk=17
注意: Conda 版本 nextflow 包可能不是最新版。如果你需要最新功能,建议用 curl 方式。

2.4 方式二:通过 curl 手动安装(传统方式)

这种方式本质就是下载一个 shell 脚本,然后执行它。Nextflow 官方推荐用 curl 安装最新版本:

curl -s https://get.nextflow.io | bash

这个命令会在当前目录生成一个 nextflow 可执行文件。然后需要把它放到 PATH 里:

mv nextflow ~/.local/bin/    # 假设 ~/.local/bin 在 PATH 中

如果没有那个目录,先创建:

mkdir -p ~/.local/bin
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

更干净的做法是放到 /usr/local/bin(需要 sudo):

sudo mv nextflow /usr/local/bin/

我个人偏好放在 /opt/nextflow/bin,然后软链到 /usr/local/bin,这样版本管理更清晰。

2.5 PATH 设置与验证

无论用哪种方式装,都要确保 nextflow 命令能被系统找到。测试一下:

which nextflow

如果输出类似 /home/yourname/.local/bin/nextflow,说明 PATH 对了。

接下来做最终验证:

nextflow info

应该看到版本信息和系统参数:

Version: 24.10.1 build 5911
Created: 2024-10-15 14:33 UTC
System: Linux 5.15.0-91-generic (amd64)
Java: OpenJDK 64-Bit Server VM 17.0.9+9

再跑个最小的 Hello World pipeline:

nextflow run hello

没报错、能看到进程输出,就算安装成功了。

2.6 避坑指南

  • 网络问题: 我自己在单位内网环境用 curl 安装时,经常超时。先用代理或者下载离线包。离线包可以从 GitHub Releases 下载,然后手动解压。
  • JDK 版本冲突: 如果你系统里装了多个 Java 版本,Nextflow 默认会找 java 命令。用 nextflow -J-Xmx4g 传入 JVM 参数是可以的,但更稳的办法是设置 NXF_JAVA_HOME 环境变量。
  • 权限问题: 不要用 sudo nextflow 运行,避免产生 root 拥有的文件。使用普通用户安装到 ~/.local/bin 就好。
  • Conda 环境冲突: 不同项目用不同的 conda 环境,Nextflow 安装进去后,记得每次激活对应环境再运行。我经常忘了切换环境,导致版本不对。
经验小结:
Conda 适合新手和团队统一版本;curl 方式适合追求最新或 CI 自动化。如果你在集群上工作,建议用 conda 环境 + 模块化部署,这样运维更可控。
Nextflow 安装流程总览 检查 JDK 版本 JDK ≥ 11? 安装方式选择 先安装 JDK 17+ conda install -c bioconda nextflow 自动处理依赖 curl -s https://get.nextflow.io | bash 手动下载二进制 GitHub Releases 离线包安装 PATH 配置 ~/.bashrc / /usr/local/bin 验证:nextflow info / run hello 💡 提示 conda 方式自动配 PATH curl 方式需手动移动文件

2.7 环境变量速查

如果你需要控制 Nextflow 的 Java 版本或缓存目录,设这几个环境变量很有用:

# 指定 JDK 路径(如果系统有多个 Java)
export NXF_JAVA_HOME=/usr/lib/jvm/java-17-openjdk
# 设置工作目录缓存(默认 $HOME/.nextflow)
export NXF_HOME=/data/nextflow
# 设置临时目录(默认 /tmp)
export NXF_TEMP=/scratch/tmp

把这些加到 ~/.bashrc 里,下次登录自动生效。我最常用的是 NXF_JAVA_HOME,因为我在笔记本上同时装了 JDK 11 和 17,给不同项目指定不同版本。

2.8 快速测试列表

  1. java -version —— JDK 版本确认
  2. nextflow -version —— 确认安装成功
  3. nextflow run hello —— 最小功能测试(下载并运行一个小例子)
  4. nextflow pull —— 测试网络连接(拉取远程仓库)

做完这四步,你的环境就准备好了。我在团队里还会加一步:跑一次官方 rnaseq-nf 的简单测试,但那是后面章节的事了。现在,先确保你能看到 nextflow info 的版本信息。

核心记忆点:
安装 = 检查 JDK → 选择 conda/curl → 设置 PATH → 验证。一步都不能省。