abims_sbr.sequenceserver

Rol de Ansible: SequenceServer

CI Versión de SequenceServer Desarrolladores

Un rol de Ansible que instala SequenceServer en Linux (probaremos con Ubuntu 20) y despliega un servidor NCBI BLAST+ para cada base de datos BLAST, con las siguientes características:

  • Los trabajos de BLAST se envían a un clúster HPC con SLURM.
  • Los servidores están configurados como proxy inverso con NGINX. Se puede configurar acceso restringido para servidores privados, consultando un servidor LDAP.
  • La interfaz de SequenceServer se puede personalizar mínimamente (logo, título, enlace de soporte).

Requisitos

El host debe estar configurado como cliente de SLURM y el usuario de SequenceServer debe tener una cuenta de SLURM para poder enviar trabajos al clúster HPC de SLURM. Cómo instalar y configurar un clúster HPC de SLURM está fuera del alcance de este rol.

Las herramientas NCBI BLAST+ deben estar disponibles en el host y en el clúster HPC de SLURM (con module load blast). Se pueden instalar con Conda. Las bases de datos BLAST deben ser formateadas con makeblastdb (ver https://sequenceserver.com/doc/#database)

Variables del rol

Las variables disponibles se enumeran a continuación, junto con los valores predeterminados (ver defaults/main.yml):

# Versión del gem de ruby a instalar (>= 2.0.0)
sequenceserver_version: 2.2.0

Variable para establecer la versión de SequenceServer a instalar. Este rol se puede utilizar con la versión de SequenceServer >= 2.0.0.

sequenceserver_blast_db:
    - name: 'my_db'
      port: '4567'
      path: '/ruta/a/mi/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']}}}]

Esta es la variable utilizada para definir las bases de datos BLAST.

Por cada elemento de la lista (cada base de datos) se generará un servidor BLAST accesible en la URL http://hostname/my_db (donde "hostname" es el nombre del servidor proporcionado en el inventario y "name" es el nombre de la base de datos proporcionado en la variable sequenceserver_blast_db). Cada servidor BLAST es gestionado con un servicio systemd llamado "sequenceserver-name.service" (configuración en /etc/systemd/system/).

Si el servidor BLAST necesita otro proxy inverso, puede ser necesario agregar una directiva para editar el encabezado de respuesta "location" a fin de obtener la URL correcta para la página de resultados (ver issue#464). Por ejemplo, con un proxy inverso de Apache:

<LocationMatch "^/(?<instance>[^/]+)/">
   Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)(:\d+)?/(%{MATCH_INSTANCE}e/)?" "/%{MATCH_INSTANCE}e/" env=MATCH_INSTANCE
</LocationMatch>

