Ubuntu 22.04’te Meilisearch Nasıl Kurulur ve Yapılandırılır

Giriş

Meilisearch, Rust programlama dilinde yazılmış açık kaynaklı, bağımsız bir arama motorudur.  Diğer popüler arama motorlarıyla karşılaştırıldığında, Meilisearch dağıtımları çok az adım gerektirir ve bir Meilisearch sunucusunu çalıştırabilir ve tek bir komut satırı ikili dosyası kullanarak sorgulayabilirsiniz.  Meilisearch, bulanık eşleştirme ve şemasız indeksleme gibi özelliklere sahiptir ve demo amaçlı bir web ön yüzü içerir.  Daha karmaşık konuşlandırmalar, InstantSearch javascript kitaplığıyla entegrasyonu destekler.

Bu yazıda, Meilisearch’ü ilk olarak Docker kullanarak bir Ubuntu 22.04 sunucusunda deneyerek çalıştıracaksınız.  Onu örnek verilerle dolduracak ve hem komut satırından hem de yerleşik web ön ucundan sorgulayacaksınız.  Ayrıca, arama ağırlığını ve diğer yapılandırma ayrıntılarını nasıl değiştireceğinizi keşfedeceksiniz.  Ardından, kalıcı verileri depolayan ve sunucunuzla birlikte otomatik olarak yeniden başlayan, üretime hazır bir Meilisearch hizmeti kurmak için docker compose’u kullanacaksınız.

Önkoşullar

Bu yazıyı takip etmek için ihtiyacınız olacaklar:

  • Ubuntu 22.04 ilk sunucu kurulum kılavuzu izlenerek kurulan bir Ubuntu 22.04 sunucusu, root olmayan bir sudo kullanıcı ve bir güvenlik duvarı .
  • Docker ve Docker-compose.

Adım 1 — Meilisearch Kurulumu ve Örnek Verileri Yükleme

Meilisearch birçok ortam için kurulum paketleri sağlar. Aktif geliştirme aşamasında olduğundan ve dahili veri yapısı hala güncellenmekte olduğundan, Meilisearch’ü Docker aracılığıyla kurmak iyi bir fikirdir. Bu şekilde, sisteminiz için belirli bir Meilisearch yapılandırmasını sabitleyebilir ve gerektiğinde zarif bir şekilde yükseltebilirsiniz.

Docker Hub’dan en son Meilisearch görüntüsünü (bu yazı itibariyle 0.26.1) çekerek başlayın:

  1. docker pull getmeili/meilisearch:v0.26.1

Artık docker run’a bazı parametreler sağlayarak Meilisearch docker imajını başlatabilirsiniz:

  1. docker run –rm -p 127.0.0.1:7700:7700 getmeili/meilisearch:v0.26.1

Bu komut aşağıdaki şekilde ayrıştırılabilir:

  • docker run –rm uses the --rm flag to ensure the container will clean up after itself when it exits.
  • -p 127.0.0.1:7700:7700 forwards traffic on your server’s localhost interface on port 7700 to Meilisearch’s default port 7700 inside the Docker container, so you can access it as normal. 127.0.0.1 is synonymous with localhost when using IPv4 addresses.
  • getmeili/meilisearch:v0.26.1 runs the image you just downloaded.

Meilisearch’ü çalıştırdığınızda, otomatik olarak bazı yapılandırma ayrıntıları üretecek ve bunları çıktıya dahil edecektir.  ./data.ms Meilisearch dizin dizininin kapsayıcı içinde otomatik olarak oluşturulduğunu unutmayın. Bu öğreticide konumu daha sonra değiştireceksiniz.  Ayrıca, Meilisearch’ün varsayılan olarak bir gerçek yapılandırma ortamı yerine bir geliştirme ortamında çalıştığını unutmayın.

…
[secondary_label Output]
Database path:          "./data.ms"
Server listening on:    "http://0.0.0.0:7700"
Environment:            "development"
Commit SHA:             "unknown"
Commit date:            "unknown"
Package version:        "0.26.1"
…

