2. 安装与配置:把 Nextflow 跑起来

说实话,很多新手装 Nextflow 时掉进的坑,都不是工具本身的锅。Java 版本不对、PATH 没写对、或者装完没验证——这些小细节卡住你半天很常见。这一章,咱们就把环境从头捋一遍。

2.1 Java 环境要求

Nextflow 跑在 JVM 上。说白了,你的机器里得先有个靠谱的 JDK。没有它,nextflow 连启动都做不到。

版本要求:JDK 11 或更高版本。JDK 8 已经不被官方支持了。我个人习惯用 JDK 17 LTS,稳定、社区支持也足。JDK 21 也能用,但我建议你跟着 LTS 走,省事。

小提示:如果你机器上已经装了多个 JDK 版本,记得把 JAVA_HOME 指向正确那个。Nextflow 启动时会优先读 JAVA_HOME,找不到再找系统默认 java。

检查当前 Java 版本:

java -version

你会看到类似这样的输出:

openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment (build 17.0.9+9)
OpenJDK 64-Bit Server VM (build 17.0.9+9, mixed mode, sharing)

嗯,看到版本号 ≥ 11 就行。如果没装或者版本太低,去 Adoptium 装一个,别去 Oracle 折腾授权了。

2.2 Nextflow 安装方法

我推荐三种方式。线上环境我基本用手动下载,本地测试我用 Conda,Container 里就用 Docker 镜像。你按场景选。

方法一:手动安装(最推荐)

这种方式最干净,不受包管理器版本滞后的影响。两步走完:

  1. 下载 nextflow 可执行文件
  2. 放到 PATH 里
wget -qO- https://get.nextflow.io | bash
chmod +x nextflow
sudo mv nextflow /usr/local/bin/

注意 sudo 那步——如果你不想用 sudo,把 nextflow 放到 ~/bin/ 或者 ~/.local/bin/ 也一样。我在自己的工作站上就扔到 ~/bin/,省得改系统目录。

什么场景用手动安装?

  • 服务器上跑生产流程
  • 想立即获取最新版本
  • 不想引入 Conda/Python 依赖

方法二:Conda 安装

如果你已经用 Conda 管理 Python 环境,那顺手装个 nextflow 也很方便:

conda install -c bioconda nextflow

或者用一个独立的干净环境:

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

但我得提醒你:Conda 的 nextflow 版本往往比官网晚一两周。我遇到过几次 Conda 里还是 22.x,官网已经 23.x 了。如果你不需要新功能,Conda 没问题。

注意:Conda 安装的 nextflow 内部会使用它自己带的 Java。如果你系统里已经装了更高版本的 JDK,偶尔会出现兼容性问题。遇到就换手动安装。

方法三:Docker 安装

跑在容器里最隔离。适合 CI/CD 或者不想污染宿主机的人:

docker pull nextflow/nextflow:latest

运行流程时也是:

docker run --rm -v $PWD:/work nextflow/nextflow:latest run hello

但这招不太常用——因为 nextflow 本身只负责协调,实际任务还是在容器里跑的。我自己只在测试或演示时用这个方式。

2.3 环境变量设置

Nextflow 的运行行为受一堆环境变量控制。你不用全记住,但下面这几个我建议你一开始就配好。

环境变量 说明 示例值
JAVA_HOME JVM 安装路径 /usr/lib/jvm/java-17-openjdk
NXF_HOME Nextflow 缓存与工作目录基址 /data/.nextflow
NXF_OPTS JVM 启动参数(内存等) -Xms1g -Xmx4g
NXF_TEMP 临时文件目录 /scratch/tmp
PATH 保证 nextflow 命令能找到 $HOME/bin 或 /usr/local/bin

配置示例(.bashrc / .zshrc):

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export NXF_HOME=/data/.nextflow
export NXF_OPTS="-Xms1g -Xmx4g"
export PATH=$HOME/bin:$PATH

每次改完记得 source ~/.bashrc 或 source ~/.zshrc。我曾经忘了 source,在另一个终端里敲 nextflow,提示 command not found……嗯,这就是最蠢的坑。

2.4 验证安装

环境配好了,跑一个最简单的“Hello World”验证:

nextflow -version

正确输出大概像这样:

nextflow version 24.04.0.5857

再跑官方的 hello 流程:

nextflow run hello

这个流程很短,几秒钟就能跑完。你会看到类似下面的输出:

N E X T F L O W  ~  version 24.04.0
Launching `hello.nf` [nostalgic_bhaskara] DSL2 - revision: cd6f2ac7b9
executor >  local (4)
[f2/1b8c3a] process > sayHello (1) [100%] 1 of 1 ✔
[b5/6f9e2d] process > sayHello (2) [100%] 1 of 1 ✔
[8a/4e12cf] process > sayHello (3) [100%] 1 of 1 ✔
[3c/7a9b0e] process > sayHello (4) [100%] 4 of 4 ✔
OK 信号:看到 100% 和 ✔,说明你的 Nextflow 已经正常工作了。恭喜。

如果卡住或者报错,最常见的几个原因:

  • Java 版本太低(java -version 确认)
  • 网络不通(下载不了依赖)
  • 磁盘空间不足(默认缓存写不进去)

按顺序排查,基本都能解决。

知识结构总览

下面这张图梳理了本章的核心环节,你可以把它当作安装后的自查清单:

Nextflow 安装与配置知识结构 JDK ≥ 11 手动安装 wget + bash Conda 安装 bioconda 通道 Docker 安装 nextflow/nextflow 环境变量配置 JAVA_HOME | NXF_HOME | NXF_OPTS | PATH 验证安装:nextflow -version + nextflow run hello 你的 Nextflow 旅途,从这里开始

安装就这么简单。环境干净、版本选对、变量配好,你的 Nextflow 就能稳定跑起来。后面所有管道,都依赖这第一步。