galaxyproject.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, где будут установлены динамические правила работы. Если измените по умолчанию, убедитесь, что каталог находится в$PYTHONPATHGalaxy (например, в{{ 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_dependency_resolvers: Заполнить файлdependency_resolvers_conf.yml. См. пример XML конфигурации для параметров.galaxy_container_resolvers: Заполнить файлcontainer_resolvers_conf.yml. См. пример XML конфигурации для параметров.galaxy_job_metrics_plugins: Заполнить файлjob_metrics_conf.yml. См. пример XML конфигурации для параметров.
С версии 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
Информация об авторе
Эта роль была написана и внесена следующими людьми:
ansible-galaxy install galaxyproject.galaxy