Artık içinde veri olmayan, çalışan bir Meilisearch örneğiniz var.  Meilisearch ile çalışmaya başlamak için bazı örnek veriler yüklemeniz gerekecek.  meilisearch işlemi çalıştığı sürece başladığı kabuğu bloke edecektir, bu nedenle diğer komutları çalıştırmaya devam etmek için sunucunuza ayrı bir bağlantı açmak isteyeceksiniz.

Meilisearch projesi, TMDB, The Movie Database’den alınan örnek bir JSON biçimli veri seti sağlar.  wget komutunu kullanarak verileri docs.meilisearch.com adresinden indirin:

  1. wget https://docs.meilisearch.com/movies.json

Bu dosyanın içeriğinin bir parçasını görmek için tail komutunu çalıştırabilirsiniz:

Çıktı

…
{"id":"289239","title":"Mostly Ghostly: Have You Met My Ghoulfriend?","poster":"https://image.tmdb.org/t/p/w500/eiVY4kKpbo1f7wyNubgJX5ILpxg.jpg","overview":"Bella Thorne, Madison Pettis and Ryan Ochoa lead an ensemble cast in this spook-tacular adventure with new ghosts, new thrills, and the return of some old friends. Max (Ochoa) only has eyes for Cammy (Thorne), the smart, popular redhead at school. When Max finally scores a date with Cammy on Halloween, Phears, an evil ghost with plans on taking over the world, unleashes his ghouls and things go haywire. With the help of his ghostly pals, Tara and Nicky, can Max thwart Phears' evil plot, help reunite his ghost friends with their long-lost parents and still make his date with Cammy on Halloween? R.L. Stine's Mostly Ghostly: Have You Met My Ghoulfriend? is a frightful family delight!","release_date":1409619600,"genres":["Family","Fantasy","Horror"]},
{"id":"423189","title":"Right Here Right Now","poster":"https://image.tmdb.org/t/p/w500/sCo1excKlzhKas681CTSe1ujcOa.jpg","overview":"Hamburg, St. Pauli, New Year's Eve. Oskar Wrobel runs a music club in an old hospital at the edge of the Reeperbahn. While fireworks go off in the streets of St. Pauli, he prepares the big final party - the club has to close. Thankfully there is no time to think about it because the chaos is breaking into his living room, all while hell break loose at the club. The film, based on the novel by Tino Hanekamp, was filmed with hundreds of extras attending a real-life three-night-long party.","release_date":1530579600,"genres":["Documentary","Music"]},
{"id":"550315","title":"Fireman Sam - Set for Action!","poster":"https://image.tmdb.org/t/p/w500/2atmRsuSA4tX6sbOEgFzquFWcCV.jpg","overview":"","release_date":1538010000,"genres":["Family","Animation"]}
]

Her giriş bir kimlik, bir başlık, bir poster görüntüsüne bir bağlantı, isteğe bağlı olarak filme genel bir bakış, zaman damgası biçiminde bir gösterim tarihi ve türlerin bir listesini içerir.

Bir HTTP POST isteği oluşturmak için curl kullanarak verileri Meilisearch’e yükleyebilirsiniz. curl, komut satırında web istekleri oluşturmak için güçlü ve her yerde bulunan bir araçtır ve HTTP POST, biçimlendirilmiş verileri API uç noktalarına göndermek için kullanılan birkaç yaygın HTTP fiilinden (web tarayıcıları tarafından kullanılan PUT ve GET ile birlikte) biridir.

  1. curl \
  2. -X POST ‘http://localhost:7700/indexes/movies/documents’ \
  3. -H ‘Content-Type: application/json’ \
  4. –data-binary @movies.json

Curl komutunun çeşitli bağımsız değişkenleri şunlardır:

  • -X POST http://url bir POST isteği gerçekleştireceğinizi ve veri göndereceğinizi belirtir.
  • -H 'Content-Type: application/json' Dosya türünü belirten bir  üstbilgisi sağlar.
  • --data-binary @movies.json dosyanın kendisini içerir.
  • Her satırın sonundaki \ karakterleri, bir kabuk komutunu komutun kendisini bölmeden birden çok satıra bölmek istediğinizde standarttır.

