[PYTHON] Lancez un simple service de recherche protégé par mot de passe en 5 minutes

TL; DR (Résumé pour les personnes expérimentées)

J'ai créé docker-compose.yml qui est une collection des conteneurs suivants:

--Elasticsearch: moteur de recherche --Kibana: écran de recherche simple --nginx: proxy inverse (authentification légère de l'utilisateur par ID / PW) --Python3: pour travailler avec le traitement et l'indexation des données

Contexte

Vous voudrez peut-être rechercher des données texte dans votre maison, n'est-ce pas?

La fonction de recherche elle-même peut être fournie par Elasticsearch.

--Je veux un écran de recherche simple pour qu'il puisse être utilisé avec des non programmeurs (Kibana)

Dans de nombreux cas, des demandes telles que ... se rencontrent.

Nous avons créé un environnement pour répondre aux exigences ci-dessus. [^ 1]

[^ 1]: l'authentification de base peut être un peu plus astucieuse si vous utilisez Elasticsearch Security Cela peut être possible. De plus, la méthode présentée ci-dessous utilise une connexion http, et elle est robuste en termes de sécurité, alors pensez à la convertir en https en vous référant à cet article: https://qiita.com/hsano/items/3b4fb372c4dec0cabc08

Ce que j'ai fait

Vous pouvez tous les trouver dans ce référentiel: https://github.com/chopstickexe/es-kibana-nginx-python

Le contenu principal est le suivant:

--docker-compose.yml: fichier de configuration pour le lancement et la liaison de 4 conteneurs d'Elasticsearch, Kibana, nginx, Python3 ensemble --index.py: exemple de code pour enregistrer (indexer) des données dans Elasticsearch dans un conteneur Python3 --data / sample.csv: exemples de données enregistrées dans index.py (comme vous pouvez le voir, il y a 4 impressions personnelles du travail de Nolan)

Présentation de Docker Compose

Avec ce docker-compose, l'environnement suivant sera lancé: IMG_0028.jpg

--Bien que quatre conteneurs d'Elasticsearch, Kibana, nginx et Python soient lancés, nginx est le seul conteneur dont le port est mappé sur l'hôte (l'accès HTTP est possible depuis l'extérieur de l'hôte). Par conséquent, Elasticsearch et Kibana ne sont accessibles que par ceux qui connaissent l'ID / PW défini dans nginx.

[^ 2]: Utilisez également l'extension VSCode's Remote Containers pour vous connecter à un conteneur et éditer / exécuter le code. Est également possible.

Comment bouger

L'explication ci-dessous est basée sur Ubuntu 18.04, mais si l'environnement est tel que docker-compose et le serveur HTTP Apache (plus précisément, la commande htpasswd) peuvent être exécutés, cela fonctionnera sur CentOS, Mac et Windows.

Préparation 1. Installation de docker-compose

Tout d'abord, préparez un environnement dans lequel docker-compose est installé. Référence

Préparation 2. Installation du serveur HTTP Apache

Tout d'abord, installez apache2-utils (un package contenant un serveur HTTP).

$ sudo apt -y install apache2-utils

1. Cloner dans le référentiel Git

Clonez le référentiel ci-dessus chopstickexe / es-kibana-nginx-python.

2. Préparation de l'identifiant de connexion et du mot de passe

Ensuite, pensez à un identifiant et un mot de passe pour vous connecter à Kibana (écran de recherche) qui sera lancé par la suite. (Dans l'exemple ci-dessous, connectez-vous avec ID = admin)

Exécutez la commande htpasswd comme suit pour créer le fichier (répertoire de clonage) / htpasswd / localhost avec le mot de passe défini.

$ cd /path/to/repo
$ mkdir htpasswd && cd htpasswd
$ htpasswd -c localhost admin 
#Entrez votre mot de passe ici

3. (Facultatif) Modifiez docker-compose.yml

Si vous souhaitez accéder à Kibana à partir d'une machine autre que l'hôte via un navigateur Web

Ouvrez docker-compose.yml dans le répertoire cloné et ouvrez le [paramètre VIRTUAL_HOST du conteneur Kibana](https://github.com/chopstickexe/es-kibana-nginx-python/blob/master/docker-compose.yml Changez # L25) de localhost à l'adresse IP de l'hôte ou à un FQDN comme foo.bar.com.

Si un autre service est déjà en cours d'exécution sur le port 80 de l'hôte

Mappage de port du conteneur nginx de 80: 80 à héberger gratuitement Port: passez à 80.

4. Démarrez le conteneur Docker

Démarrez le conteneur avec la commande docker-compose ci-dessous.

$ cd /path/to/this/directory
$ docker-compose up

5. Assurez-vous que vous pouvez accéder à Kibana à partir de votre navigateur Web

Si vous n'avez pas modifié docker-compose.yml, depuis le navigateur hôte http: // localhost, Si vous le modifiez, ouvrez http: // host address depuis le navigateur de votre environnement, connectez-vous avec l'ID et le mot de passe définis et vérifiez que vous pouvez voir l'écran Kibana.

6. Enregistrer des exemples de données dans Elasticsearch

Revenez au terminal de la machine hôte et entrez dans le conteneur Python avec la commande suivante:

$ docker exec -it python bash

Après être entré dans le conteneur Python, créez un environnement virtuel (venv) avec la commande suivante et pip installez les packages requis ici:

# python -m venv .venv
# source .venv/bin/activate
(.venv) # pip install -r requirements.txt

Après avoir installé le package, ajoutez les exemples de données à l'index nolan d'Elasticsearch avec la commande suivante:

(.venv) # python index.py
Finished indexing

Le script Python index.py exécuté ici est ici. Ci-dessous, le type de données de la colonne RELEASE_DATE est défini sur «date» et le format est défini sur «aaaaMMjj».


    es.indices.create(
        index,
        body={
            "mappings": {
                "properties": {"RELEASE_DATE": {"type": "date", "format": "yyyyMMdd"}}
            }
        },
    )

7. Confirmez que vous pouvez rechercher sur Kibana

Accédez à nouveau à Kibana à partir de votre navigateur Web et définissez les paramètres suivants:

Créer un modèle d'index

Menu sur le côté gauche de l'écran (s'il n'est pas affiché, cliquez sur les trois en haut à gauche) Sélectionnez Kibana> Modèles d'index à partir de et entrez nolan comme nom de modèle d'index. Si le code Python ci-dessus peut être exécuté sans aucun problème, le message "Votre modèle d'index correspond à 1 source" s'affiche. Cliquez sur Étape suivante:

Screenshot from 2020-09-28 09-20-29.png

Définissez la colonne RELEASE_DATE dans le champ Heure et cliquez sur Créer un modèle d'index.

Screenshot from 2020-09-28 09-20-45.png

Réglez la plage horaire sur il y a environ 11 ans-> maintenant sur l'écran de découverte

Sélectionnez Découvrir dans le menu sur le côté gauche de l'écran, cliquez sur l'icône de calendrier au milieu de l'écran et définissez la plage de temps sur Relative> 11 ans auparavant. (Comme il contient un avis RELEASE_DATE assez ancien, il ne lancera pas la recherche à moins que vous ne le fassiez)

S'il est réglé correctement, vous verrez 4 avis comme ci-dessous:

Screenshot from 2020-09-28 09-18-20.png

Vous pouvez également rechercher des avis incluant «Tom Hardy» sur cet écran de découverte:

Screenshot from 2020-09-28 09-18-48.png

Matériel de référence

Veuillez également vous référer ici pour savoir comment utiliser kibana: https://qiita.com/namutaka/items/b67290e75cbd74cd9a2f

Recommended Posts

Lancez un simple service de recherche protégé par mot de passe en 5 minutes
Ecrire une dichotomie en Python
Écrire une recherche de priorité en profondeur en Python
Implémentation d'un algorithme simple en Python 2
Lancer le script Python en service
Exécutez un algorithme simple en Python
Un client HTTP simple implémenté en Python
Essayez de dessiner une animation simple en Python
Créer une application GUI simple en Python
Ecrire une méthode de cupidité simple en Python
Lancer une application Flask dans Python Anywhere
Ecrire un plugin Vim simple en Python 3
Flask-Créer un service Web avec SQLAlchemy + PostgreSQL
Configurer un serveur HTTPS simple avec Python 3
Créez un environnement Django avec Vagrant en 5 minutes
Notes de programme simples Pub / Sub en Python
Créer un modèle d'investissement dynamique simple en Python
Configurer un serveur SMTP simple en Python
Mettre en œuvre une recherche de visage similaire en une demi-journée
[Docker] Créez un environnement jupyterLab (python) en 3 minutes!
Ecrire un programme de dynamique moléculaire super simple en python
Créez un Slackbot simple avec un bouton interactif en python
Présentation de gae-init pour lancer CMS sur GAE en 5 minutes
Configurez un serveur gratuit sur AWS en 30 minutes
[Procédure simple] Pour vous connecter à ssh sans mot de passe