Servidor Galaxy

Descripción del componente

Galaxy

Galaxy es una plataforma web ampliamente utilizada para realizar investigaciones de índole bioinformátiico teniendo como principal objetivo que estas sean accesibles, reproducibles y transparentes. Galaxy proporciona una interfaz fácil de usar para que los investigadores puedan ejecutar una amplia gama de tareas y flujos sin necesidad de tengan conocimientos avanzados de programación.

El proyecto UseGalaxy cuenta con el respaldo de una gran cantidad de servidores a lo largo de todo el mundo. Los principales servidores públicos de incluyen:

Además, hay muchas otras instancias de Galaxy alojadas por instituciones y grupos de investigación a nivel mundial, lo que contribuye a un rico ecosistema de servidores Galaxy.

Dentro de IMPaCT-Data se ha desarrollado un ecosistema Galaxy compuesto de un nodo central (https://galaxy.impact-data.bsc.es/) y una serie de nodos externos de trabajo Pulsar.

Documentación técnica

Instalación de Galaxy

La instancia de Galaxy para IMPaCT-Data ha sido desplegada utilizando un enfoque de instalación basado en código fuente (source-based). Esto permite adaptar el despliegue a la infraestructura del proyecto teniendo una configuración reproducible y fácil de mantener.

Aunque esta documentación describe el enfoque de despliegue utilizado para IMPaCT-Data, los requisitos exactos pueden variar entre sitios dependiendo de la infraestructura disponible, las políticas de acceso, la disposición del almacenamiento, las necesidades de autenticación y el modelo de ejecución de trabajos.

Para una guía paso a paso sobre el proceso de configuración de un servidor Galaxy, consulte las instrucciones de despliegue a continuación y remítase a la documentación oficial de administración de Galaxy cuando sea necesario.

Guía de Despliegue del Servidor Galaxy

Guía paso a paso para desplegar un servidor Galaxy listo para producción (versión 25.1) en Ubuntu 24.04 LTS. Este documento cubre la clonación del código fuente, la configuración de la base de datos, la configuración de Galaxy, la habilitación de cargas de archivos mediante TUS, la gestión del proceso con systemd y extras opcionales como autenticación OIDC y ejecución remota con Pulsar.


Tabla de Contenidos


Paquetes del Sistema

sudo apt update && sudo apt upgrade -y

sudo apt install -y \
  build-essential \
  python3 python3-dev python3-venv python3-pip \
  git \
  postgresql postgresql-client libpq-dev \
  nginx certbot python3-certbot-nginx \
  curl wget \
  libcurl4-openssl-dev libssl-dev \
  zlib1g-dev libbz2-dev liblzma-dev \
  libffi-dev libsqlite3-dev \
  node-gyp nodejs npm

Estos paquetes cubren la compilación de extensiones en C, los controladores de base de datos y los componentes del proxy web.


Base de Datos PostgreSQL

Galaxy utiliza PostgreSQL para todos los metadatos persistentes (usuarios, historiales, trabajos, conjuntos de datos).

# Cambiar al usuario del sistema postgres
sudo -u postgres psql

Dentro del shell de psql:

-- Crear un rol dedicado para Galaxy con una contraseña segura
CREATE ROLE galaxy LOGIN PASSWORD 'CHANGE_ME_STRONG_PASSWORD';

-- Crear la base de datos de Galaxy propiedad de ese rol
CREATE DATABASE galaxy OWNER galaxy;

Verificar la conectividad:

psql -h localhost -U galaxy -d galaxy -c "SELECT 1;"

Clonar el Código Fuente de Galaxy

git clone -b release_25.1 https://github.com/galaxyproject/galaxy.git
cd galaxy/

El repositorio incluye todas las herramientas integradas, el sistema de compilación del cliente y las configuraciones de muestra.


Entorno Virtual de Python

Galaxy incluye un script auxiliar (scripts/common_startup.sh) que inicializa un entorno virtual, pero también puede crear uno explícitamente:

python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip setuptools wheel

La primera ejecución de run.sh instalará automáticamente las dependencias de Python de Galaxy en .venv/.


Configuración Principal (galaxy.yml)

Copie la plantilla y edite:

cp config/galaxy.yml.sample config/galaxy.yml

Configuración mínima para producción:

galaxy:
  # Base de datos
  database_connection: postgresql://galaxy:CHANGE_ME_STRONG_PASSWORD@localhost:5432/galaxy
  install_database_connection: postgresql://galaxy:CHANGE_ME_STRONG_PASSWORD@localhost:5432/galaxy

  # Rutas de datos
  file_path: /data/galaxy/database/files
  new_file_path: /data/galaxy/database/tmp
  job_working_directory: /data/galaxy/database/jobs_directory

  # Cargas reanudables con TUS
  tus_upload_store: /data/galaxy/database/tmp/tus

  # Configuración de trabajos
  job_config_file: config/job_conf.yml

  # Configuración de herramientas
  tool_config_file: config/tool_conf.xml

  # Conda (resolución automática de dependencias de herramientas)
  conda_auto_init: true
  conda_auto_install: true

  # Usuarios administradores (correos electrónicos separados por comas)
  admin_users: your-email@example.com

  # URL pública (usada para callbacks, hooks de TUS, etc.)
  galaxy_infrastructure_url: https://galaxy.yourdomain.org

  # Conservar directorios de trabajos para depuración (usar "always" en producción para limpiar)
  cleanup_job: never

gravity:
  gunicorn:
    bind: 0.0.0.0:8080
  tusd:
    enable: true

Explicación de los parámetros principales

Parámetro

Propósito

database_connection

URI de SQLAlchemy que apunta a la base de datos PostgreSQL

file_path

Dónde Galaxy almacena los archivos de conjuntos de datos cargados/generados

job_working_directory

Espacio de trabajo temporal para los trabajos en ejecución

conda_auto_init

Galaxy instalará Miniconda en el primer arranque para resolver dependencias de herramientas

admin_users

Correo(s) electrónico(s) que obtienen acceso al panel de administración

gravity

Configuración del gestor de procesos — Gunicorn sirve la aplicación web

tusd

Habilita las cargas de archivos grandes y reanudables mediante el protocolo TUS


Directorios de Datos

Cree los directorios referenciados en galaxy.yml:

sudo mkdir -p /data/galaxy/database/{files,tmp,tmp/tus,jobs_directory}
sudo chown -R $(whoami):$(whoami) /data/galaxy

Asegúrese de que el disco montado en /data tenga suficiente espacio para los conjuntos de datos.


Configuración de Herramientas (tool_conf.xml)

El archivo por defecto config/tool_conf.xml.sample incluye las herramientas integradas de Galaxy (Obtener Datos, Manipulación de Texto, etc.). Para utilizarlo:

cp config/tool_conf.xml.sample config/tool_conf.xml

Puede añadir secciones de herramientas personalizadas editando este archivo:

<toolbox monitor="true">
  <!-- Secciones integradas ... -->
  
  <section id="custom_tools" name="Mis Herramientas Personalizadas">
    <tool file="tools/my_tool/my_tool.xml" />
  </section>
</toolbox>

Las herramientas instaladas desde ToolShed (a través de la interfaz de administración) se registran por separado en config/shed_tool_conf.xml, que Galaxy gestiona automáticamente.


Configuración de Trabajos (job_conf.yml)

Para una configuración básica de servidor único con ejecución local:

cp config/job_conf.sample.yml config/job_conf.yml

Configuración mínima funcional:

runners:
  local:
    load: galaxy.jobs.runners.local:LocalJobRunner
    workers: 4

execution:
  default: local_dest
  environments:
    local_dest:
      runner: local

Esto indica a Galaxy que ejecute todos los trabajos localmente con 4 hilos de trabajo. Consulte Ejecución Remota de Trabajos con Pulsar para la ejecución distribuida.


Primer Arranque (Manual)

cd /path-to-galaxy/galaxy
./run.sh

En el primer arranque, Galaxy:

  1. Instalará las dependencias de Python en .venv/

  2. Ejecutará las migraciones de la base de datos (creando todas las tablas)

  3. Inicializará Conda (si conda_auto_init: true)

  4. Iniciará el servidor WSGI Gunicorn en el puerto 8080

Observe los registros (galaxy.log) en busca de:

serving on http://0.0.0.0:8080

Prueba local:

curl -s http://localhost:8080/api/version

Debería ver: {"version_major":"25.1", ...}

Detenga con Ctrl+C o ./run.sh --stop-daemon si se ejecuta en segundo plano.


Servicio systemd

Cree un archivo de unidad para que Galaxy se inicie al arrancar el sistema y pueda gestionarse con systemctl:

sudo tee /etc/systemd/system/galaxy.service > /dev/null <<'EOF'
[Unit]
Description=Galaxy Server
After=network.target postgresql.service

[Service]
Type=oneshot
User=ubuntu
Group=ubuntu
WorkingDirectory=path-to-galaxy
ExecStart=path-to-galaxy/run.sh --daemon
ExecStop=path-to-galaxy/run.sh --stop-daemon
RemainAfterExit=yes
TimeoutStartSec=300
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
EOF

Habilitar e iniciar:

sudo systemctl daemon-reload
sudo systemctl enable galaxy
sudo systemctl start galaxy

Comprobar el estado:

sudo systemctl status galaxy
journalctl -u galaxy -f

CVMFS para Datos de Referencia (Opcional)

CernVM-FS proporciona acceso de solo lectura a genomas de referencia de Galaxy, tablas de datos de herramientas e imágenes Singularity precompiladas sin necesidad de almacenamiento en disco local.

CVMFS tiene dos partes útiles en este despliegue:

  • Cliente CVMFS: instalado en los nodos de Galaxy/Pulsar para que puedan acceder a los repositorios bajo /cvmfs.

  • Proxy/caché CVMFS: un proxy Squid utilizado por los clientes para almacenar en caché los archivos CVMFS descargados localmente, en lugar de que cada nodo descargue los mismos archivos directamente desde internet.

Se usaron scripts preconfigurados para instalar el proxy y el cliente de CVMFS:

cvmfs-galaxy-proxy-setup.sh
cvmfs-galaxy-client-setup.sh
README.md

Configurar el proxy Squid de CVMFS

Para el despliegue del proxy Squid, se utilizó el siguiente script:

cvmfs-galaxy-proxy-setup.sh

El script del proxy instala y configura Squid como proxy de caché para los repositorios CVMFS del Proyecto Galaxy:

cd /path-to-proxy/cvmfs-setup-galaxy
sudo ./cvmfs-galaxy-proxy-setup.sh <ALLOWED_CLIENT_IP_OR_CIDR>

Ejemplo:

sudo ./cvmfs-galaxy-proxy-setup.sh 192.168.1.12

El proxy escucha en el puerto predeterminado de Squid/CVMFS:

3128

El script configura Squid para:

  • escuchar en el puerto 3128

  • permitir solo las IPs o rangos CIDR de clientes seleccionados

  • contactar con los servidores Stratum 1 de CVMFS de Galaxy

  • almacenar en caché los archivos descargados bajo la caché local de Squid

Comprobaciones útiles en el host del proxy:

systemctl status squid
systemctl is-enabled squid
sudo ss -ltnp | grep 3128
sudo sed -n '1,120p' /etc/squid/squid.conf

Configurar los clientes CVMFS para usar el proxy

En cada nodo de Galaxy o Pulsar que deba consumir CVMFS a través del proxy, use el script de configuración del cliente. Este instala el software cliente de CVMFS y escribe la configuración del repositorio CVMFS de Galaxy:

cd /home/ubuntu/cvmfs-setup-galaxy
sudo ./cvmfs-galaxy-client-setup.sh 192.168.1.2:3128

Esto escribe la configuración del cliente CVMFS en:

/etc/cvmfs/default.local

CVMFS_HTTP_PROXY=192.168.1.2:3128 significa que los clientes CVMFS obtienen los datos a través del proxy Squid local. La primera vez que se solicita un archivo o imagen de contenedor, Squid lo descarga y lo almacena en caché. Las solicitudes posteriores de los nodos de Galaxy o Pulsar pueden reutilizar la copia en caché, lo que reduce el tráfico externo y mejora la velocidad de acceso repetido.

Si una nueva VM de Pulsar necesita usar este proxy, asegúrese de que su dirección IP o subred esté permitida en /etc/squid/squid.conf en el host del proxy. De lo contrario, el cliente no podrá usar el proxy.

Verificar CVMFS en el cliente:

sudo cvmfs_config chksetup
cvmfs_config status
ls /cvmfs/data.galaxyproject.org
ls /cvmfs/singularity.galaxyproject.org

Nota: Los montajes de CVMFS son montajes lazy/autofs, por lo que los repositorios pueden aparecer bajo /cvmfs solo después del primer acceso.

Apuntar Galaxy a los datos de herramientas de CVMFS

En galaxy.yml, añada:

tool_data_table_config_path: /cvmfs/data.galaxyproject.org/byhand/location/tool_data_table_conf.xml,/cvmfs/data.galaxyproject.org/managed/location/tool_data_table_conf.xml

Esto le da a Galaxy acceso a genomas de referencia preindexados (hg38, mm10, etc.) sin descargarlos localmente.


Autenticación OIDC / SSO (Opcional)

Galaxy es compatible con OpenID Connect para el inicio de sesión único institucional.

###3 Habilitar en galaxy.yml

galaxy:
  enable_oidc: true
  oidc_config_file: config/oidc_config.xml
  oidc_backends_config_file: config/oidc_backends_config.xml

Configurar un proveedor OIDC

Cree config/oidc_backends_config.xml:

<?xml version="1.0"?>
<OIDC>
  <provider name="keycloak">
    <url>https://keycloak.yourdomain.org/realms/your-realm</url>
    <client_id>galaxy-client</client_id>
    <client_secret>YOUR_CLIENT_SECRET</client_secret>
    <redirect_uri>https://galaxy.yourdomain.org/authnz/keycloak/callback</redirect_uri>
  </provider>
</OIDC>

Consulte la documentación OIDC de Galaxy para obtener detalles completos sobre los proveedores compatibles (Keycloak, Google, Elixir AAI, etc.).


Instalación de Herramientas desde ToolShed

Una vez que Galaxy esté en funcionamiento y tenga acceso de administrador:

  1. Navegue a Admin → Instalar y Desinstalar en la interfaz de Galaxy.

  2. Busque en Galaxy ToolShed la herramienta que necesita (p. ej., clustalo, bwa, samtools).

  3. Haga clic en Instalar — Galaxy descarga el XML de la herramienta, los datos de prueba y resuelve las dependencias mediante Conda.

Las herramientas instaladas aparecen automáticamente en config/shed_tool_conf.xml y quedan disponibles para todos los usuarios.


Configuración en el lado de Galaxy (job_conf.yml)

runners:
  local:
    load: galaxy.jobs.runners.local:LocalJobRunner
    workers: 4

  pulsar_mq_remote:
    load: galaxy.jobs.runners.pulsar:PulsarMQJobRunner
    amqp_url: amqps://user:pass@broker-host:5671/vhost
    galaxy_url: https://galaxy.yourdomain.org
    amqp_acknowledge: true
    manager: _default_
    # Certificados TLS (si se usa TLS mutuo)
    amqp_connect_ssl_ca_certs: /path/to/ca-cert.pem
    amqp_connect_ssl_keyfile: /path/to/client-key.pem
    amqp_connect_ssl_certfile: /path/to/client-cert.pem
    amqp_connect_ssl_cert_reqs: cert_required
    amqp_consumer_timeout: 2

execution:
  default: local_dest
  environments:
    local_dest:
      runner: local

    pulsar_remote_dest:
      runner: pulsar_mq_remote
      jobs_directory: /var/opt/pulsar/staging
      dependency_resolution: remote
      rewrite_parameters: true
      # Para ejecución con Singularity/Apptainer:
      singularity_enabled: true
      singularity_cmd: /usr/bin/apptainer
      singularity_default_container_id: docker://quay.io/biocontainers/your-tool:tag
      require_container: true

  tools:
    - id: your_tool_id
      environment: pulsar_remote_dest

Documentación oficial de Galaxy

Repositorio de código

Contacto

Para cualquier duda durante el periodo de uso y validación de los componentes de la Implementación de Referencia de IMPaCT-Data (Marzo, 2025), podéis poneros en contacto con: