安装与配置 Nextflow(包括 Singularity/Docker)
说实话,每次开始一个新的生物信息项目,我最先做的一件事就是确认 Nextflow 和容器环境是不是跑通了。很多小伙伴急着写 pipeline,结果在环境配置上卡了一整天——嗯,我早期也没少踩这个坑。这一章咱们就把它彻底搞定。
安装 Nextflow:三种主流方式
Nextflow 本质上是一个 Java 应用,所以只要系统上有 Java 8 或更高版本就能跑。我个人习惯用 curl 直接下载,干净利落。
# 方法一:curl 安装(推荐)
curl -s https://get.nextflow.io | bash
# 方法二:用 wget
wget -qO- https://get.nextflow.io | bash
下载完会得到一个 nextflow 可执行文件,我建议把它放到 /usr/local/bin 或者 ~/bin 下,方便全局调用。另外,很多同学在集群上没有 sudo 权限,那就放到自己的 $HOME/bin 并加到 PATH 里。
如果你喜欢用 conda 管理生物信息软件,也可以这样装:
# 方法三:conda 安装
conda install -c bioconda nextflow
为什么要优先选 curl/wget 方式?
conda 里的版本有时滞后,而且经常要等依赖解析。我遇到过 conda 装了个 20.x 旧版,而新 pipeline 要求 22.x 以上——折腾了半天才发现是版本问题。所以我现在都用官方脚本直接拿最新版。
环境变量设置:让 Nextflow 找到家
装完 Nextflow 后,别忘了配置两个关键环境变量。我习惯把它们写进 ~/.bashrc 或 ~/.profile 里:
# 加入 PATH(如果你没把 nextflow 放到系统目录)
export PATH=$HOME/bin:$PATH
# 指定 Nextflow 的家目录(缓存、临时文件放这里)
export NXF_HOME=$HOME/.nextflow
NXF_HOME 默认是 $HOME/.nextflow,但如果你在集群上共享家目录,我建议把 NXF_HOME 指向一个本地 SSD 或 tmp 盘,避免 I/O 瓶颈。
小技巧:每次配完环境变量,记得 source ~/.bashrc 或重新登录终端。然后跑一下 nextflow info 看看版本。
安装容器引擎:Docker 与 Singularity
容器是 Nextflow 实现可复现性的基石。下面说说两种主流引擎的安装——我个人的经验是:本地开发用 Docker,集群/ HPC 用 Singularity。
Docker 安装(适用于个人电脑或小型服务器)
在 Ubuntu 上,标准的安装步骤是:
# 更新包索引
sudo apt-get update
# 安装依赖
sudo apt-get install ca-certificates curl gnupg
# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证
sudo docker run hello-world
我曾经踩过的坑:装完 Docker 后,普通用户直接运行 docker ps 会报权限错误。
解决方法:
sudo usermod -aG docker $USER
# 注销并重新登录,或者 newgrp docker 使其生效
注意:docker 组的权限等同于 root,在共享集群上建议谨慎使用。
Singularity 安装(适用于 HPC 集群)
Singularity(现在叫 Apptainer)在生物信息 HPC 里几乎成了标配。因为用户没有 root 权限,而 Singularity 不需要 daemon,可以直接运行。
# 在 Ubuntu 上安装 SingularityCE(社区版)
# 先安装 Go(如果编译的话,但推荐直接用二进制包)
sudo apt-get update
sudo apt-get install wget
# 下载预编译二进制(以 4.0 为例)
wget https://github.com/sylabs/singularity/releases/download/v4.0.0/singularity-ce_4.0.0-focal_amd64.deb
sudo dpkg -i singularity-ce_4.0.0-focal_amd64.deb
# 验证安装
singularity version
如果你在 CentOS / Rocky Linux 上,可以用 RPM 包。另外很多 HPC 集群已经预装了 Singularity,你可以直接 which singularity 或者 module load singularity。
对比 Docker vs Singularity(生物信息场景)
| 特性 | Docker | Singularity |
|---|---|---|
| 需要 root 权限? | 需要(除非用 rootless 模式) | 不需要,普通用户即可运行 |
| 守护进程 | 需要后台 dockerd | 无守护进程,直接执行 |
| GPU 支持 | 需要 nvidia-docker2 | 原生支持 --nv 参数 |
| 与 SLURM 集成 | 较复杂(需 sudo 或 rootless) | 原生集成,HPC 友好 |
| 镜像格式 | 分层镜像 | 单文件 .sif 格式,方便分发 |
配置 Nextflow 使用容器
Nextflow 通过 nextflow.config 文件来指定用哪种容器引擎。最常用的方式是在项目根目录下创建一个配置文件。我习惯把容器相关的设置单独抽出来:
// nextflow.config(放在 pipeline 目录下)
process {
container = 'biocontainers/fastqc:v0.11.9_cv1'
// 或者让 Nextflow 自动从 Docker Hub 拉取
}
docker {
enabled = true
// 如果要用 Singularity,改为 false 并启用 singularity
}
singularity {
enabled = false
// autoMounts = true // 自动挂载常用目录(如 /tmp)
}
当你同时装了 Docker 和 Singularity 时,可以通过 docker.enabled 和 singularity.enabled 来切换。如果两个都设为 true,Nextflow 会优先使用 Docker。
实用技巧:在 HPC 上提交作业时,通过命令行参数覆盖配置更方便:
nextflow run main.nf -with-singularity # 强制使用 Singularity
验证安装与配置是否正常
跑一个小测试是最保险的。我通常会拿 nf-core 的 hello pipeline 来检验:
# 先确保 Nextflow 能用
nextflow run hello
# 如果你配置了 Docker,试试用容器跑
nextflow run nf-core/fetchngs -profile test,docker --outdir ./test_result
# 检查进程是否真的走容器了(看日志里的 container 字段)
如果一切顺利,你会看到 Nextflow 自动下载镜像,然后每个 process 在容器中执行。万一遇到 docker: command not found 或者 singularity: command not found,八成是 PATH 没配好。
本章知识体系
配置完成后,建议随手做一次端到端检查:
nextflow info确认版本docker run hello-world或singularity run hello-world.sif确认容器引擎正常- 用一个小 pipeline(比如 nf-core/hello)跑通
-with-docker或-with-singularity