Vad är OpenSearch och varför vill jag installera det?
OpenSearch är en distribuerad sök- och analysmotor baserad på Apache Lucene.
Den används som ett verktyg för att hjälpa till vid sökningar, analyser och monitorering.
Vissa system som t.ex. Magento, WordPress m.m. kan använda denna för att snabba upp och göra sök mer relevant.
ElasticSearch eller OpenSearch?
Det väljer du själv. OpenSearch är en fork av ElasticSearch 7.10.2, dvs sista versionen innan ElasticSearch ändrade sin licensform.
Var hittar jag mer dokumentation om OpenSearch?
Observera
Den här guiden beskriver hur du kan sätta upp OpenSearch med en reverse proxy framför som hanterar automatiska certifikat och lösenordsinloggning.
Den tar dock ej upp hur man skapar upp ett kluster för OpenSearch, vilket är rekommenderat om man skall köra det i produktion.
Den tar inte heller upp hur man brandväggar i Oderland Cloud om du behöver låsa ned access från t.ex. en IP-adress, t.ex. om du vill begränsa access från en annan Cloud server eller från våra andra tjänster som Managed Server, Agency eller Webbhotell.
Utförande
Vi skapar en server i Oderland Cloud med Docker och pekar ett värdnamn (t.ex. domän eller subdomän) mot serverns nya ip-adress.
Därefter ssh:ar vi in till servern. Sedan skapar vi ett docker nätverk som vi döper till caddy. Det används till de containrar man vill få automatisk TLS (https://).
Vi skapar en mappstruktur samt en docker-compose.yml fil som talar om vilka tjänster som skall köras och hur de skall konfigureras och anger samma värdnamn som vi pekat till servern.
Vi skapar upp ett lösenord med hjälp av Caddy hash-password att använda för basic auth i docker-compose.yml filen.
Sen startar vi upp vår nya docker compose stack och testar att vi får certifikat och ett svar från OpenSearch.
Förberedelser
Skapa först en server i Oderland Cloud med Docker, kika på en av guiderna nedan om du behöver hjälp.
https://www.oderland.se/support/artikel/sa-installerar-du-docker-engine-i-oderland-cloud/
Peka värdnamn (domän eller subdomän)
Peka ett lämpligt värdnamn till serverns ipv4 adress. Du behöver göra det här steget för att vi skall kunna få ut ett TLS certifikat från Letsencrypt automatiskt.
Utöka virtuellt minne och gå med i docker gruppen
SSH:a in till servern.
Vi kommer att köra samtliga kommandon som debian användaren, men behöver använda sudo ibland
Börja med att gå med i docker gruppen och aktivera den för din session.
Vi behöver också utöka vm.max_map_count då OpenSearch annars kan orsaka en del out of memory exceptions.
sudo usermod -aG docker $USER newgrp docker echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.d/opensearch.conf sudo sysctl -p
Skapa Docker nätverk
Skapa sedan ett docker nätverk som vi använder för de containers vi vill proxya via Caddy och automatiskt hantera Let’s Encrypt / Zero SSL för att få säker anslutning.
docker network create caddy
Skapa ett hashat lösenord för Basic Auth till Caddy
Vi använder oss av hash-password från Caddy för att hasha ett lösenord. Kopiera inte nedan rakt av, utan byt ut texten LÖSENORDET till ett bra lösenord som du sedan kommer behöva använda i din applikation för att ansluta till OpenSearch.
Vi ersätter $ mot $$ med sed så att hashen skall fungera i docker-compose.yml, annars tolkas det som variabler.
docker run --rm lucaslorentz/caddy-docker-proxy:ci-alpine hash-password --plaintext LÖSENORDET|sed 's/\$/\$\$/g'
Sätt upp docker-compose.yml filen
Nu skapar vi mappen för docker-compose.yml filen och lägger in texten nedan.
Ersätt HASHED_PASSWORD med lösenordshashen du fick ut ovan.
mkdir -p ~/compose/opensearch cat << EOF > ~/compose/opensearch/docker-compose.yml version: "3.7" services: caddy: image: lucaslorentz/caddy-docker-proxy:ci-alpine ports: - 80:80 - 443:443 environment: - CADDY_INGRESS_NETWORKS=caddy networks: - caddy volumes: - /var/run/docker.sock:/var/run/docker.sock - caddy_data:/data restart: unless-stopped opensearch: image: opensearchproject/opensearch:2.11.1 volumes: - osdata01:/usr/share/opensearch/data environment: - "cluster.name=opensearch-cluster" - "node.name=os-node01" - "discovery.type=single-node" - "bootstrap.memory_lock=true" - "plugins.security.disabled=true" - "OPENSEARCH_JAVA_OPTS=-Xms2G -Xmx2G" labels: caddy: HOSTNAME caddy.reverse_proxy: "{{upstreams 9200}}" caddy.basicauth: /* caddy.basicauth.admin: HASHED_PASSWORD networks: - caddy ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 restart: unless-stopped volumes: osdata01: driver: local caddy_data: driver: local networks: caddy: external: true EOF
Vi sätter också max minnesanvändning för Javamotorn till 2GB ovan. Du kan behöva höja detta samt serverns minne om du har stora index.
Ange ditt värdnamn
Har du pekat ett värdnamn som du vill använda för servern eller för OpenSearch så kan du nu redigera kodsnutten ovan och ändra HOSTNAME till ditt valda värdnamn. Du kan också göra det i efterhand med sed kommandot som vi visar nedan.
I demo-syfte så skapade vi os.oderland.cloud så att vi sedan kan gå mot https:// os.oderland.cloud för att nå OpenSearch. Exemplet ser då ut följande med sed kommandot.
sed -i 's/HOSTNAME/os.oderland.cloud/g' ~/compose/opensearch/docker-compose.yml
Starta upp OpenSearch och Caddy
Starta sedan vår nya docker compose stack.
cd ~/compose/opensearch docker compose up -d
Då hämtas samtliga images/layers och sedan startar tjänsterna upp.
Du kan följa loggen via:
docker compose logs -f
Vanliga frågor
Kan jag använda ElasticPress för WordPress ihop med OpenSearch?
Ja! Du bör dock använda dig av en snippet från deras sajt för att pluginen skall förstå vilken version som används.
När jag ansluter min Magento 2.4.x mot OpenSearch så klagar den på connection?
I skrivande stund (2024-02-15) finns en buggrapport där det beskrivs att Magento förväntar sig att anslutningen sker okrypterat mellan Magento och OpenSearch/ElasticSearch.
Vi rekommenderar naturligtvis inte detta, men tyvärr ligger detta helt på Magento/Adobe att lösa.
Ändra värdnamn
Om du editerar docker-compose.yml filen i efterhand och byter ut till annat värdnamn så behöver du starta om stacken och forcera nya configs via:
docker compose up --force-recreate -d
Hur kan man styra Caddy Proxyn
Läs mer om Caddy proxyn och hur du kan styra via t.ex. paths eller hur du lägger till fler domäner mot samma service.