使用Galaxy构建基于Web的应用平台¶
小型实验室快速解决方案¶
使用 Amazon EC2 对于不熟悉 Linux 和服务器配置的用户而言是很方便,节省用户在硬件的经济投入,配置学习以及维护能力的培养。但对于测序数据不适合上传到第三方服务器的实验室或要结合本地 LIMS 系统的实验室,要快速构建 Galaxy 以及相配套的其他软件,目前来说最简便的方法之一是利用 docker 部署到本地服务器上。
Docker¶
安装 Docker¶
Ubuntu 14.04 已经自带了 docker 安装包,不过版本相对较老,想使用 docker 最新版的功能,添加源来安装 docker:
# 添加 docker 源
~$ sudo apt-get install apt-transport-https
~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
~$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
# 安装 docker
~$ sudo apt-get update
~$ sudo apt-get install lxc-docker
# 安装完成后启动 docker 服务
~$ sudo service docker start
Docker入门¶
首先要对 docker 镜像和容器的概念有所了解。细节可以参阅 Docker 从入门到实践
~$ docker run ubuntu:14.04 /bin/echo 'Hello world'
安装 galaxy docker 镜像¶
galaxy 的 docker
镜像可以自己来创建,建议使用docker galaxy-stable,源代码可以在 Github 下载。也可以直接到官方 Hun 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配置文件和环境变量,可能有细微不同。
~/app$ wget https://github.com/bgruening/docker-galaxy-stable/archive/15.10.tar.gz
~/app$ tar zxf 15.10.tar.gz
~/app$ cd docker-galaxy-stable-15.10
启动 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,适合本地测试使用。
复制容器内文件¶
# fc3e62e0471d 是想要获取文件的所在容器。foo.txt是想要获得的文件。
~$ sudo docker cp fc3ea62e471d:/home/foo.txt .
加载数据卷¶
需要分析的数据通过添加外部数据卷来实现。
# 添加服务器上的 /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 号。
删除所有不运行的容器¶
~$ sudo docker ps -a | cut -d ' ' -f 1 | sudo xargs docker rm
删除镜像¶
# IMAGE ID 是该镜像的ID,如果镜像还有容器运行,或有其他镜像的依赖关系,则无法删除要先删除容器或其他镜像。
~$ sudo docker rmi IMAGE_ID
Rreference¶
本地安装与基本配置¶
本节介绍 Galaxy 的最基本下载安装与使用。最适合的场景为个人电脑,单用户使用的情况。
下载与安装¶
Galaxy 作为一款开源软件,其代码库托管在 http://bitbucket.org ,先安装 mercurial ,然后用 hg 工具将 galaxy 代码库克隆到本地。
:: code-block:: bash
~app$ sudo apt-get install mercurial ~app$ hg clone https://bitbucket.org/galaxy/galaxy-dist/ ~app$ cd galaxy-dist
可以用 hg branch 命令查看代码分支是否为
stable,如果是其他分支(galaxy代码库有另一分支’default’),切换到 stable
分支:hg update stable。在生产环境下建议使用 stable 分支的代码。
配置与运行¶
克隆到本地的 stable 代码,一般Linux系统自带Python就可以直接运行了。
~app$ ./run.sh
运行run.sh,这个shell脚本程序会自动完成初始化数据,依赖库下载,数据库迁移等一系列操作,当看到终端显示serving on http://127.0.0.1:8080时,可以打开浏览器,访问 http://127.0.0.1:8080 即可看到galaxy的界面。
添加官方 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按钮开始安装。
构建单机产环境
————–
作为个人尝试,前面的步骤在PC机上已经可以正常运行使用。对于要作为生产环境下多用户使用,建议使用专门的代理服务器和数据库来增强效率和速度。这里采用nginx+postgresql构建生产环境下的 Galaxy 服务。这里只是简单的介绍一下最基本的配置方式,对于高负载的web server设置又是另一个很复杂的话题了,这里就不具体展开。也可以参考别人做的galaxy dockerfile。
首先在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
安装 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
安装 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;
}
}
}