Skip to content

Galaxy 快速部署方式

Mark Renton 更新于: 2020-09-17


banner

1. 小型实验室快速解决方案

使用 Amazon EC2 对于不熟悉 Linux 和服务器配置的用户而言是很方便,节省用户在硬件的经济投入,配置学习以及维护能力的培养。但对于测序数据不适合上传到第三方服务器的实验室或要结合本地 LIMS 系统的实验室,要快速构建 Galaxy 以及相配套的其他软件,目前来说最简便的方法之一是利用 docker 部署到本地服务器上。

1.1 安装 Docker

# 对于 Ubuntu 20.04 LTS 的用户
$ sudo apt update
$ sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

# 查看 docker 运行状态
$ sudo systemctl status docker

# 如果需要以非管理员身份运行 docker
# 需要将用户加入 docker 组,比如将当前用户加入,即可不需要sudu即可执行docker命令
$ sudo usermod -aG docker $USER

1.2 Docker入门

首先要对 docker 镜像和容器的概念有所了解。细节可以参阅 Docker 从入门到实践

# 测试 docker 是否运行正常
$ docker container run hello-world

1.3 安装 galaxy docker 镜像

使用docker-galaxy-stable作为镜像,源代码可以在 Github 下载。也可以直接到官方 Hub Registry 里下载galaxy-stable镜像。

$ sudo docker pull bgruening/galaxy-stable

官方 Registry 非常慢,可以通过国内 daocloud 服务商的加速器来加快docker pull过程:首先注册一个 daocloud 用户,然后在命令行中添加 registry mirror。

# ****** 为daocloud分配给你的ID
$ echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://******.m.daocloud.io\"" | sudo tee -a /etc/default/docker
$ sudo service docker restart
$ sudo docker pull bgruening/galaxy-stable

该脚本可以将--registry-mirror加入到你的Docker配置文件/etc/default/docker中。适用于Ubuntu14.04,其他版本根据docker配置文件和环境变量,可能有细微不同。

$ wget https://github.com/bgruening/docker-galaxy-stable/archive/15.10.tar.gz
$ tar zxf 15.10.tar.gz
$ cd docker-galaxy-stable-15.10

1.4 启动 galax-stable 容器

docker run -d表示以daemon方式运行docker,执行该命令后,docker完成galaxy初始化需要花几分钟时间才能访问。如果是本地运行,用浏览器访问127.0.0.1:8080可以看到galaxy首页,如果是服务器上用ssh连接执行命令,要访问服务器IP加上8080端口。

# 后台运行 galaxy 容器
$ sudo docker run -d -p 8080:80 -p 8021:21 bgruening/galaxy-stable

# 交互方式运行 galaxy 容器
$ sudo docker run -i -t -p 8080:80 bgruening/galaxy-stable /bin/bash
root$ sh run.sh

有时候需要进入docker容器中进行操作,就可以以docker run -i交互模式进行访问。进入容器后运行sh run.sh可以DEBUG方式运行galaxy,适合本地测试使用。

1.5 复制容器内文件

# fc3e62e0471d 是想要获取文件的所在容器。foo.txt是想要获得的文件。
$ sudo docker cp fc3ea62e471d:/home/foo.txt .

1.6 加载数据卷

需要分析的数据通过添加外部数据卷来实现。

# 添加服务器上的 /mydata 卷到容器中
$ sudo docker create -v /mydata --name my_data_vol bgruening/galaxy-stable /bin/bash

# 或者在运行时将本地卷`/mydata`加入到容器中`/container_data`位置
$ sudo docker run -d -p 8080:80 -v /mydata:/container_data/ bgruening/galaxy-stable

镜像是只读的,当Ctrl+D方式退出容器后,再次进入容器时你上次以添加的内容是看不到的。如果想要从上一次运行的容易中获得文件可以用docker cp的方法,不过你得记住上一次运行的container id号。

1.7 删除所有不运行的容器

$ sudo docker ps -a | cut -d ' ' -f 1 | sudo xargs docker rm

1.8 删除镜像

# IMAGE ID 是该镜像的ID,如果镜像还有容器运行,或有其他镜像的依赖关系,则无法删除要先删除容器或其他镜像。
$ sudo docker rmi IMAGE_ID

2. 本地安装与基本配置

本节介绍 Galaxy 下载安装与使用。最适合的场景为个人电脑,单用户使用的情况。

2.1 下载与安装

Galaxy 作为一款开源软件,可以访问其代码仓库获得最新版本,或将 galaxy 代码库克隆到本地。

$ git clone https://github.com/galaxyproject/galaxy
$ cd galaxy

2.2 配置与运行

克隆到本地的 stable 代码,一般Linux系统自带Python就可以直接运行了。

$ sh run.sh

运行 run.sh,这个shell脚本程序会自动完成初始化数据,依赖库下载,数据库迁移等一系列操作,当看到终端显示serving on http://127.0.0.1:8080时,可以打开浏览器,访问 http://127.0.0.1:8080 即可看到galaxy的界面。

