Установка Elasticsearch 8 на Debian 13, 12, 11: полное руководство

Elasticsearch — это распределённая поисковая и аналитическая система с открытым исходным кодом (под лицензией Elastic License 2.0). Она используется для полнотекстового поиска, анализа логов, метрик и работы с большими объёмами данных в реальном времени. Вместе с Kibana и Logstash образует стек ELK (Elastic Stack).

В этом руководстве я покажу два способа установки Elasticsearch 8 на Debian:

  1. extrepo (рекомендуемый) — автоматическое управление репозиторием и GPG-ключом
  2. Ручная настройка — для опытных пользователей или автоматизации
МетодКаналВерсияОбновленияДля кого
extrepo
рекомендуемый
Официальный
репозиторий
Elastic
8.x (текущая
стабильная)
Через
apt upgrade
Большинство
пользователей
Ручная
настройка
Официальный
репозиторий
Elastic
8.x (текущая
стабильная)
Через
apt upgrade
Скрипты,
контроль над
файлами

⚠️ Важные особенности Elasticsearch 8:

  • Безопасность включена по умолчанию (TLS, пароль для суперпользователя elastic)
  • Встроенный JDK — не нужно устанавливать Java отдельно
  • Автогенерация пароля — сохраните его сразу, он показывается только один раз

Оглавление

Предварительные требования

Перед установкой убедитесь, что:

  • У вас есть доступ к интернету
  • Вы имеете права sudo (администратора)

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.

Ожидаемый вывод в терминале:

root

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.


Способ 1: Установка через extrepo (рекомендуемый)

extrepo — официальный инструмент Debian для управления сторонними репозиториями. Он сам скачает GPG-ключ и создаст файл репозитория.

Шаг 1: Установите extrepo

sudo apt update
sudo apt install -y extrepo

Что делает: Устанавливает пакет extrepo из официальных репозиториев Debian.

Шаг 2: Включите репозиторий Elastic 8

sudo extrepo enable elastic_8

Что делает: Активирует репозиторий Elasticsearch 8.x, который поддерживается extrepo.

Шаг 3: Обновите список пакетов

sudo apt update

Что делает: Обновляет список пакетов из всех репозиториев, включая только что добавленный Elastic.

Шаг 4: Проверьте, что пакет elasticsearch виден

apt-cache policy elasticsearch

Ожидаемый вывод:

elasticsearch:
  Installed: (none)
  Candidate: 8.19.9
  Version table:
     8.19.9 500
        500 https://artifacts.elastic.co/packages/8.x/apt stable/main amd64 Packages

(версия может отличаться, но важен сам факт наличия строки artifacts.elastic.co)


Способ 2: Ручная настройка репозитория

Этот способ даёт полный контроль над файлами репозитория.

Шаг 1: Установите необходимые утилиты

sudo apt update
sudo apt install -y ca-certificates curl gnupg

Что делает:

  • ca-certificates — сертификаты для HTTPS
  • curl — для скачивания ключа
  • gnupg — для работы с GPG-ключами

Шаг 2: Добавьте GPG-ключ Elastic

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch.gpg

Что делает:

  • curl -fsSL — скачивает ключ
  • | sudo gpg --dearmor — преобразует в бинарный формат (требуется APT)
  • -o /usr/share/keyrings/elasticsearch.gpg — сохраняет ключ в системную директорию

Шаг 3: Создайте файл репозитория

cat <<EOF | sudo tee /etc/apt/sources.list.d/elasticsearch.sources
Types: deb
URIs: https://artifacts.elastic.co/packages/8.x/apt
Suites: stable
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /usr/share/keyrings/elasticsearch.gpg
EOF

Что делает:

  • cat <<EOF ... EOF — создаёт многострочный текст
  • sudo tee — записывает его в файл с правами root

Параметры:

  • URIs — адрес репозитория Elastic
  • Suites: stable — ветка стабильных версий (единая для всех Debian)
  • Architectures — автоматически подставляет архитектуру системы (amd64, arm64)

Шаг 4: Обновите список пакетов

sudo apt update

Шаг 5: Проверьте, что пакет elasticsearch виден

apt-cache policy elasticsearch

Ожидаемый вывод: аналогично способу 1.


