galaxyproject.galaxy
银河
这是一个用于安装和管理银河(Galaxy)服务器的Ansible角色。尽管名称容易混淆,但Galaxy与Ansible Galaxy没有关系。
想开始使用这个模块吗?查看我们的教程。
要求
该角色与 git 模块的依赖项相同。此外,还需要pip和Python virtualenv。可以通过在与该角色相同的play中设置pre-task轻松安装:
- 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_layout
变量选择一个布局。选择的布局将影响所需变量。
必需变量
使用除root-dir
之外的任何布局时:
galaxy_server_dir
:银河服务器代码将被安装(克隆)到的文件系统路径。
使用root-dir
时:
galaxy_root
:银河部署根目录的文件系统路径,银河服务器代码将在该目录的子目录中安装。
可选变量
galaxy_config_perms
选项控制银河配置文件的权限。该选项在角色的0.9.18版本中添加,默认值为0640
(用户可读写,组可读,其他用户无权限)。在旧版本中,该角色不控制配置文件的权限,因此请注意您的配置文件权限可能在0.9.18及之后发生变化。
布局控制
galaxy_layout
:可用的布局可以在vars/子目录中找到,可能的值包括:root-dir
:所有内容都按层级组织在一个根目录下的子目录中。opt
:符合FHS的布局,包括多个目录,如/opt
、/etc/opt
等。legacy-improved
:所有内容都在银河服务器目录下,类似于run.sh
。legacy
:在存在galaxy_layout
之前的默认布局,目前仍然是默认选项,以避免影响该角色的现有用法。custom
:合理的默认设置用于自定义布局,需要按照vars/layout-custom.yml中描述的定义几个变量。
对于新的银河部署,推荐使用root-dir
或opt
布局。
下面控制个别文件或子目录的选项仍然可以覆盖布局设置的默认值。
使用Gravity进行进程控制
该角色可以使用gravity管理银河服务。这是22.05及更高版本的默认设置。此外,已删除了galaxy_restart_handler_name
变量的支持。如果需要启用自定义重启处理程序,可以按照处理文档中所述,使用处理程序的"listen
"选项。该处理器应“监听”主题“restart galaxy
”。
银河主题
从22.01版本起,银河用户可以选用不同的UI主题。您可以使用galaxy_themes
变量定义主题,其语法与主题训练中描述的themes_conf.yml
文件相同。
galaxy_manage_themes
变量控制该角色是否管理主题配置,如果定义了galaxy_themes
,此选项会自动启用。如果您只想加载银河的示例主题而不定义自己的主题,您可以手动将galaxy_manage_themes
设置为true
。
银河子域
从22.01版本开始,银河可以根据主机(例如子域)提供不同的静态内容和主题。
通过设置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 (可选)
... (还有更多子域)
其中<subdomain-name-1>
必须与您的子域名称完全匹配。static
子目录是强制性的,而static
中的所有其他子目录是可选的。哪些子目录和文件被复制由static_galaxy_themes_keys
变量管理。
请确保设置galaxy_themes_welcome_url_prefix
,以便正确模板化您的欢迎页面。
必须按照defaults/main.yml中的示例设置galaxy_themes_subdomains
下的变量。如果已启用galaxy_manage_host_filters
变量,您还可以为每个单独的子域指定应显示的工具部分。
每个子域可以有自己的主题,该主题在galaxy_themes_subdomains
中子域条目的theme
键下定义。对于子域,该主题将是默认的,服务器上为用户选择的任何其他主题也将可用。如果未定义子域的theme
,则使用全局默认主题。在defaults/main.yml中提供了示例。
功能控制
若干变量控制该角色将执行哪些功能(默认情况下,除特别说明外均为yes
):
galaxy_create_user
(默认:no
):创建银河用户。以专用用户身份运行是最佳实践,但大多数生产银河实例会在目录服务中管理用户(例如 LDAP)。此选项对独立服务器有用。需要超级用户权限。galaxy_manage_paths
(默认:no
):创建并管理配置银河路径的所有权/权限。需要超级用户权限。galaxy_manage_clone
:从源代码库克隆银河并保持在指定版本(提交),并设置一个[virtualenv][virtualenv]以运行它。galaxy_manage_download
:从远程归档网址下载和解压银河,并设置一个[virtualenv][virtualenv]以运行它。galaxy_manage_existing
:接管已存在的银河目录,并设置一个[virtualenv][virtualenv]以运行它。galaxy_server_dir
必须指向已经包含银河源代码的路径。galaxy_manage_static_setup
:管理“静态”银河配置文件 - 即银河服务器本身不可修改的文件。至少,这是主要的银河配置文件galaxy.ini
。galaxy_manage_mutable_setup
:管理“可变”银河配置文件 - 即银河可以修改的文件(例如,安装来自银河工具商店的工具时)。galaxy_manage_database
:在新架构版本可用时升级数据库架构。galaxy_fetch_dependencies
:将银河相关模块拉取到银河虚拟环境中。galaxy_build_client
:构建银河客户端应用程序(Web UI)。galaxy_client_make_target
(默认:client-production-maps
):设置客户端构建类型。选项包括:client
、client-production
和client-production-maps
。有关详细信息,请查看银河客户端自述文件。galaxy_manage_systemd
(默认:no
):安装一个systemd服务单元,以随系统启动和停止银河(并使用systemctl
命令)。galaxy_manage_errordocs
(默认:no
):安装银河样式的413和502 HTTP错误文档供nginx使用。需要对nginx错误文档目录的写入权限。galaxy_manage_cleanup
(默认:no
):安装一个cron作业以清理银河框架和作业执行临时文件。需要在基于RedHat的系统上使用tmpwatch(8)
,或在基于Debian的系统上使用tmpreaper(8)
。有关详细信息,请查看defaults文件中的galaxy_tmpclean_*
变量。
银河代码和配置
配置银河及控制安装版本的选项。
galaxy_config
:银河配置文件(默认是galaxy.ini
)的内容由此变量控制。它是一个哈希的哈希(或字典),将被转换为配置文件。请参阅下面的示例Playbook以获取使用示例。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_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
):银河服务器上安装动态作业规则的目录。如果从默认值中更改,请确保该目录在银河的$PYTHONPATH
上(例如,在{{ galaxy_venv_dir }}/lib/python2.7/site-packages
中),并在job_conf.xml
中相应地配置动态规则插件。galaxy_repo
(默认:https://github.com/galaxyproject/galaxy.git
):应从中克隆银河的上游Git仓库。galaxy_commit_id
(默认:master
):银河应更新的提交ID、标签、分支或其他有效的Git引用。指定分支将更新到该分支上的最新提交。使用真实的提交ID是唯一明确将银河锁定到特定版本的方法。galaxy_force_checkout
(默认:no
):如果为yes
,则将放弃银河仓库中任何已修改的文件。galaxy_clone_depth
(默认:未设置):执行git clone时使用的深度。未指定时将克隆整个历史记录。
附加配置文件
一些在生产银河服务器中常用的可选配置文件可以从变量中配置:
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配置。
从银河21.05开始,这些功能的示例配置文件为XML格式,但也支持YAML格式,如下所示:
galaxy_dependency_resolvers:
- type: <XML标签名>
<XML属性名>: <XML属性值>
例如:
galaxy_dependency_resolvers:
- type: galaxy_packages
- type: conda
prefix: /srv/galaxy/conda
auto_init: true
auto_install: false
路径配置
用于控制某些银河组件在文件系统上放置位置的选项。
galaxy_venv_dir
(默认:<galaxy_server_dir>/.venv
):该角色将创建一个银河运行的[virtualenv][virtualenv],该变量控制虚拟环境放置的位置。galaxy_virtualenv_command
:(默认:virtualenv
):用于创建银河虚拟环境的命令。将其设置为pyvenv
以在银河>= 20.01中使用Python 3。galaxy_virtualenv_python
:(默认:$PATH
上第一个virtualenv
或python
命令的python命令):在创建虚拟环境时要使用的python二进制文件。对于银河<20.01,请使用python2.7(如果不是默认);对于银河>= 20.01,请使用python3.5
或更高版本。galaxy_config_dir
(默认:<galaxy_server_dir>
):将用于“静态”配置文件的目录。galaxy_mutable_config_dir
(默认:<galaxy_server_dir>
):将用于“可变”配置文件的目录,必须可由运行银河的用户写入。galaxy_mutable_data_dir
(默认:<galaxy_server_dir>/database
):将用于“可变”数据和缓存的目录,必须可由运行银河的用户写入。galaxy_config_file
(默认:<galaxy_config_dir>/galaxy.ini
):银河的主要配置文件。
用户管理和权限分离
galaxy_separate_privileges
(默认:no
):启用权限分离模式。galaxy_user
(默认:运行ansible的用户):银河运行的系统用户的名称。galaxy_privsep_user
(默认:root
):拥有银河代码、配置文件和虚拟环境(及其中依赖项)的系统用户的名称。galaxy_group
:银河用户和权限分离用户之间的共同组。如果设置且启用了galaxy_manage_paths
,则包含可能敏感信息的目录(例如银河配置文件)将以组可读但非世界可读的方式创建。否则,目录将被创建为世界可读。
访问方法控制
该角色需要根据启用的功能和与目标主机的连接方式以不同用户的身份执行任务。默认情况下,如果认为必要,角色将使用become
(即sudo)以适当用户的身份执行任务。修改此行为的讨论请参见默认文件。
systemd
systemd是在大多数现代Linux发行版(以及支持此角色的所有发行版)上的标准系统初始化守护进程。如果启用了galaxy_manage_systemd
,则将在systemd中配置一个galaxy
服务以运行银河。此服务将在系统启动时自动启动和配置。您可以使用systemctl
工具作为root
用户或使用sudo
控制银河服务:
# systemctl start galaxy # 启动银河
# systemctl reload galaxy # 尝试"优雅"重载
# systemctl restart galaxy # 执行硬重启
# systemctl stop galaxy # 停止银河
如果您在系统上没有root权限,可以通过设置galaxy_systemd_root
为false
使用systemd用户模式。将--user
添加到上述systemctl命令以在用户模式下与systemd进行交互:
错误文档
galaxy_errordocs_dir
:在此目录下安装银河样式的HTTP 413和502错误文档。502消息使用nginx服务器端包含,允许管理员在银河关闭时在~/maint
中创建自定义消息。nginx必须单独配置以提供这些错误文档。galaxy_errordocs_server_name
(默认:银河):用于在502页面上显示“galaxy_errdocs_server_name
无法访问”的消息。galaxy_errordocs_prefix
(默认:/error
):错误文档根目录的网页路径。
其他选项
galaxy_admin_email_to
:如果设置,在银河更新时向该地址发送电子邮件。假设在管理主机上正确配置邮件。galaxy_admin_email_from
:用以上述邮件地址发送的邮件的发件人地址。
依赖
无
示例Playbook
基本
使用所有默认选项在本地系统上安装银河:
- 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
最佳实践
根据当前生产服务器最佳实践安装银河:
- 银河代码(克隆)“干净”:没有配置或可变数据存放在克隆下
- 银河代码和静态配置文件进行权限分离:未被运行银河的用户拥有/可写
- 配置文件不可被所有人读取
- 使用PostgreSQL作为后端数据库
- 使用18.01+样式YAML配置
- 启动两个作业处理程序
- 当通过Ansible更新银河的代码或配置时,将使用
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:
# 听取选项
bind: "unix:{{ galaxy_mutable_config_dir }}/gunicorn.sock"
# 性能选项
workers: 2
# 将传递给gunicorn的其他选项
# 这允许设置“安全”头部,如REMOTE_USER(及其朋友)
# https://docs.gunicorn.org/en/stable/settings.html#forwarded-allow-ips
extra_args: '--forwarded-allow-ips="*"'
# 这允许Gunicorn在分叉之前完全启动银河,速度更快。
# 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
许可证
作者信息
该角色由以下人员编写并贡献: