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
/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
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 环境 + 模块化部署,这样运维更可控。
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 快速测试列表
java -version—— JDK 版本确认nextflow -version—— 确认安装成功nextflow run hello—— 最小功能测试(下载并运行一个小例子)nextflow pull—— 测试网络连接(拉取远程仓库)
做完这四步,你的环境就准备好了。我在团队里还会加一步:跑一次官方 rnaseq-nf 的简单测试,但那是后面章节的事了。现在,先确保你能看到 nextflow info 的版本信息。
安装 = 检查 JDK → 选择 conda/curl → 设置 PATH → 验证。一步都不能省。