Установка Elasticsearch

После того как репозиторий добавлен (любым способом), установите Elasticsearch:

sudo apt install -y elasticsearch

Что делает: Устанавливает Elasticsearch и встроенный JDK (Java не нужна отдельно).

⚠️ Обратите внимание на вывод установки! Во время установки Elasticsearch автоматически генерирует пароль для пользователя elastic и показывает его на экране:

--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : YOUR_GENERATED_PASSWORD

Скопируйте и сохраните этот пароль в надёжном месте. Он показывается только один раз.


Запуск Elasticsearch

Шаг 1: Перезагрузите systemd (чтобы система узнала о новом сервисе)

sudo systemctl daemon-reload

Что делает: Перечитывает все unit-файлы systemd, включая только что созданный при установке Elasticsearch.

Шаг 2: Включите автозапуск и запустите сервис

sudo systemctl enable elasticsearch --now

Что делает:

  • enable — добавляет в автозагрузку
  • --now — запускает сервис немедленно

Шаг 3: Проверьте, что сервис работает

systemctl status elasticsearch --no-pager --lines=6

Ожидаемый вывод: Active: active (running)


Проверка установки

Способ 1: Через HTTPS API с использованием сертификата

Elasticsearch 8 по умолчанию использует HTTPS и самоподписанный сертификат. Для подключения нужно указать этот сертификат.

curl -s --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:YOUR_PASSWORD https://localhost:9200

Что делает:

  • --cacert — указывает путь к CA-сертификату Elasticsearch
  • -u elastic:YOUR_PASSWORD — аутентификация (замените на ваш пароль)

Ожидаемый вывод (JSON):

{
  "name" : "5ca2df161c1f",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "PVQPLIHURqm2c2c1cmZhIg",
  "version" : {
    "number" : "8.19.9",
    ...
  },
  "tagline" : "You Know, for Search"
}

Способ 2: Проверка здоровья кластера

curl -s --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:YOUR_PASSWORD https://localhost:9200/_cluster/health?pretty

Ожидаемый вывод: "status" : "green" или "status" : "yellow" (для одного узла — нормально).

Сброс пароля (если потеряли)

Если вы не сохранили пароль, показанный при установке, сбросьте его:

sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -b

Что делает: Генерирует новый пароль для пользователя elastic и выводит его в терминал. Флаг -b означает «batch mode» — без интерактивных вопросов.


Настройка Elasticsearch

Основные файлы конфигурации

ФайлНазначение
/etc/elasticsearch/elasticsearch.ymlОсновная конфигурация кластера, узлов, сети
/etc/elasticsearch/jvm.options.d/Настройки JVM (памяти)
/etc/elasticsearch/certs/Сертификаты TLS
/var/lib/elasticsearch/Данные (индексы)
/var/log/elasticsearch/Логи

Настройка имени кластера и узла

Отредактируйте основной конфигурационный файл:

sudo nano /etc/elasticsearch/elasticsearch.yml

Добавьте или раскомментируйте строки:

cluster.name: my-application
node.name: node-1

Что делает: Задаёт имя кластера и имя узла (полезно при нескольких серверах).

Настройка сетевого доступа

По умолчанию Elasticsearch слушает все интерфейсы (0.0.0.0) по HTTPS. Это безопасно (требуется аутентификация), но для тестовой среды можно ограничить localhost.

Для доступа только с localhost:

http.host: 127.0.0.1

Для доступа с других серверов (укажите IP вашего сервера):

network.host: 192.168.1.10

⚠️ Безопасность: Открывая доступ по сети, убедитесь, что файрвол разрешает доступ только доверенным клиентам.

Настройка JVM heap (памяти)

По умолчанию Elasticsearch автоматически определяет размер heap. Для ручной настройки создайте файл:

sudo nano /etc/elasticsearch/jvm.options.d/custom-heap.options

Добавьте строки (например, для 2 ГБ):

-Xms2g
-Xmx2g

Важные правила:

  • Значения Xms и Xmx должны быть одинаковыми
  • Heap не должен превышать 50% от оперативной памяти сервера
  • Для больших систем рекомендуется держать heap ниже 26-30 ГБ (из-за сжатых указателей)

