abims_sbr.sequenceserver
Ansible角色:SequenceServer
这是一个Ansible角色,用于在Linux上安装SequenceServer(经过Ubuntu 20测试),并为每个BLAST数据库部署一个NCBI BLAST+服务器,具有以下功能:
- BLAST作业在SLURM HPC集群上提交。
- 服务器通过NGINX反向代理。可以通过查询LDAP服务器为私有服务器配置受限访问。
- SequenceServer界面可以进行简单定制(例如,logo、标题、支持链接)。
要求
主机必须配置为SLURM客户端,SequenceServer用户必须拥有SLURM帐户才能在SLURM HPC集群上提交作业。 如何安装和配置SLURM HPC集群不在该角色的范围内。
主机和SLURM HPC集群上必须可用NCBI BLAST+工具(使用module load blast
)。它们可以通过Conda安装。BLAST数据库必须使用makeblastdb
格式化(见 https://sequenceserver.com/doc/#database)
角色变量
可用变量如下所示,附带默认值(见defaults/main.yml
):
# 要安装的ruby gem版本(>= 2.0.0)
sequenceserver_version: 2.2.0
用于设置要安装的SequenceServer版本。该角色可与SequenceServer版本>= 2.0.0配合使用。
sequenceserver_blast_db:
- name: 'my_db'
port: '4567'
path: '/path/to/my/db'
users: ['fbar','jsmith']
web_page_title: 'blablabla'
placeholders: [{key: 'key1', value: 'value1'}, {key: 'key2', value: 'value2'}]
conf_options: [{key: 'job_lifetime', value: '10080'}, {key: 'databases_widget', value: 'tree'}, {key: 'options', value: {'blastn': {'default': ['-task blastn', '-evalue 1e-5'], 'short-seq': ['-task blastn-short', '-evalue 1e-1']}}}]
这是用于定义BLAST数据库的变量。
每个列表中的元素(每个数据库)将生成一个可通过网址http://hostname/my_db访问的BLAST服务器(其中“hostname”是提供的服务器名称,而“name”是`sequenceserver_blast_db`变量中提供的数据库名称)。每个BLAST服务器由名为“sequenceserver-`name`.service”的systemd服务管理(配置在`/etc/systemd/system/`中)。
如果BLAST服务器需要另一个反向代理,可能需要添加指令以编辑响应头“location”,以获取结果页面的正确网址(见issue#464)。例如,使用apache反向代理:
<LocationMatch "^/(?<instance>[^/]+)/">
Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)(:\d+)?/(%{MATCH_INSTANCE}e/)?" "/%{MATCH_INSTANCE}e/" env=MATCH_INSTANCE
</LocationMatch>
每个数据库被定义为包含以下参数的字典:
name
一个唯一的数据库名称,用于网址port
一个唯一未使用的端口path
指向一个或多个已格式化数据库所在目录的绝对路径users
可选。如果数据库需要限制访问,这将很有用。授权用户的列表(LDAP "uid")。ldap_businesscategory
可选。如果数据库需要限制访问,非常有用。一个ldap businessCategory值。具有此“businessCategory”值的LDAP用户将可以访问数据库。group
可选。如果数据库需要限制访问,非常有用。一个LDAP组("gid")。是此组成员的LDAP用户将可以访问数据库。web_page_title
可选。网页顶部显示的标题。如果未提供,默认标题为"BLAST server forname
"。placeholders
可选。占位符字典的列表{key: 'key1', value: 'value1'}
,用于定制顶部或底部的补充HTML代码(见sequenceserver_top_web_page_html_path
和sequenceserver_bottom_web_page_html_path
)。例如placeholders: [{key: 'key1', value: 'value1'}, {key: 'key2', value: 'value2'}]
。conf_options
可选。作为字典的补充SequenceServer配置选项列表{key: 'key_item', value: 'value_item'}
(见SequenceServer文档)。例如[{key: 'job_lifetime', value: '10080'}, {key: 'databases_widget', value: 'tree'}, {key: 'options', value: {'blastn': {'default': ['-task blastn', '-evalue 1e-5'], 'short-seq': ['-task blastn-short', '-evalue 1e-1']}}}]
每个数据库必须唯一name
和port
。
users
、ldap_businesscategory
和group
是可选的,可以用于通过nginx-auth-ldap模块添加身份验证层。每个数据库选择一个身份验证模式。
BLAST服务器标题可以通过web_page_title
参数进行定制。如果未提供,默认标题为"BLAST server for name
"。
SequenceServer日志存储在/var/log/sequenceserver/sequenceserver.log
中。
# 用于SequenceServer的BLAST版本(在SLURM bash脚本中用“module load”调用)
sequenceserver_blast_version: 2.14.0
# BLAST二进制文件的绝对路径
sequenceserver_blast_binaries: "~/conda3/envs/blast-{{ sequenceserver_blast_version }}/bin"
# --cpus-per-task(SLURM选项)
sequenceserver_blast_threads: 4
# --mem(SLURM选项)
sequenceserver_blast_mem: 16GB
配置SequenceServer和SLURM作业选项所需的变量。
# 获取logo图片的URL
sequenceserver_logo_url: ""
# logo图片的本地文件路径
sequenceserver_logo_path: ""
# logo将指向的URL
sequenceserver_home_url: "http://sequenceserver.com"
# “帮助和支持”图标将指向的URL
sequenceserver_support_email: "http://www.sequenceserver.com/#license-and-support"
# 顶部网页显示的补充HTML代码的文件路径
sequenceserver_top_web_page_html_path: "~/top_web_page.html"
# 底部网页显示的补充HTML代码的文件路径
sequenceserver_bottom_web_page_html_path: "~/bottom_web_page.html"
这些变量允许定制BLAST服务器网页。它们是可选的。
两个变量可用于设置在BLAST服务器上显示的logo:sequenceserver_logo_url
或sequenceserver_logo_path
。如果两者都设置,使用sequenceserver_logo_path
给出的logo将覆盖使用sequenceserver_logo_url
给出的logo。
如果文件sequenceserver_top_web_page_html_path
或sequenceserver_bottom_web_page_html_path
存在,它们的内容将被添加到用于显示网页的基本RUBY模板中,并将渲染在网页的顶部和底部。这些文件必须包含HTML代码。例如,可以用于向用户显示信息或警告消息(服务停机等)。
在数据库参数placeholders
中设置的占位符(见上文)可以用于定制这些文件中的HTML代码。例如,如果数据库有参数placeholders: [{key: 'key_item', value: 'value_item'}]
,然后代码段<% if defined?(SequenceServer::Key_item) %><%= SequenceServer::Key_item %>
将在呈现的HTML代码中被字符串value_item
替换。请注意,代码段中的第一个字母必须大写,以便被SequenceServer正确解析为Ruby常量。
# 运行sequenceserver服务(systemd)和运行SLURM BLAST作业的用户
sequenceserver_user: "sequenceserver"
用于定义运行sequenceserver服务和提交SLURM作业的用户的变量。该用户必须有一个SLURM帐户。
# 要安装的NGINX版本,来自https://nginx.org/packages/mainline
sequenceserver_nginx_version: 1.25.5
# proxy_read_timeout(nginx指令)
sequenceserver_proxy_read_timeout: 180
# LDAP身份验证 - 如果在变量sequenceserver_blast_db中使用了用户或组,则为强制性
# Sequenceserver_ldap_url: "ldap://ldap.my-domain.org/o=my-domain,c=org?uid?sub?"
sequenceserver_ldap_url: ""
用于配置NGINX反向代理的变量。
如果其中一个数据库有访问限制(使用sequenceserver_blast_db
中的users
或group
参数),则必须设置sequenceserver_ldap_url
。
依赖关系
角色:
示例剧本
- name: sequenceserver | 安装BLAST服务器
hosts: blast_server
roles:
- abims_sbr.sequenceserver
许可证
MIT许可证
作者信息
该角色由Loraine Brillet-Guéguen于2020年创建。
Installs SequenceServer on Linux and deploys one NCBI BLAST+ server for each BLAST database, reverse-proxied by NGINX, submitting jobs on a SLURM HPC cluster.
ansible-galaxy install abims_sbr.sequenceserver