galaxy

Галактика

Это Ansible роль для установки и управления серверами Galaxy. Несмотря на путаницу в названиях, Galaxy не имеет никакого отношения к Ansible Galaxy.

Хотите начать работать с этим модулем? Ознакомьтесь с нашим Учебником

Требования

Эта роль имеет такие же зависимости, как и модуль git. Кроме того, необходимы pip и Python virtualenv. Их легко установить через предварительное задание в том же плейбуке, что и эта роль:

- hosts: galaxyservers
  pre_tasks:
    - name: Установка зависимостей
      apt:
        name: "{{ item }}"
      become: yes
      when: ansible_os_family == 'Debian'
      with_items:
        - git
        - python-pip
        - python-virtualenv
    - name: Установка зависимостей
      yum:
        name: "{{ item }}"
      become: yes
      when: ansible_os_family == 'RedHat'
      with_items:
        - git
        - python-virtualenv
  roles:
    - galaxyproject.galaxy

Если ваш исполняемый файл git не находится в $PATH, вы можете указать его местоположение с помощью переменной git_executable. Аналогично для исполняемого файла virtualenv и соответствующей переменной galaxy_virtualenv_command.

Переменные роли

Не все переменные перечислены или объяснены подробно. Для получения дополнительной информации о менее часто используемых переменных см. файл по умолчанию.

Многие переменные управляют тем, где располагаются определенные файлы и куда Galaxy записывает данные. Чтобы упростить конфигурацию, вы можете выбрать макет с помощью переменной galaxy_layout. Выбор макета влияет на необходимые переменные.

Обязательные переменные

Если используется любой макет, кроме root-dir:

  • galaxy_server_dir: Путь в файловой системе, где будет установлено (клонировано) серверное код Galaxy.

Если используется root-dir:

  • galaxy_root: Путь в файловой системе к корню развертывания Galaxy, код сервера Galaxy будет установлен в подкаталог этой директории.

Необязательные переменные

Параметр galaxy_config_perms управляет правами доступа, которые будут установлены для файлов конфигурации Galaxy. Эта опция была добавлена в версии 0.9.18 роли, а значение по умолчанию - 0640 (пользователь имеет право на чтение и запись, группа - только на чтение, другие пользователи - без прав). В старых версиях роль не контролировала права доступа к файлам конфигурации, поэтому имейте в виду, что права доступа к вашим файлам конфигурации могут измениться начиная с версии 0.9.18 и позже.

Управление макетом

  • galaxy_layout: доступные макеты можно найти в подкаталоге vars/, возможные значения включают:
    • root-dir: Всё организовано в подкаталогах под одним корневым каталогом.
    • opt: Макет, соответствующий FHS, в нескольких директориях, таких как /opt, /etc/opt и т.д.
    • legacy-improved: Всё под директорию сервера Galaxy, как в run.sh.
    • legacy: Стандартный макет до появления galaxy_layout и в настоящее время является стандартным, чтобы не нарушать существующее использование этой роли.
    • custom: Разумные параметры по умолчанию для пользовательских макетов, требует установки нескольких переменных, как описано в vars/layout-custom.yml.

Рекомендуется использовать либо макет root-dir, либо opt для новых развертываний Galaxy.

Опции ниже, которые контролируют размещение отдельных файлов или подкаталогов, могут переопределить значения по умолчанию, установленные макетом.

Управление процессами с Gravity

Роль может управлять службой Galaxy с помощью gravity. Это является стандартом для Galaxy 22.05 и позже. Кроме того, поддержка переменной galaxy_restart_handler_name была удалена. Если вам нужно включить собственный обработчик перезапуска, вы можете использовать опцию "listen" для обработчика, как объясняется в документации по обработчикам. Обработчик должен "слушать" тему "restart galaxy".

Темы Galaxy

С версии 22.01 пользователи Galaxy могут выбирать между различными темами внешнего интерфейса themes. Вы можете определить темы, используя переменную galaxy_themes, синтаксис которой такой же, как в файле themes_conf.yml, описанном в учебнике по темам.

Переменная galaxy_manage_themes управляет тем, управляет ли роль конфигурациями тем и автоматически включена, если galaxy_themes определена. Если вы просто хотите загрузить пример тем из themes_conf.yml.sample без определения своих, вы можете вручную установить galaxy_manage_themes в true.

Поддомены Galaxy

