Kết nối Django với Elasticsearch sử dụng ssl (Cả hai đều chạy docker compose)

Copy tệp ca.crt

Vì cả django và elastic đều chạy ở docker compose riêng biệt, nên chúng ta phải sao chép tệp ca.crt vào docker của django.
Vậy lấy tệp ca.crt ở đâu? hãy xem bài: Cách sử dụng kết nối ssl với Elasticsearch chạy docker compose

Hãy sao chép tệp ca.crt vào thư mục gốc của django, và đảm bảo khi bạn build django tệp được sao chép vào container.

Lưu ý, nếu django không chạy trong docker, thì không cần sao chép tệp ca.crt vào django, chỉ cần trỏ đường dẫn đầy đủ là được

Tệp .env của django:

  • Thay thế user và pass của bạn, /app chính là thư mục làm việc mà bạn khai báo trong tệp Dockerfile của django: WORKDIR /app
  • es01 là tên của SERVICE, không sử dụng container_name.
  • Elastic và Django phải thuộc cùng một mạng, nếu không hãy sử dụng https://localhost:9200 hoặc elastic.domain.com
ELA_HOST=https://es01:9200
ELA_CA_CERTS='/app/ca.crt'
ELA_USER=user
ELA_PAS=pass

Tệp settings.py

ELASTICSEARCH_DSL = {
    'default': {
        'hosts': os.environ.get('ELA_HOST'),
        'ca_certs': os.environ.get('ELA_CA_CERTS'),
        'http_auth': (os.environ.get('ELA_USER'), os.environ.get('ELA_PAS')),
        'use_ssl': True,
        'timeout': 30,
    },
}

Nếu không sử dụng biến môi trường, bạn có thể thay thế trực tiếp.

Bây giờ chỉ cần build lại django là xong

cd django...
docker compose up -d --build