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_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/ansible-galaxy