2.3 添加官方 toolshed 中的工具

默认的galaxy只带有基本的工具,对于实际工作中需要的各种分析软件,需要添加到自己建立的 galaxy 实例中。

高通量测序的生物信息学软件大多是基于命令行的开源工具。galaxy利用python语言将这些工具粘合到galaxy实例中,使得用户可以在web界面中直接调用命令行工具对数据进行操作。

galaxy有一个toolshed(工具库)的概念:https://toolshed.g2.bx.psu.edu/(官方维护的toolshed),许多著名的工具已经被移植到toolshed中,可以直接被安装到galaxy里,此外也有许多第三方的toolshed包可以添加,甚至掌握了一些python脚本和galaxy xml规范后,也可以自己添加一些分析工具到galaxy中。

除了分析软件外,toolshed还包含创建的数据类型,以及工作流等。

首先修改配置文件 tool_sheds_conf.xml

$ cp config/tool_sheds_conf.xml.sample config/tool_sheds_conf.xml

其次在galaxy.ini中配置依赖包的安装目录(上一部分已经添加了这个参数,将依赖包安装在tool_dep),然后添加管理员帐号,比如你之前用admin@localhost.com注册的galaxy实例,就将galaxy.ini中admin_users设置为:

admin_users = admin@localhost.com

重启你的galaxy实例,用admin@localhost.com用户登陆,你就有权限访问http://127.0.0.1:8080/admin,在admin界面可以看到Tool sheds下有Search and browse tool sheds链接,点击后可以看到默认的2个toolsheds源。

进入Galaxy main tool shed,工具列表上访有搜索框,在这里输入你要安装的工具名称比如spades后,回车进行检索。

Instance

点击结果列表中的spades下拉菜单,选择Preview and install,在转向页面中点击Install to Galaxy后,会出现如下图的提示。

Instance

add new tool panel section中输入Assembly,将spades工具归类到Assembly这个新建的工具类别中,点击页面底部的Install按钮开始安装。


3. 构建单机产环境

作为个人尝试,前面的步骤在PC机上已经可以正常运行使用。对于要作为生产环境下多用户使用,建议使用专门的代理服务器和数据库来增强效率和速度。这里采用nginx+postgresql构建生产环境下的 Galaxy 服务。这里只是简单的介绍一下最基本的配置方式,对于高负载的web server设置又是另一个很复杂的话题了,这里就不具体展开。也可以参考别人做的galaxy dockerfile

3.1 系统设置

首先在ubuntu下新建一个用户galaxy。

$ sudo adduser galaxy

按照提示,在弹出提示符输入相应内容,主要填好密码即可,其他可以留空。然后切换到galaxy用户:

$ su galaxy
$ cd

重复Galaxy 本地安装与配置的第一步下载与安装步骤,建立配置文件:

$ cp config/galaxy.ini.sample config/galaxy.ini
$ vim config/galaxy.ini

将配置文件galaxy.ini设置如下,你也可以将内容直接保存成galaxy.ini

[server:main]
use = egg:Paste#http
host = 0.0.0.0
use_threadpool = True
threadpool_kill_thread_limit = 10800

[filter:gzip]
use = egg:Paste#gzip

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix
prefix = /galaxy

[app:main]
paste.app_factory = galaxy.web.buildapp:app_factory
database_connection = postgresql://galaxy:galaxy@localhost:5432/galaxyserver
tool_dependency_dir = tool_dep
use_nglims = False
nglims_config_file = tool-data/nglims.yaml
debug = False
use_interactive = False
admin_users = admin@localhost.com

3.2 安装 postgresql

安装postgresql并建立galaxy数据库,这里用户名和密码都设置为galaxy,要与 galaxy.ini 中database_connection参数对应的值一致。

$ sudo apt-get install postgresql-9.3
$ su - postgres
$ psql template1

> CREATE USER galaxy WITH PASSWORD 'galaxy';
> CREATE DATABASE galaxyserver;
> GRANT ALL PRIVILEGES ON DATABASE galaxyserver to galaxy;
> \q

3.3 安装 nginx

用nginx做反向代理,处理请求。

$ sudo apt-get install nginx

设置nginx.conf

http {
    upstream galaxy_app {
        server localhost:8080;
    }

    server {
        client_max_body_size 10G;
        location / {
            proxy_pass   http://galaxy_app;
            proxy_set_header   X-Forwarded-Host $host;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
    }
}

docker 安装

Galaxy 由于依赖众多,安装比较复杂,推荐用 docker 镜像安装,比较简单。

# 下载镜像
$ docker pull bgruening/galaxy-stable

# 运行images
$ docker run -d -p 8080:80 -p 8021:21 -p 8022:22 bgruening/galaxy-stable
打开浏览器,访问 http://127.0.0.1:8080 可以看到 galaxy 界面

Rreference

  1. Docker 从入门到实践
  2. docker-galaxy-stable