С версии 22.01 Galaxy может обслуживать различный статический контент и темы для каждого хоста (например, поддомена).

Установив galaxy_manage_subdomain_static: yes, вы включите создание статических каталогов и конфигурацию для каждого хоста.

Чтобы использовать эту функцию, вам нужно создать следующую структуру каталогов в папке files/ (настраивается с помощью переменной galaxy_themes_ansible_file_path):

files/galaxy/static
├──<subdomain-name-1>
│   └── static
│       ├── dist (опционально)
│       │   └── some-image.png
│       ├── images (опционально)
│       │   └── more-content.jpg
│       └── welcome.html (опционально, в противном случае будет отображён galaxyproject.org.)
├── <subdomain-name-2>                            
│   └── static
│       ├── dist (опционально)
│       │   ├── another-static-image.svg
│       │   └── more-static-content-2.svg
│       └── welcome.html (опционально)
... (и множество других поддоменов)

Где должен точно соответствовать имени вашего поддомена. Подкаталог static является обязательным, а все подкаталоги внутри static являются опциональными. Какие подкаталоги и файлы копируются, управляется переменной static_galaxy_themes_keys.

Также убедитесь, что вы установили galaxy_themes_welcome_url_prefix, чтобы ваши страницы приветствия были правильно оформлены.

Обязательно установите переменные в galaxy_themes_subdomains, как показано в примере в defaults/main.yml. Если вы включили переменную galaxy_manage_host_filters, вы также можете указать разделы инструментов, которые должны отображаться для каждого отдельного поддомена.

Каждому поддомену может быть присвоена своя тема, которая определяется под ключом theme в записи поддомена в galaxy_themes_subdomains. Эта тема будет являться стандартной для поддомена, и любые другие темы, определенные для сервера, также будут доступны для выбора пользователю. Если тема поддомена не определена, используется глобальный стандарт. Пример предоставлен в defaults/main.yml.

Управление функциями

Несколько переменных контролируют, какие функции будет выполнять эта роль (все по умолчанию равны yes, если не указано иное):

  • galaxy_create_user (по умолчанию: no): Создать пользователя Galaxy. Работать от имени отдельного пользователя является хорошей практикой, но большинство производственных экземпляров Galaxy, отправляющих задания в кластер, будут управлять пользователями в службе каталогов (например, LDAP). Эта опция полезна для автономных серверов. Требуются привилегии суперпользователя.
  • galaxy_manage_paths (по умолчанию: no): Создать и управлять правами собственности/доступа для настроенных путей Galaxy. Требуются привилегии суперпользователя.
  • galaxy_manage_clone: Клонировать Galaxy из исходного репозитория и поддерживать его на указанной версии (коммите), а также настроить [virtualenv][virtualenv], из которого его можно запускать.
  • galaxy_manage_download: Скачать и распаковать Galaxy из удаленного архива, а также настроить [virtualenv][virtualenv], из которого его можно запускать.
  • galaxy_manage_existing: Взять под контроль существующий каталог Galaxy, а также настроить [virtualenv][virtualenv], из которого его можно запускать. galaxy_server_dir должен указывать на путь, который уже содержит исходный код Galaxy.
  • galaxy_manage_static_setup: Управлять "статическими" файлами конфигурации Galaxy - теми, которые не могут быть изменены самим сервером Galaxy. Минимально это основной файл конфигурации Galaxy, galaxy.ini.
  • galaxy_manage_mutable_setup: Управлять "изменяемыми" файлами конфигурации Galaxy - теми, которые могут быть изменены Galaxy (например, когда вы устанавливаете инструменты из Galaxy Tool Shed).
  • galaxy_manage_database: Обновлять схему базы данных по мере необходимости, когда становятся доступны новые версии схемы.
  • galaxy_fetch_dependencies: Загружать модули, зависимые от Galaxy, в виртуальную среду Galaxy.
  • galaxy_build_client: Собрать клиентское приложение Galaxy (веб-интерфейс).
  • galaxy_client_make_target (по умолчанию: client-production-maps): Установить тип сборки клиента. Опции включают: client, client-production и client-production-maps. См. описание клиента Galaxy для деталей.
  • galaxy_manage_systemd (по умолчанию: no): Установить юнит службы systemd для запуска и остановки Galaxy вместе с системой (и используя команду systemctl).
  • galaxy_manage_errordocs (по умолчанию: no): Установить стилизованные документы об ошибках Galaxy 413 и 502 для nginx. Требуются права на запись в каталог документов ошибок nginx.
  • galaxy_manage_cleanup (по умолчанию: no): Установить задание cron для очистки временных файлов фреймворка Galaxy и выполнения заданий. Требуется tmpwatch(8) для систем на базе RedHat или tmpreaper(8) для систем на базе Debian. См. переменные galaxy_tmpclean_* в файле по умолчанию для деталей.