Настройка vm.max_map_count (важно для продакшена)

Elasticsearch требует увеличения этого параметра ядра.

Проверьте текущее значение:

sysctl vm.max_map_count

Рекомендуемое значение: 1048576 или выше.

Если значение меньше — увеличьте:

sudo sysctl -w vm.max_map_count=1048576
echo "vm.max_map_count=1048576" | sudo tee -a /etc/sysctl.conf

Что делает: Изменяет параметр на лету и добавляет в конфигурацию для сохранения после перезагрузки.

Применение изменений

После любых изменений в конфигурации перезапустите Elasticsearch:

sudo systemctl restart elasticsearch

Настройка UFW (файрвола) — опционально

Если вы открыли доступ к Elasticsearch по сети и используете UFW, ограничьте доступ к порту 9200.

⚠️ Перед включением UFW убедитесь, что SSH разрешён, иначе потеряете доступ!

sudo ufw allow ssh
sudo ufw allow from 192.168.1.20 to any port 9200 proto tcp
sudo ufw enable

Что делает: Разрешает подключения к порту 9200 только с IP-адреса 192.168.1.20.

Проверьте правила:

sudo ufw status numbered

Решение типичных проблем

8.1 Ошибка: SSL certificate problem

Симптом: При попытке подключиться через curl возникает ошибка:

curl: (60) SSL certificate problem: self-signed certificate in certificate chain

Причина: Вы не указали сертификат, сгенерированный Elasticsearch.

Пошаговое решение:

Шаг 1: Используйте правильную команду с --cacert:

curl -s --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:YOUR_PASSWORD https://localhost:9200

Шаг 2: Если сертификата нет по указанному пути, проверьте его наличие:

ls -la /etc/elasticsearch/certs/

Шаг 3: Если сертификат повреждён или отсутствует, переустановите Elasticsearch (данные будут потеряны).
Важно! Перед переустановкой стоит сохранить пароль (если он был изменён) и при необходимости — бэкап данных.


8.2 Ошибка: curl cannot connect to port 9200

Симптом: curl сообщает:

curl: (7) Failed to connect to localhost port 9200 after 0 ms: Could not connect to server

Причина: Сервис Elasticsearch не запущен.

Пошаговое решение:

Шаг 1: Проверьте статус сервиса:

systemctl status elasticsearch

Шаг 2: Запустите сервис:

sudo systemctl start elasticsearch

Шаг 3: Проверьте логи, если запуск не удался:

sudo journalctl -u elasticsearch -n 30 --no-pager

Шаг 4: Ошибки в логах обычно указывают на проблему в elasticsearch.yml или недостаток памяти.


8.3 Ошибка: 401 Unauthorized

Симптом: При запросе к API возвращается 401 Unauthorized.

Причина: Неверный пароль пользователя elastic.

Пошаговое решение:

Шаг 1: Сбросьте пароль:

sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -b

Шаг 2: Скопируйте новый пароль из вывода команды.

Шаг 3: Повторите запрос с новым паролем.


8.4 Ошибка: Max virtual memory areas vm.max_map_count is too low

Симптом: В логах Elasticsearch (/var/log/elasticsearch/) появляется предупреждение или ошибка:

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

Причина: Значение vm.max_map_count в ядре меньше рекомендованного.

Пошаговое решение:

Шаг 1: Проверьте текущее значение:

sysctl vm.max_map_count

Шаг 2: Увеличьте значение:

sudo sysctl -w vm.max_map_count=1048576

Шаг 3: Сделайте изменение постоянным:

echo "vm.max_map_count=1048576" | sudo tee -a /etc/sysctl.conf

Шаг 4: Перезапустите Elasticsearch:

sudo systemctl restart elasticsearch

8.5 Ошибка: Not enough disk space

Симптом: Elasticsearch не запускается, в логах ошибка:

low disk watermark [85%] exceeded on ...

Причина: На диске заканчивается свободное место (Elasticsearch требует минимум 5-10% свободного пространства).

Пошаговое решение:

Шаг 1: Проверьте свободное место:

df -h

Шаг 2: Очистите старые логи:

sudo journalctl --vacuum-time=7d

Шаг 3: Удалите ненужные индексы через API:

curl -X DELETE --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:YOUR_PASSWORD https://localhost:9200/имя_индекса

Шаг 4: Если диск действительно заполнен — добавьте место или переместите данные Elasticsearch в другую директорию (изменив path.data в elasticsearch.yml).


Чек-лист: что проверить после установки

  • [ ] Репозиторий добавлен: apt-cache policy elasticsearch показывает версию из artifacts.elastic.co
  • [ ] Пакет установлен: dpkg -s elasticsearch | grep Statusinstall ok installed
  • [ ] Сервис запущен: systemctl status elasticsearchactive (running)
  • [ ] Пароль сохранён (или сброшен через elasticsearch-reset-password)
  • [ ] API отвечает: curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:пароль https://localhost:9200 возвращает JSON
  • [ ] Кластер здоров: curl ... /_cluster/health?pretty"status" : "green" или "yellow"
  • [ ] vm.max_map_count настроен: sysctl vm.max_map_count ≥ 1048576
  • [ ] Файрвол настроен (если сетевой доступ): sudo ufw status показывает правила для порта 9200

Удаление Elasticsearch

Шаг 1: Остановите и отключите сервис

sudo systemctl stop elasticsearch
sudo systemctl disable elasticsearch

Шаг 2: Удалите пакет

sudo apt remove --purge elasticsearch -y
sudo apt autoremove -y

Шаг 3: Удалите репозиторий (зависит от способа установки)

Если использовали extrepo:

sudo extrepo disable elastic_8
sudo rm -f /etc/apt/sources.list.d/extrepo_elastic_8.sources

Если добавляли репозиторий вручную:

sudo rm -f /etc/apt/sources.list.d/elasticsearch.sources
sudo rm -f /usr/share/keyrings/elasticsearch.gpg

Обновите список пакетов:

sudo apt update

Шаг 4: Удалите данные и логи (опционально — безвозвратно!)

⚠️ Внимание: Удаляет все индексы, данные и логи навсегда.

sudo rm -rf /var/lib/elasticsearch
sudo rm -rf /var/log/elasticsearch

Шаг 5: Проверьте удаление

dpkg -s elasticsearch

Ожидаемый вывод: dpkg-query: package 'elasticsearch' is not installed


Часто задаваемые вопросы (FAQ)

Вопрос: Можно ли установить Elasticsearch без встроенного JDK (использовать системную Java)?
Ответ: Можно, но не рекомендуется. Elasticsearch поставляется с проверенной версией JDK. Если очень нужно, можно удалить встроенный JDK и установить свой, но поддержка не гарантируется.

Вопрос: Elasticsearch работает на ARM-процессорах (Raspberry Pi)?
Ответ: Да, начиная с версии 8.x, Elasticsearch имеет сборки для arm64. Убедитесь, что архитектура определилась правильно (команда dpkg --print-architecture должна показать arm64).

Вопрос: Как подключиться к Elasticsearch с другого компьютера?
Ответ:

  1. В elasticsearch.yml раскомментируйте или добавьте network.host: 0.0.0.0 (или конкретный IP сервера)
  2. Перезапустите Elasticsearch
  3. Используйте полный URL: https://IP_сервера:9200
  4. При подключении используйте --cacert (скопируйте сертификат на клиентскую машину) или отключите проверку (небезопасно).

Вопрос: Нужно ли отключать security для тестов?
Ответ: Не рекомендуется. В Elasticsearch 8 security включена по умолчанию, и её отключение делает кластер уязвимым. Лучше сбросить пароль, если забыли.

Вопрос: Как обновить Elasticsearch до новой версии?
Ответ: Просто выполните sudo apt update && sudo apt upgrade elasticsearch -y. Конфигурации и данные сохранятся.


Заключение

Теперь Elasticsearch 8 установлен на вашем Debian с включённой безопасностью по умолчанию. Вы можете использовать его для:

  • Полнотекстового поиска в приложениях
  • Анализа логов (вместе с Logstash)
  • Визуализации данных (с Kibana)

Что дальше?

  • Изучите официальную документацию Elasticsearch
  • Установите Kibana для визуализации данных
  • Настройте Logstash для централизованного сбора логов
  • Защитите Elasticsearch с помощью UFW или Nginx как обратного прокси