Cada base de datos se define como un diccionario de los siguientes parámetros:

  • name Un nombre único para la base de datos, utilizado en la URL.
  • port Un puerto único no utilizado.
  • path Ruta absoluta al directorio donde se encuentran una o varias bases de datos formateadas.
  • users Opcional. Útil si la base de datos necesita acceso restringido. Lista de usuarios autorizados (LDAP "uid").
  • ldap_businesscategory Opcional. Útil si la base de datos necesita acceso restringido. Un valor de businessCategory de ldap. Los usuarios LDAP con este valor de "businessCategory" tendrán acceso a la base de datos.
  • group Opcional. Útil si la base de datos necesita acceso restringido. Un grupo LDAP ("gid"). Los usuarios LDAP que son miembros de este grupo tendrán acceso a la base de datos.
  • web_page_title Opcional. El título que se mostrará en la parte superior de la página web. Si no se proporciona, el título predeterminado es "Servidor BLAST para name".
  • placeholders Opcional. Una lista de diccionarios de marcadores de posición {key: 'key_item', value: 'value_item'} que se utilizan para personalizar el código HTML suplementario en la parte superior o inferior (ver sequenceserver_top_web_page_html_path y sequenceserver_bottom_web_page_html_path). Por ejemplo placeholders: [{key: 'key1', value: 'value1'}, {key: 'key2', value: 'value2'}].
  • conf_options Opcional. Una lista de opciones de configuración suplementarias de SequenceServer como diccionarios {key: 'key_item', value: 'value_item'} (ver documentación de SequenceServer). Por ejemplo [{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']}}}]

Un name y port únicos son obligatorios para cada base de datos. users, ldap_businesscategory y group son opcionales y se pueden usar para agregar una capa de autenticación con el módulo nginx-auth-ldap. Elija un modo de autenticación único para cada base de datos. El título del servidor BLAST se puede personalizar con el parámetro web_page_title. Si no se proporciona, el título predeterminado es "Servidor BLAST para name".

Los registros de SequenceServer se almacenan en /var/log/sequenceserver/sequenceserver.log.

# Versión de BLAST a usar en sequenceserver (llamada con "module load" en el script bash de slurm)
sequenceserver_blast_version: 2.14.0
# Ruta absoluta a los binarios de blast
sequenceserver_blast_binaries: "~/conda3/envs/blast-{{ sequenceserver_blast_version }}/bin"
# --cpus-per-task (opción SLURM)
sequenceserver_blast_threads: 4
# --mem (opción SLURM)
sequenceserver_blast_mem: 16GB

Variables necesarias para configurar SequenceServer y las opciones del trabajo SLURM.

# URL para obtener la imagen del logo
sequenceserver_logo_url: ""
# Ruta del archivo local para la imagen del logo
sequenceserver_logo_path: ""
# URL a la que apunta el logo
sequenceserver_home_url: "http://sequenceserver.com"
# URL a la que apunta el icono de "Ayuda y soporte"
sequenceserver_support_email: "http://www.sequenceserver.com/#license-and-support"
# Ruta al archivo que contiene el código HTML suplementario para mostrar en la parte superior de la página web
sequenceserver_top_web_page_html_path: "~/top_web_page.html"
# Ruta al archivo que contiene el código HTML suplementario para mostrar en la parte inferior de la página web
sequenceserver_bottom_web_page_html_path: "~/bottom_web_page.html"

Estas variables permiten personalizar la página web del servidor BLAST. Son opcionales. Dos variables están disponibles para establecer el logo mostrado en el servidor BLAST: sequenceserver_logo_url o sequenceserver_logo_path. Si ambas están configuradas, el logo proporcionado con sequenceserver_logo_path anulará al proporcionado con sequenceserver_logo_url. Si los archivos sequenceserver_top_web_page_html_path o sequenceserver_bottom_web_page_html_path existen, su contenido se agregará en la plantilla RUBY base utilizada para mostrar la página web y se renderizará en la parte superior e inferior de la misma. Estos archivos deben contener código HTML. Esto puede ser usado, por ejemplo, para mostrar información o mensajes de advertencia a los usuarios (apagado del servicio, etc). Los marcadores de posición establecidos en el parámetro de la base de datos placeholders (ver arriba) pueden ser utilizados para personalizar el código HTML en estos archivos. Por ejemplo, si la base de datos tiene el parámetro placeholders: [{key: 'key_item', value: 'value_item'}], el fragmento <% if defined?(SequenceServer::Key_item) %><%= SequenceServer::Key_item %> será reemplazado por la cadena value_item en el código HTML renderizado. Tenga en cuenta que la primera letra debe estar en mayúscula en el fragmento para que sea correctamente interpretado como una constante de Ruby por SequenceServer.

# Usuario que ejecuta el servicio sequenceserver (systemd) y ejecuta los trabajos de BLAST de SLURM
sequenceserver_user: "sequenceserver"

Variable para definir el usuario que ejecuta el servicio sequenceserver y envía los trabajos SLURM. Este usuario debe tener una cuenta de SLURM.

# Versión de NGINX a instalar, de https://nginx.org/packages/mainline
sequenceserver_nginx_version: 1.25.5
# proxy_read_timeout (directiva de nginx)
sequenceserver_proxy_read_timeout: 180
# Autenticación con LDAP - Obligatorio si se usan usuarios o grupos en la variable sequenceserver_blast_db
# Sequenceserver_ldap_url: "ldap://ldap.my-domain.org/o=my-domain,c=org?uid?sub?"
sequenceserver_ldap_url: ""

Variables para configurar el proxy inverso de NGINX. sequenceserver_ldap_url debe configurarse si alguna de las bases de datos tiene acceso restringido (uso del parámetro users o group en sequenceserver_blast_db).

Dependencias

Roles:

Ejemplo de Playbook

- name: sequenceserver | instalar servidor blast
  hosts: blast_server
  roles:
    - abims_sbr.sequenceserver

Licencia

Licencia MIT

Información del autor

Este rol fue creado en 2020 por Loraine Brillet-Guéguen

Acerca del proyecto

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.

Instalar
ansible-galaxy install abims_sbr.sequenceserver
Licencia
mit
Descargas
3.6k