Код и конфигурация Galaxy

Опции для настройки Galaxy и управления какой версией будет установлена.

  • galaxy_config: Содержимое файла конфигурации Galaxy (galaxy.ini по умолчанию) контролируется этой переменной. Это хэш хэшей (или словарей), который будет переведен в файл конфигурации. См. Пример плейбуков ниже для использования.
  • galaxy_config_files: Список хэшей (с ключами src и dest) файлов для копирования с управляющей машины. Например, чтобы установить назначения заданий, вы можете использовать переменную galaxy_config_dir, за которой следует имя файла как dest, например dest: "{{ galaxy_config_dir }}/job_conf.xml". Убедитесь, что добавить правильную настройку в galaxy_config для каждого добавленного здесь файла (то есть если добавляете job_conf.xml, убедитесь, что galaxy_config.galaxy.job_config_file указывает на этот файл).
  • galaxy_config_templates: Список хэшей (с ключами src и dest) шаблонов для заполнения с управляющей машины.
  • galaxy_local_tools: Список локальных файлов инструментов или каталогов для копирования с управляющей машины, относительно galaxy_local_tools_src_dir (по умолчанию: files/galaxy/tools в плейбуке). Элементы списка могут быть либо именем файла инструмента, либо словарем с ключами file, section_name, и, при желании, section_id. Если section_name не указан, инструменты будут размещены в разделе с именем Локальные инструменты.
  • galaxy_local_tools_dir: Каталог на сервере Galaxy, где будут установлены локальные инструменты.
  • galaxy_dynamic_job_rules: Список динамических правил работы, которые нужно скопировать с управляющей машины, относительно galaxy_dynamic_job_rules_src_dir (по умолчанию: files/galaxy/dynamic_job_rules в плейбуке).
  • galaxy_dynamic_job_rules_dir (по умолчанию: {{ galaxy_server_dir }}/lib/galaxy/jobs/rules): Каталог на сервере Galaxy, где будут установлены динамические правила работы. Если измените по умолчанию, убедитесь, что каталог находится в $PYTHONPATH Galaxy (например, в {{ galaxy_venv_dir }}/lib/python2.7/site-packages) и соответствующим образом настройте плагин динамических правил в job_conf.xml.
  • galaxy_repo (по умолчанию: https://github.com/galaxyproject/galaxy.git): Исходный Git-репозиторий, из которого Galaxy должен быть клонирован.
  • galaxy_commit_id (по умолчанию: master): Commit ID, тег, ветка або другая действительная ссылка Git, к которой Galaxy должен обновиться. Указание ветки обновит до последнего коммита в этой ветке. Использование реального commit ID - единственный способ явно заблокировать Galaxy на конкретной версии.
  • galaxy_force_checkout (по умолчанию: no): Если yes, любые измененные файлы в репозитории Galaxy будут отменены.
  • galaxy_clone_depth (по умолчанию: не задано): Глубина, используемая при выполнении git clone. Оставьте незаданный, чтобы клонировать всю историю.

Дополнительные конфигурационные файлы

Некоторые дополнительные конфигурационные файлы, обычно используемые в производственных серверах Galaxy, могут быть настроены с помощью переменных:

С версии Galaxy 21.05 пример конфигурационных файлов для этих функций представлен в XML, но поддерживается также YAML:

galaxy_dependency_resolvers:
  - type: <XML tag name>
    <XML attribute name>: <XML attribute value>

Например:

galaxy_dependency_resolvers:
  - type: galaxy_packages
  - type: conda
    prefix: /srv/galaxy/conda
    auto_init: true
    auto_install: false

Конфигурация путей

Опции для управления размещением определенных компонентов Galaxy в файловой системе.

  • galaxy_venv_dir (по умолчанию: <galaxy_server_dir>/.venv): Роль создаст [virtualenv][virtualenv], из которого будет работать Galaxy, эта переменная определяет, где будет размещен virtualenv.
  • galaxy_virtualenv_command: (по умолчанию: virtualenv): Команда, используемая для создания виртуального окружения Galaxy. Установите на pyvenv, чтобы использовать Python 3 в Galaxy >= 20.01.
  • galaxy_virtualenv_python: (по умолчанию: Python из первой команды virtualenv или python, найденной в $PATH): Двоичный файл python, который будет использоваться при создании virtualenv. Для Galaxy < 20.01 используйте python2.7 (если он не является стандартным), для Galaxy >= 20.01 используйте python3.5 или выше.
  • galaxy_config_dir (по умолчанию: <galaxy_server_dir>): Каталог, который будет использоваться для "статических" файлов конфигурации.
  • galaxy_mutable_config_dir (по умолчанию: <galaxy_server_dir>): Каталог, который будет использоваться для "изменяемых" файлов конфигурации, должен быть доступен для записи пользователем, запускающим Galaxy.
  • galaxy_mutable_data_dir (по умолчанию: <galaxy_server_dir>/database): Каталог, который будет использоваться для "изменяемых" данных и кэшей, должен быть доступен для записи пользователем, запускающим Galaxy.
  • galaxy_config_file (по умолчанию: <galaxy_config_dir>/galaxy.ini): Основной файл конфигурации Galaxy.

Управление пользователями и разделение привилегий

  • galaxy_separate_privileges (по умолчанию: no): Включить режим разделения привилегий.
  • galaxy_user (по умолчанию: пользователь, запускающий ansible): Имя системного пользователя, от имени которого работает Galaxy.
  • galaxy_privsep_user (по умолчанию: root): Имя системного пользователя, который владеет кодом Galaxy, конфигурационными файлами и virtualenv (и зависимостями в нем).
  • galaxy_group: Общая группа между пользователем Galaxy и пользователем с разделением привилегий. Если указано, а galaxy_manage_paths включена, то каталоги, содержащие потенциально чувствительную информацию, такие как файл конфигурации Galaxy, будут созданы с доступом группы, но не для всех. В противном случае каталоги создаются с общим доступом.

Управление методом доступа

Роль должна выполнять задачи от имени разных пользователей в зависимости от включенных вами функций и способа подключения к целевому хосту. По умолчанию роль будет использовать become (т.е. sudo), чтобы выполнять задачи от имени соответствующего пользователя, если это необходимо. Переопределение этого поведения обсуждается в файле по умолчанию.

systemd

systemd является стандартным демоном инициализации системы на большинстве современных версий Linux (и на всех поддерживаемых этой ролью). Если galaxy_manage_systemd включен, будет настроена служба galaxy в systemd для запуска Galaxy. Эта служба будет автоматически запущена и настроена для запуска при загрузке вашей системы. Вы можете управлять службой Galaxy с помощью утилиты systemctl от имени пользователя root или с использованием sudo:

# systemctl start galaxy     # старт galaxy
# systemctl reload galaxy    # попытка "гладкой" перезагрузки
# systemctl restart galaxy    # выполнить жесткий перезапуск
# systemctl stop galaxy       # остановить galaxy

Вы можете использовать режим пользователя systemd, если у вас нет привилегий root на вашей системе, установив galaxy_systemd_root в false. Добавьте --user к командам systemctl выше, чтобы взаимодействовать с systemd в режиме пользователя:

Документы об ошибках

  • galaxy_errordocs_dir: Установить стилизованные HTTP 413 и 502 документа об ошибках Galaxy в этот каталог. Сообщение 502 использует серверные включения nginx, позволяя администраторам создавать индивидуальное сообщение в ~/maint во время простоя Galaxy. Nginx должен быть отдельно настроен для обслуживания этих документов об ошибках.
  • galaxy_errordocs_server_name (по умолчанию: Galaxy): используется для отображения сообщения "galaxy_errdocs_server_name недоступен" на странице 502.
  • galaxy_errordocs_prefix (по умолчанию: /error): Путь на стороне веба к корню документа об ошибках.

Разные опции

  • galaxy_admin_email_to: Если указано, отправьте электронное письмо на этот адрес, когда Galaxy будет обновлен. Предполагает, что электронная почта правильно настроена на управляемом хосте.
  • galaxy_admin_email_from: Адрес, с которого будет отправлено вышеупомянутое электронное письмо.

Зависимости

Нет

Пример плейбука

Основной

Установите Galaxy на своем локальном компьютере со всеми параметрами по умолчанию:

- hosts: localhost
  vars:
    galaxy_server_dir: /srv/galaxy
  connection: local
  roles:
     - galaxyproject.galaxy

Если ваша версия Ansible >= 2.10.4, то когда вы запускаете ansible-playbook playbook.yml, вы должны указать дополнительный аргумент -u $USER, в противном случае вы получите ошибку.

После установки вы можете начать с:

$ cd /srv/galaxy
$ sh run.sh

Лучшие практики

Установите Galaxy в соответствии с текущими лучшими практиками производственного сервера:

  • Код Galaxy (клонирование) «чистый»: никаких конфигураций или изменяемых данных нет под клоном
  • Код Galaxy и статические конфигурации разделены по привилегиям: не принадлежат/не доступны для записи пользователем, который запускает Galaxy
  • Файлы конфигурации не имеют доступа для всех
  • В качестве базы данных используется PostgreSQL
  • Используется YAML-конфигурация стиля 18.01+
  • Запускаются два мюлла для обработки заданий
  • Когда код Galaxy или конфигурации обновляются Ansible, Galaxy будет перезапущен с использованием galaxyctl или systemctl restart galaxy-*
- hosts: galaxyservers
  vars:
    galaxy_config_style: yaml
    galaxy_layout: root-dir
    galaxy_root: /srv/galaxy
    galaxy_commit_id: release_23.0
    galaxy_separate_privileges: yes
    galaxy_force_checkout: true
    galaxy_create_user: yes
    galaxy_manage_paths: yes
    galaxy_manage_systemd: yes
    galaxy_user: galaxy
    galaxy_privsep_user: gxpriv
    galaxy_group: galaxy
    postgresql_objects_users:
      - name: galaxy
        password: null
    postgresql_objects_databases:
      - name: galaxy
        owner: galaxy
    galaxy_config:
      gravity:
        process_manager: systemd
        galaxy_root: "{{ galaxy_root }}/server"
        galaxy_user: "{{ galaxy_user_name }}"
        virtualenv: "{{ galaxy_venv_dir }}"
        gunicorn:
          # listening options
          bind: "unix:{{ galaxy_mutable_config_dir }}/gunicorn.sock"
          # performance options
          workers: 2
          # Другие опции, которые будут переданы gunicorn
          # Это позволяет установить 'безопасные' заголовки, такие как REMOTE_USER (и его подобные)
          # https://docs.gunicorn.org/en/stable/settings.html#forwarded-allow-ips
          extra_args: '--forwarded-allow-ips="*"'
          # Это позволяет Gunicorn начать Galaxy полностью перед разветвлением, что быстрее.
          # https://docs.gunicorn.org/en/stable/settings.html#preload-app
          preload: true
        celery:
          concurrency: 2
          enable_beat: true
          enable: true
          queues: celery,galaxy.internal,galaxy.external
          pool: threads
          memory_limit: 2
          loglevel: DEBUG
        handlers:
          handler:
            processes: 2
            pools:
              - job-handlers
              - workflow-schedulers
      galaxy:
        database_connection: "postgresql:///galaxy?host=/var/run/postgresql"
  pre_tasks:
    - name: Установка зависимостей
      apt:
        name:
          - sudo
          - git
          - make
          - python3-venv
          - python3-setuptools
          - python3-dev
          - python3-psycopg2
          - gcc
          - acl
          - gnutls-bin
          - libmagic-dev
      become: yes
  roles:
    # Установите с:
    #   % ansible-galaxy install galaxyproject.postgresql
    - role: galaxyproject.postgresql
      become: yes
    # Установите с:
    #   % ansible-galaxy install natefoo.postgresql_objects
    - role: galaxyproject.postgresql_objects
      become: yes
      become_user: postgres
    - role: galaxyproject.galaxy

Лицензия

Academic Free License ("AFL") v. 3.0

Информация об авторе

Эта роль была написана и внесена следующими людьми:

О проекте

Install and manage a Galaxy (http://galaxyproject.org/) server.

Установить
ansible-galaxy install galaxyproject/ansible-galaxy
Лицензия
Unknown
Загрузки
21550
Владелец
Galaxy is an open, web-based platform for data-intensive research.