Установка Apache Solr
Репозиторий Ubuntu 12.04 включает в себя пакет для Apache Solr, но довольно старую версию, поэтому мы установим последнюю версию Solr из источника. Первым шагом мы указываем источник:
- name: Download Solr.
get_url:
url: "http://apache.osuosl.org/lucene/solr/{{ solr_version }}/solr-{{ solr_version }}.tgz"
dest: "{{ download_dir }}/solr-{{ solr_version }}.tgz"
sha256sum: "{{ solr_sha256sum }}"
При загрузке файлов с удаленных серверов модуль get_url обеспечивает большую гибкость и удобство, чем команды wget или curl.
В get_url необходимо передать url-адрес (источник загружаемого файла) и dest (место, куда будет загружен файл). Если каталог передается в параметр dest, Ansible сохранит файл в него и при каждом вызове команды будет перезаписывать конечный файл. Чтобы избежать этого мы задаем имя скачиваемому файлу.
Мы также используем опционный параметр sha256sum; при загрузке файла или архива, который имеет критически важное значение для функциональности и безопасности приложения, рекомендуется проверить файл, чтобы убедиться в том, что это именно то, что вы ожидаете. sha256sum сравнивает хэш-данные в загруженном файле с заданным 256-битным хэш-кодом (используйте shasum -a 256 /path/to/file для получения sha256sum файла). Если контрольная сумма не соответствует предоставленному хэш-коду, Ansible завершит задачу и уничтожит загруженный (и недопустимый) файл.
- name: Expand Solr.
command: >
tar -C /tmp -xvzf {{ download_dir }}/solr-{{ solr_version }}.tgz
creates={{ download_dir }}/solr-{{ solr_version }}/dist/solr-{{ solr_version }}.war
- name: Copy Solr into place.
command: >
cp -r {{ download_dir }}/solr-{{ solr_version }} {{ solr_dir }}
creates={{ solr_dir }}/dist/solr-{{ solr_version }}.war
Нам нужно разархивировать архив с Архив Apache Solr, а затем скопировать его на место. Для этих действий мы используем утилиты tar и cp.
Следующая инструкция копирует каталоги и файлы, необходимые для запуска Apache Solr.
# Use shell so commands are passed in correctly.
- name: Copy Solr components into place.
shell: >
cp -r {{ item.src }} {{ item.dest }}
creates={{ item.creates }}
with_items:
# Solr example configuration and war file.
- src: "{{ solr_dir }}/example/webapps/solr.war"
dest: "{{ solr_dir }}/solr.war"
creates: "{{ solr_dir }}/solr.war"
- src: "{{ solr_dir }}/example/solr/*"
dest: "{{ solr_dir }}/"
creates: "{{ solr_dir }}/solr.xml"
# Solr log4j logging configuration.
- src: "{{ solr_dir }}/example/lib/ext/*"
dest: "/var/lib/tomcat7/shared/"
creates: "/var/lib/tomcat7/shared/log4j-1.2.16.jar"
- src: "{{ solr_dir }}/example/resources/log4j.properties"
dest: "/var/lib/tomcat7/shared/classes"
creates: "/var/lib/tomcat7/shared/classes/log4j.properties"
notify: restart tomcat
В этом коде нет ничего особенного. Здесь иллюстрируется использование комментариев внутри массива with_items.
- name: Ensure solr example directory is absent.
file:
path: "{{ solr_dir }}/example"
state: absent
- name: Set up solr data directory.
file:
path: "{{ solr_dir }}/data"
state: directory
owner: tomcat7
group: tomcat7
Последние версии Apache Solr рекурсивно просматривают все каталоги внутри {{ solr_dir }}
, загружая любую возможную конфигурацию поиска. Поскольку мы скопировали example для использования в качестве основного поиска сервера по умолчанию, Solr рассмотрит его в качестве дубликата одного из примеров и сообщит об ошибке. Поэтому мы используем модуль file с path к каталогу example, чтобы убедиться, что каталог исчез (state=absent
).
После удаления каталога example, мы установим каталог, в котором Solr будет хранить индексные данные. Так же необходимо, чтобы он принадлежал группе и пользователю tomcat7.
- name: Configure solrconfig.xml for new data directory.
lineinfile:
dest: "{{ solr_dir }}/collection1/conf/solrconfig.xml"
regexp: "^.*<dataDir.+$"
line: "<dataDir>${solr.data.dir:{{ solr_dir }}/data}</dataDir>"
state: present
В этом случае необходимо убедиться, что строка <dataDir>
в файле конфигурации поиска имеет определенное значение.
- name: Set permissions for solr home.
file:
path: "{{ solr_dir }}"
recurse: yes
owner: tomcat7
group: tomcat7
Чтобы правильно указать разрешения для всего содержимого {{ solr_dir }}
, мы используем модуль file с параметром recurse: yes
. Это аналог команды chown -R tomcat7:tomcat7 {{ solr_dir }}
.
- name: Add Catalina configuration for solr.
template:
src: templates/solr.xml.j2
dest: /etc/tomcat7/Catalina/localhost/solr.xml
owner: root
group: tomcat7
mode: 0644
notify: restart tomcat
Последняя инструкция копирует файл шаблона (solr.xml.j2) на удаленный хост, заменяя переменные с помощью синтаксиса Jinja2, и задает владельца и доступы файла, необходимые для Tomcat.
Перед выполнением задачи необходимо создать файл шаблона. Создайте директорию ‘templates’ в том же каталоге, что и ваш Apache Solr playbook, и в ней создайте файл с именем solr.xml.j2. Добавьте в него следующий код:
<?xml version="1.0" encoding="utf-8"?>
<Context docBase="{{ solr_dir }}/solr.war" debug="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="{{ solr_dir }}" override="true"/>
</Context>
Запустите playbook следующей командой:
ansible-playbook playbook.yml
Через несколько минут (в зависимости от скорости подключения к Интернету) вы сможете получить доступ к интерфейсу администратора Solr по адресу http://example.com:8080/solr (где "example.com" - имя хоста или IP-адрес сервера).
Примеры с кодом из этой части книги, вы найдете в репозитории GitHub, в разделе solr.