安裝 Docker 和 Docker Compose

確保系統中已安裝 Docker 和 Docker Compose。在大多數 Linux 發行版中,可通過包管理器直接安裝:

sudo apt-get update && sudo apt-get install docker.io docker-compose

安裝後啓動 Docker 服務並加入開機自啓:

sudo systemctl enable --now docker

創建 Elasticsearch 配置文件

在項目目錄中創建 docker-compose.yml 文件,配置 Elasticsearch 容器並啓用安全特性(X-Pack):

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - ELASTIC_PASSWORD=your_strong_password_here  # 設置默認用户 elastic 的密碼
      - xpack.security.enabled=true
    volumes:
      - es_data:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - elastic_net
volumes:
 networks:
  elastic_net:

啓動 Elasticsearch 容器

運行以下命令啓動容器:

docker-compose up -d

等待容器初始化完成後,驗證是否啓用安全認證:

curl -u elastic:your_strong_password_here http://localhost:9200

返回包含集羣信息的 JSON 即表示認證成功。

創建其他用户和角色

進入容器內部使用 elasticsearch-users 工具創建新用户:

docker exec -it <container_id> /bin/bash

在容器內執行以下命令創建用户(例如 admin):

elasticsearch-users useradd admin -p admin_password -r superuser

退出容器後,可通過 API 驗證新用户權限:

curl -u admin:admin_password http://localhost:9200/_security/_authenticate

配置客户端連接

在應用程序中連接時需包含認證信息。例如,使用 curl 時添加 -u 參數,或在編程客户端中配置憑證:

from elasticsearch import Elasticsearch
es = Elasticsearch(
    hosts=["http://localhost:9200"],
    basic_auth=("elastic", "your_strong_password_here")
)

持久化數據與備份

確保數據卷(es_data)已掛載,避免容器重啓後數據丟失。定期備份可通過 Elasticsearch 快照 API 實現:

curl -u elastic:your_strong_password_here -X PUT "localhost:9200/_snapshot/my_backup?pretty" -H 'Content-Type: application/json' -d'
{
  "type": "fs",
  "settings": {
    "location": "/usr/share/elasticsearch/snapshots"
  }
}
'

日誌與監控

通過 Docker 日誌查看運行狀態:

docker logs -f <container_id>

啓用 X-Pack 監控後,訪問 http://localhost:9200/_cat/nodes?v 可查看節點健康狀態。

防火牆與網絡安全

若需對外開放端口,配置防火牆規則僅允許可信 IP 訪問 9200 端口:

sudo ufw allow from 192.168.1.0/24 to any port 9200

通過以上步驟,可在 Linux 下快速部署帶認證的 Elasticsearch 容器,兼顧安全性與便捷性。