Установка 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.

results matching ""

    No results matching ""