Meilisearch varsayılan olarak 7700 numaralı bağlantı noktasında çalışır ve 127.0.0.1 bir localhost IP’sini yansıtır. Bu durumda, /indexes/movies/documents konumunda yeni bir Meilisearch dizini oluşturursunuz ve bir JSON dosyası yükleme isteğinizde gerekli biçimlendirmeyi sağlarsınız. Bu, JSON’u CURL ile yüklemenin standart bir yoludur.

Komut, isteğinizin başarıyla kuyruğa alındığını belirten bir çıktı döndürmelidir. Meilisearch, tüm isteklerin tamamlanmasını beklemek yerine zaman uyumsuz olarak işler.

Çıktı
{"uid":0,"indexUid":"movies","status":"enqueued","type":"documentAddition","enqueuedAt":"2022-03-09T17:23:18.233702815Z"}

Aynı dizinde oluşturulan yeni /tasks/ uç noktasına bir curl -X GET isteği gerçekleştirerek bu isteğin durumunu denetleyebilirsiniz. Bu veriler çok hızlı bir şekilde işlenmelidir, bu nedenle yanıt finishedAt parametresini içermelidir:

  1. curl -X GET ‘http://localhost:7700/indexes/movies/tasks/0’
Çıktı
{"uid":0,"indexUid":"movies","status":"succeeded","type":"documentAddition","details":{"receivedDocuments":19547,"indexedDocuments":19546},"duration":"PT29.866920116S","enqueuedAt":"2022-03-09T17:23:18.233702815Z","startedAt":"2022-03-09T17:23:18.241475424Z","finishedAt":"2022-03-09T17:23:48.108395540Z"}

Artık örnek verilerle doldurulmuş bir Meilisearch dizininiz var. Bir sonraki adımda, verileri keşfetmek için bazı örnek sorgular deneyeceksiniz.

Adım 2 – Meilisearch ile Arama

Meilisearch dizininde arama yapmak için, API aracılığıyla tek tek sorgular gönderebilir veya bir web arayüzü ile arama yapabilirsiniz.

API üzerinden arama yapmak, HTTP POST’lar aracılığıyla veri yüklemeye benzer şekilde çalışır. Arama yapmak için /search uç noktasına bir istekte bulunursunuz ve tüm sorgu JSON’unuzu komut satırına ekleyebilirsiniz. Aşağıdaki curl komutunu kullanarak hangi filmlerin döndürüldüğünü görmek için saint araması yapmayı deneyin:

  1. curl \
  2. -X POST ‘http://localhost:7700/indexes/movies/search’ \
  3. -H ‘Content-Type: application/json’ \
  4. –data-binary ‘{ “q”: “saint” }’

İsabetlerin listesini içeren bir JSON nesnesi döndürür:

