2、环境搭建:安装Nextflow,Java依赖,测试安装

好,咱们直接开始动手。

环境搭建这件事,说白了就三步:装Java、装Nextflow、跑个例子验证一下。听起来简单,但我在项目里见过不少人在这一步卡住。不是Java版本不对,就是环境变量没配好,折腾半天连个hello world都跑不起来。

咱们的目标很明确——让你在10分钟内拥有一个能跑Nextflow的干净环境。

为什么先装Java?

Nextflow是用Groovy写的,Groovy跑在JVM上。所以Java是你的第一道门槛。没有Java,Nextflow连启动都启动不了。

Java的版本有讲究。我个人习惯用Java 17或者Java 11。Java 8虽然也能跑,但有些新特性不支持。Java 21太新,部分生态还没跟上。我建议你装Java 17,稳定、兼容、够用。

安装Java JDK

咱们分平台说。

Linux(Ubuntu/Debian)

sudo apt update
sudo apt install openjdk-17-jdk -y
java -version

CentOS/RHEL

sudo yum install java-17-openjdk -y
java -version

macOS(用Homebrew)

brew install openjdk@17
java -version

Windows

去Oracle官网或者Adoptium下载JDK 17的安装包。装完之后去系统环境变量里加一下JAVA_HOME和Path。

注意:安装完后一定要打开新终端窗口再执行 java -version。我在项目中遇到不少同事,装完Java后没刷新终端,一直报“命令找不到”。

安装Nextflow

Nextflow的安装方式很简单。官方推荐用curl或者wget下载一个脚本。

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

执行完你当前目录下会多出一个 nextflow 文件。这是个自解压的shell脚本。把它移到PATH目录里,方便全局调用。

mv nextflow /usr/local/bin/
chmod +x /usr/local/bin/nextflow

接下来试试命令能不能找到:

which nextflow

正常的话会输出路径。比如 /usr/local/bin/nextflow。

小技巧:如果你在服务器上没sudo权限,可以把nextflow放到自己的~/bin目录。然后在~/.bashrc里加一行 export PATH=$PATH:~/bin。

第一次启动:它会自己下载

我第一次装Nextflow时,输入完nextflow命令它啥也没反应。后来才知道,第一次运行它会自动下载完整的运行包。

nextflow -version

执行后会看到类似这样的输出:

      N E X T F L O W
      version 23.10.1 build 5893
      created 2024-01-15 14:30 UTC
      cite doi:10.1038/nbt.3820
      http://nextflow.io

如果看到版本号,恭喜你,Nextflow已经装好了。

核心知识点:Nextflow自身是一个很小的启动器(约几KB),核心运行包(约几十MB)是在第一次执行时从GitHub下载缓存的。所以要保证你的网络能访问github.com。

验证安装:跑一个真正的Pipeline

光输出版本号还不够。我建议跑一个简单的Pipeline来验证整个链路。Nextflow官方提供了一个最小的hello示例。

nextflow run hello

这个命令会从GitHub拉取官方示例库,然后执行。一切正常的话,你会看到类似这样的输出:

N E X T F L O W  ~  version 23.10.1
Launching `https://github.com/nextflow-io/hello` [dreamy_pare] DSL2 - REVISION: 6e7b2f5b4f
executor >  local (4)
[0f/c3d9a1] process > sayHello (1) [100%] 1 of 1 ✔
[1a/4e8b2f] process > sayHello (2) [100%] 2 of 2 ✔
[2b/7f1a3c] process > sayHello (3) [100%] 3 of 3 ✔
[3c/9b0d4e] process > sayHello (4) [100%] 4 of 4 ✔

看到四个 sayHello 都跑到100%了吗?这就对了。

另一种验证方式:写个最简单的脚本

如果你不想联网,也可以本地写一个。我个人习惯用一个极简的脚本来测试。

创建一个文件,就叫 test.nf:

#!/usr/bin/env nextflow

process printHello {
    output:
        stdout

    script:
        """
        echo 'Hello, Nextflow!'
        """
}

workflow {
    printHello()
    printHello.out.view()
}

然后运行:

nextflow run test.nf

输出:

N E X T F L O W  ~  version 23.10.1
executor >  local (1)
[1c/3a2b4d] process > printHello [100%] 1 of 1 ✔
Hello, Nextflow!

看到 Hello, Nextflow! 就说明你整个环境完整可用。

环境搭建完整流程一览

我把它整理成一张流程图,方便你对照着检查。

Nextflow 环境搭建核心流程 1. 安装 Java JDK 17 2. 配置 JAVA_HOME 3. 验证 java -version 4. curl 安装 Nextflow 5. 移动到 /usr/local/bin 6. 验证 nextflow -version 7. 运行 hello 或 test.nf ✔ 环境就绪 ⚠ 常见问题 • 网络代理导致下载失败 • Java版本不是17 • JAVA_HOME未正确设置 • PATH未包含nextflow 提示:推荐 Java 17 + Nextflow 23+

检查一下依赖项

除了Java和Nextflow本身,有些pipeline可能会用到的工具,我列一张表给你参考:

工具 用途 安装建议
Git 拉取GitHub上的Pipeline代码 系统自带或 apt/yum/brew 安装
Docker 容器化执行环境 可选,但强烈建议装
Conda 软件环境管理 可选,按需安装
Singularity/Apptainer HPC环境容器 集群环境下必装
我的建议:Git和Docker是日常使用最频繁的。即使你现在用不到Docker,也建议先装上,后面跑多环境配置的时候你会发现离不开它。

避坑指南

安装环节我踩过的坑,跟你说几个。

第一,Java版本对不上。 有次我在服务器上装了Java 21,一跑Nextflow就报错,提示Groovy不兼容。后来老老实实换回Java 17,问题消停了。

第二,nextflow可执行文件没有权限。 我见过最离谱的是,下载完忘了chmod +x,然后一直报Permission denied。嗯,权限问题要养成习惯检查。

第三,第一次启动非常慢。 这个不是bug。Nextflow第一次运行要下载整个核心包,大概几十MB。如果网络慢,你会以为它卡死了。等就完了。

验证自己的环境

跑完上面的步骤,你可以用这个脚本快速做一次全面检查:

#!/bin/bash
echo "=== 环境检查 ==="
echo "Java版本:"
java -version 2>&1 | head -n 1
echo ""
echo "Nextflow版本:"
nextflow -version 2>&1 | grep version
echo ""
echo "Git版本:"
git --version 2>&1
echo ""
echo "Docker:"
docker --version 2>&1 || echo "Docker未安装"

把这段保存成 check_env.sh,执行 bash check_env.sh。如果Java和Nextflow都有版本输出,你的环境就算搭建成功了。

总结一下:环境搭建的要害是三个点——Java版本对、PATH配好、网络通。前两个你自己能控制,最后一个看运气。别心急,一步一步来,很稳的。