Çıktı
{
  "hits": [
    {
      "id": "45756",
      "title": "Saint",
      "poster": "https://image.tmdb.org/t/p/w500/pEPd4mgMwvz6aRhuWkmPUv98P1O.jpg",
      "overview": "A horror film that depicts St. Nicholas as a murderous bishop who kidnaps and murders children when there is a full moon on December 5.",
      "release_date": 1288486800,
      "genres": []
    },
    {
      "id": "121576",
      "title": "Saint Philip Neri I Prefer Heaven",
      "poster": "https://image.tmdb.org/t/p/w500/z9OsQoM343WsIrP0zMEE06pO1vH.jpg",
      "overview": "An epic feature film on the famous 'Apostle of Rome' and great friend of youth in the 16th century. One of the most popular saints of all time, St. Philip Neri was widely known for his great charity, deep prayer life, and tremendous humor. Hoping to join St. Ignatius of Loyola's new order of Jesuits and be a missionary to India, Philip was instead guided by Providence to seek out the poor and abandoned youth of Rome to catechize them in the faith and help them find a better life. He became the founder of the religious congregation, the Oratory, that worked with the youth and also labored to re-evangelize a decadent Rome.",
      "release_date": 1284944400,
      "genres": [
        "Drama"
      ]
    },
    {
      "id": "221667",
      "title": "Saint Laurent",
      "poster": "https://image.tmdb.org/t/p/w500/ekpT7mTk4t5PjRYZfiyh0sTKpY5.jpg",
      "overview": "1967-1976. As one of history's greatest fashion designers entered a decade of freedom, neither came out of it in one piece.",
      "release_date": 1411434000,
      "genres": [
        "Drama"
      ]
    },
...

Not: Daha okunabilir komut satırı JSON biçimlendirmesi elde etmek için sudo apt install jq kullanarak jq adlı başka bir araç yükleyebilirsiniz. Ardından, Meilisearch JSON çıktısını jq üzerinden geçirmek için kabuk borularını kullanın, | jq komutuna.

Örneğin, yalnızca örnek aziz sorgusunun başlıklarını listelemek için jq’yu yükleyin ve ardından aşağıdaki komutu çalıştırın:

  1. curl \
  2. -X POST ‘http://localhost:7700/indexes/movies/search’ \
  3. -H ‘Content-Type: application/json’ \
  4. –data-binary ‘{ “q”: “saint” }’ | jq -r ‘.hits [] .title’

Bunun gibi başlıkların bir listesini alacaksınız:

[secondary_label Output
Saint
Saint Philip Neri I Prefer Heaven
Saint Laurent
. . .

Meilisearch’ün bulanık eşleştirme işlevini göstermek için, bir kullanıcının yazım hatası yapmış olabileceği varsayımıyla seint araması yapmayı da deneyebilirsiniz:

  1. curl \
  2. -X POST ‘http://localhost:7700/indexes/movies/search’ \
  3. -H ‘Content-Type: application/json’ \
  4. –data-binary ‘{ “q”: “seint” }’

Sonuçlar, sorgu sıralamasının özellikleri nedeniyle biraz farklı olacaktır, ancak yine de “aziz” içeren birçok giriş göreceksiniz.

Çıktı
{
  "hits": [
    {
      "id": "10105",
      "title": "Saints and Soldiers",
      "poster": "https://image.tmdb.org/t/p/w500/efhqxap8fLi4v1GEXVvakey0z3S.jpg",
      "overview": "Five American soldiers fighting in Europe during World War II struggle to return to Allied territory after being separated from U.S. forces during the historic Malmedy Massacre.",
      "release_date": 1063242000,
      "genres": [
        "War",
        "Action",
        "Drama"
      ]
    },
    {
      "id": "121576",
      "title": "Saint Philip Neri I Prefer Heaven",
      "poster": "https://image.tmdb.org/t/p/w500/z9OsQoM343WsIrP0zMEE06pO1vH.jpg",
      "overview": "An epic feature film on the famous 'Apostle of Rome' and great friend of youth in the 16th century. One of the most popular saints of all time, St. Philip Neri was widely known for his great charity, deep prayer life, and tremendous humor. Hoping to join St. Ignatius of Loyola's new order of Jesuits and be a missionary to India, Philip was instead guided by Providence to seek out the poor and abandoned youth of Rome to catechize them in the faith and help them find a better life. He became the founder of the religious congregation, the Oratory, that worked with the youth and also labored to re-evangelize a decadent Rome.",
      "release_date": 1284944400,
      "genres": [
        "Drama"
      ]
    },
    {
      "id": "133558",
      "title": "Saints and Soldiers: Airborne Creed",
      "poster": "https://image.tmdb.org/t/p/w500/gwqR9UY0xqBZwP2qb8ZPmf9b2lq.jpg",
      "overview": "A group of American GIs work their way through war-torn France during the final days of the Second World War.",
      "release_date": 1345165200,
      "genres": [
        "Drama"
      ]
    },
…

Artık komut satırı aramasını denediğinize göre, Meilisearch’ü yerel bir makinede çalıştırıyorsanız, web kullanıcı arabirimini görüntülemek için bir tarayıcıda http://localhost:7700/ gidebilirsiniz. Uzak bir sunucuda çalışıyorsanız ve bu öğreticinin önkoşullarını izlediyseniz, güvenlik duvarı yapılandırmanız bu URL’ye erişilebilmesini engeller. Arama arayüzüne erişmek için bir SSH tüneli oluşturmanız gerekir. Yerel makinenizden sunucunuza bir tünel oluşturmak için ssh’yi -L bayrağıyla çalıştırın. Uzak sunucunuzun IP adresiyle birlikte 7700 numaralı bağlantı noktasını sağlayın:

  1. ssh -L 7700:127.0.0.1:7700 sammy@your_server_ip

Daha sonra  http://localhost:7700 yazarak bir tarayıcıdan erişebilmeniz gerekir.

Searching for the word saint in the Meilisearch Web UI

Meilisearch demo arayüzünde arama yapmak son derece hızlıdır ve üretim kullanımının heyecan verici bir önizlemesini sağlamalıdır. Bir sonraki adımda, belirli parametreleri diğerlerine göre önyargılı hale getirmek için arama sıralamasını ve filtrelemeyi ayarlamaya yönelik örnekler bulacaksınız.

Adım 3 – Arama Sıralamasını ve Filtrelemeyi Ayarlama

Arama motorlarının önemli bir özelliği, hepsinin farklı alanların önemini ağırlıklandırmak için bazı yöntemler uygulamasıdır. Bu ağırlıklandırma için başka bir terim önyargıdır. Örneğin, arama dizininizde birden çok alan bulunduğunu ve tek bir sözcük sorgusuyla arama yaptığınızı varsayalım. Arama motorunun, bir alanın önemine bağlı olarak sonuçlarını nasıl sıralayacağına veya önyargılı hale getireceğine dair talimatlara ihtiyacı vardır.

Bazı açık kaynaklı arama motorları, önyargıyı yapılandırmanıza izin vermez ve sorgu sonuçları, arama terimi alaka düzeyinden daha fazla verilerdeki eğilimler tarafından yararsız bir şekilde geniş veya çarpık olabilir. Meilisearch, daha fazla yapılandırabileceğiniz varsayılan bir önyargı kuralları kümesine sahiptir. Bu özelleştirilebilirlik, verilerinizin ayrıntılarına göre daha sezgisel ve alakalı sonuçlar elde etmenize yardımcı olabilir.

Derecelendirme kurallarınızı denetlemek için /settings/ranking-rules uç noktasına curl komutunu kullanarak bir HTTP GET isteğinde bulunabilirsiniz:

  1. curl -X GET ‘http://localhost:7700/indexes/movies/settings/ranking-rules’
Çıktı
["words","typo","proximity","attribute","sort","exactness"]

Bu kurallar Meilisearch belgelerinde daha ayrıntılı olarak açıklanmaktadır. Temel olarak, Meilisearch’ün yaygın yazım hatalarını çözmeye öncelik verme yöntemlerini, kelime öbeklerindeki kelimelerin yakınlığına öncelik vermeye karşı ince ayar yapmanıza olanak tanır.

Öncelik sırasını değiştirmek için yeniden düzenlenmiş aynı kural kümesiyle bu uç noktaya kıvrılma içeren bir HTTP POST isteği gönderebilirsiniz. Veri kümeniz nicel alanlar içeriyorsa, bu alanları artan veya azalan düzende önyargılı hale getirecek derecelendirme kuralları da ekleyebilirsiniz. Bu veri kümesinde, aşağıdaki gibi ekleyebileceğiniz böyle bir alan release_date:

    1. curl \
    2. -X POST ‘http://localhost:7700/indexes/movies/settings/ranking-rules’ \
    3. -H ‘Content-Type: application/json’ \
    4. –data-binary ‘[
  • “words”,
  • “typo”,
  • “proximity”,
  • “release_date:asc”,
  • “attribute”,
  • “sort”,
  • “exactness”,
  • “rank:desc”
  1. ]’

Bu istek, movies.json dosyasını yüklemek için kullandığınız ilk HTTP POST’a benzer şekilde kuyruğa alınmış bir yanıt döndürür:

Çıktı
{"uid":1,"indexUid":"meteorites","status":"enqueued","type":"settingsUpdate","enqueuedAt":"2022-03-10T21:36:47.592902987Z"}

Meilisearch, aynı HTTP GET ve HTTP POST yaklaşımını kullanarak hangi özniteliklerin aranabilir olduğunu, sonuçlarda hangi özniteliklerin görüntülendiğini ve hangi özniteliklerin filtrelenebileceğini veya sıralanabileceğini açıklayan kuralları sorgulamanıza ve güncellemenize olanak tanır.

Örneğin, ilk etapta yalnızca belirli özniteliklerin aranabilir olmasını ve diğerlerinin (büyük olasılıkla son kullanıcı için hiçbir değeri olmayan id gibi) sonuçlardan hariç tutulmasını istiyorsanız, ayarlar uç noktasına searchableAttributes JSON listesini GÖNDEREBİLİRSİNİZ:

    1. curl \
    2. -X POST ‘http://localhost:7700/indexes/movies/settings’ \
    3. -H ‘Content-Type: application/json’ \
    4. –data-binary ‘{
  • “searchableAttributes”: [
  • “title”,
  • “overview”,
  • “genres”
  • ]
  1. }’

Artık yalnızca başlık, genel bakış ve türler alanlarında arama yapılabilir ve geri kalanlar dizin oluşturma işleminin dışında tutulur.

Ayrıca, görüntülenen Özniteliklerin bir listesini GÖNDEREREK arama sonuçlarında görüntülenen veya gizlenen öznitelikleri değiştirebilirsiniz:

    1. curl \
    2. -X POST ‘http://localhost:7700/indexes/movies/settings’ \
    3. -H ‘Content-Type: application/json’ \
    4. –data-binary ‘{
  • “displayedAttributes”: [
  • “title”,
  • “overview”,
  • “genres”,
  • “release_date”
  • ]
  1. }’

Artık bir filmin tüm alanları, görüntülenenÖznitelikler listesine ekledikleriniz dışında gizlidir.

Son olarak, verilerinizin filtrelenecek veya sıralanacak özniteliklerinin bir listesini de sağlayabilirsiniz. Bu liste, karşılaştırmalı işleçlerin kullanımı yoluyla nicel filtrelemeyi (örneğin, büyüktür için > veya daha küçük için < gibi) hem de çok yönlü arama olarak da bilinen belirli bir kümeye dahil edilerek filtrelemeyi içerir.

    1. curl \
    2. -X POST ‘http://localhost:7700/indexes/movies/settings’ \
    3. -H ‘Content-Type: application/json’ \
    4. –data-binary ‘{
  • “filterableAttributes”: [
  • “genres”,
  • “release_date”
  • ],
  • “sortableAttributes”: [
  • “release_date”
  • ]
  1. }’

Bu kurallar birlikte, aşağıdaki gibi sorgular oluşturmanıza olanak tanır:

  1. curl \
  2. -X POST ‘http://localhost:7700/indexes/movies/search’ \
  3. -H ‘Content-Type: application/json’ \
  4. –data-binary ‘{ “q”: “house”, “sort”: [“release_date:desc”], “filter”: “genres = Horror” }’

Bu sorgu, yazılı ifadenin eşdeğeridir: “başlıkta ‘ev’ kelimesini de içeren, en yeniden en eskiye kadar Korku türüne sahip tüm filmleri bulun”. Aşağıdaki gibi çıktı alacaksınız:

Çıktı
{
  "hits": [
    {
      "id": "82505",
      "title": "House at the End of the Street",
      "poster": "https://image.tmdb.org/t/p/w500/t9E3Inaar1CAn5Cwj0M8dTwtD8H.jpg",
      "overview": "A mother and daughter move to a new town and find themselves living next door to a house where a young girl murdered her parents. When the daughter befriends the surviving son, she learns the story is far from over.",
      "release_date": 1348189200,
      "genres": [
        "Horror",
        "Thriller"
      ]
    },
    {
      "id": "29293",
      "title": "House of the Dead 2",
      "poster": "https://image.tmdb.org/t/p/w500/r95UYIFeCjIVKZ1MPxZwEHITAhg.jpg",
      "overview": "In Guesta Verde University, the deranged Professor Curien is trying to bring back the dead, killing students for the experiment. There is an outbreak of zombies in the campus, and the government sends a NSA medical research team, formed by Dr. Alexandra Morgan a.k.a. Nightingale and lieutenant Ellis, with a special force leaded by lieutenant Dalton, trying to get the zero sample from the first generation zombie. The team has a very short time to accomplish their mission and leave the place before missiles are sent to destroy the area. However, the place is crowded of hyper sapiens and the group has to fight to survive.",
      "release_date": 1139616000,
      "genres": [
        "TV Movie",
        "Horror"
      ]
    },
    {
      "id": "10066",
      "title": "House of Wax",
      "poster": "https://image.tmdb.org/t/p/w500/r0v8qg78Ol9NIsRGe3DME27ORpd.jpg",
      "overview": "A group of unwitting teens are stranded near a strange wax museum and soon must fight to survive and keep from becoming the next exhibit.",
      "release_date": 1114822800,
      "genres": [
        "Horror",
        "Drama"
      ]
    },
…

Belgeleri dizine ekleme, arama ve görüntülemede alanları dahil etmek ve hariç tutmak, belge tabanlı arama motorlarının temel özellikleridir. Bunları koşullu olarak etkinleştirmek, hem arama performansını korumanıza hem de arama motorunuzu son kullanıcılara uyacak şekilde hızlı ve kapsamlı bir şekilde özelleştirmenize olanak tanır.

Meilisearch’ün nasıl çalıştırılacağını, sorgulanacağını ve yapılandırılacağını keşfettiğinize göre, bu öğreticinin bir sonraki adımında, Meilisearch için güvenli bir kimlik doğrulama anahtarıyla arka planda çalışmasına izin verecek bir docker-compose yapılandırması oluşturacaksınız.

Adım 4 – Docker-Compose Yapılandırması Oluşturma ve Anahtar Tabanlı Kimlik Doğrulaması Kullanma

Diğer tüm sunucu tarafı uygulamaları gibi, Meilisearch dizininin son kullanıcıları da her zaman çalışacağını ve kullanılabilir olacağını varsaymalıdır. Meilisearch’ün sunucunuzla düzenli olarak yeniden başlatılabildiğinden ve günlüklerinin izlenebildiğinden emin olmak için, otomatik olarak yönetilmesini sağlayacak bir docker-compose yapılandırması oluşturmanız gerekir.

İlk olarak, Meilisearch’ün arama dizinini ve diğer yapılandırma ayrıntılarını kalıcı olarak depolaması için kullanılabilecek /var/local dizininde bir dizin oluşturun:

  1. sudo mkdir /var/local/meilisearch

Bundan sonra, mevcut çalışma ortamınızda Meilisearch için bir Docker yapılandırmasını depolamak için kullanılacak meilisearch-docker adlı bir dizin oluşturun ve ardından bu dizine cd ekleyin:

  1. mkdir ~/meilisearch-docker
  2. cd ~/meilisearch-docker

Ardından, nano veya favori metin düzenleyicinizi kullanarak docker-compose.yml adlı bir dosya açın:

  1. nano docker-compose.yml

Aşağıdaki içeriği dosyaya kopyalayın. Bu, Meilisearch Docker yapılandırmanız olacaktır.

docker-compose.yml
version: "3.9"
services:
  meilisearch:
    image: "getmeili/meilisearch:v0.26.1"
    restart: unless-stopped
    ports:
      - "127.0.0.1:7700:7700"
    volumes:
      - /var/local/meilisearch:/data.ms
    env_file:
      - ./meilisearch.env

Dosyayı kaydedin ve kapatın. Nano kullanıyorsanız, Ctrl + X tuşlarına basın, ardından istendiğinde, Y ve ardından ENTER tuşuna basın.

Bu dosyada kullanılan ayarlar, birkaç eklemeyle birlikte bu öğreticide daha önce çalıştırdığınız özgün docker sözdizimine benzer:

  • restart:unless-stopped Bu hizmetin arka planda çalışmaya devam edeceği ve el ile durdurmadığınız sürece yeniden başlatmalar boyunca devam edeceği anlamına gelir.
  • Meilisearch dizininiz artık kalıcıdır ve yerel makinenizdeki /var/local/meilisearch dizininde saklanır.
  • env_file Meilisearch seçeneklerini yapılandırmak için ./meilisearch.env ortam dosyasını bildirir.

Ortam değişkenleri, yapılandırmanızı çalışma zamanında etkili bir şekilde bildirmek için meilisearch’ü ek seçeneklerle çalıştırmanıza olanak tanır. Ortam değişkenlerini kullanmak, uygulamaya özgü bir yapılandırma dosyasını düzenlemeye gerek kalmadan uygulama parametrelerini yapılandırmanın tutarlı, sistem genelinde bir yoludur. docker-compose, ana docker-compse.yml yapılandırmasına herhangi bir gizli bilgi eklemek zorunda kalmamak için ortam değişkenlerini ayrı bir dosyada bildirmenize olanak tanır.

Meilisearch’ü üretim modunda çalıştırmak için, güvenli kullanım için bir API anahtarı yapılandırmanız gerekir. Kendi anahtarınızı oluşturabilir veya aşağıdaki openssl komutunu kullanarak bir anahtar oluşturabilirsiniz:

  1. openssl rand -hex 30
Çıktı
173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be

Bu anahtarı güvenli bir yerde not edin. Son olarak, nano veya favori metin düzenleyicinizi tekrar kullanarak, meilisearch.env adlı yeni dosyayı açın:

  1. nano meilisearch.env

Anahtarınızı dosyaya MEILI_MASTER_KEY ortam değişkeni olarak yapıştırın:

meilisearch.env
MEILI_MASTER_KEY="173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be"

Dosyayı kaydedin ve kapatın. Meilisearch’ün başka bir kabukta çalışan bir örneğine hala sahipseniz, şimdi bu terminal penceresine geri dönüp Ctrl + C tuşlarına basarak onu kapatmalısınız. Artık yeni Meilisearch Docker örneğini arka planda çalıştırmak için docker-compose up with –detach komutunu kullanarak açabilirsiniz:

  1. docker compose up –detach

docker ps kullanarak başarıyla başlatıldığını doğrulayabilirsiniz:

  1. docker compose ps
Çıktı
              Name                            Command               State                Ports
------------------------------------------------------------------------------------------------------------
meilisearch-docker_meilisearch_1   tini -- /bin/sh -c ./meili ...   Up     127.0.0.1:7700->7700/tcp

Şu andan itibaren, Meilisearch sunucu yeniden başlatmalarında otomatik olarak yeniden başlatılacaktır. Gerekirse, ~/docker-meilisearch dizinine geri dönüp docker compose stop komutunu çalıştırarak Docker kapsayıcısını durdurabilirsiniz.

Bu docker-compose yapılandırması, örnek verilerle çalışmaya devam etmek için yeniden doldurmanız gereken yeni, boş bir arama dizini de oluşturur. Mevcut dizininizle oluşturduğunuz herhangi bir kuralı taşımanız gerekiyorsa Meilisearch yükseltme belgelerini takip edebilirsiniz.

Meilisearch bulut sunucunuz artık ek bir kimlik doğrulaması gerektiren anahtar tabanlı kimlik doğrulaması da kullanıyor. -H 'Authorization: Bearer 173e95f077590ed33dad89247247be8d8ce8b6722ccc87829aaefe3207be' Her API isteğine eklenecek üstbilgi. Gerekirse, daha ayrıntılı izin düzeylerine sahip birden çok kimlik doğrulama anahtarı oluşturmak için Meilisearch kimlik doğrulama belgelerini gözden geçirebilirsiniz.

 

 

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.