mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2026-05-13 12:15:03 +00:00
tools.func: add new function - setup_meilisearch (#11258)
This commit is contained in:
committed by
GitHub
parent
279e33c3a5
commit
ddd0164c54
+140
@@ -5125,6 +5125,146 @@ function setup_ruby() {
|
|||||||
msg_ok "Setup Ruby $RUBY_VERSION"
|
msg_ok "Setup Ruby $RUBY_VERSION"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Installs or updates MeiliSearch search engine.
|
||||||
|
#
|
||||||
|
# Description:
|
||||||
|
# - Fresh install: Downloads binary, creates config/service, starts
|
||||||
|
# - Update: Checks for new release, updates binary if available
|
||||||
|
# - Waits for service to be ready before returning
|
||||||
|
# - Exports API keys for use by caller
|
||||||
|
#
|
||||||
|
# Variables:
|
||||||
|
# MEILISEARCH_BIND - Bind address (default: 127.0.0.1:7700)
|
||||||
|
# MEILISEARCH_ENV - Environment: production/development (default: production)
|
||||||
|
# MEILISEARCH_DB_PATH - Database path (default: /var/lib/meilisearch/data)
|
||||||
|
#
|
||||||
|
# Exports:
|
||||||
|
# MEILISEARCH_MASTER_KEY - The master key for admin access
|
||||||
|
# MEILISEARCH_API_KEY - The default search API key
|
||||||
|
# MEILISEARCH_API_KEY_UID - The UID of the default API key
|
||||||
|
#
|
||||||
|
# Example (install script):
|
||||||
|
# setup_meilisearch
|
||||||
|
#
|
||||||
|
# Example (CT update_script):
|
||||||
|
# setup_meilisearch
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function setup_meilisearch() {
|
||||||
|
local MEILISEARCH_BIND="${MEILISEARCH_BIND:-127.0.0.1:7700}"
|
||||||
|
local MEILISEARCH_ENV="${MEILISEARCH_ENV:-production}"
|
||||||
|
local MEILISEARCH_DB_PATH="${MEILISEARCH_DB_PATH:-/var/lib/meilisearch/data}"
|
||||||
|
local MEILISEARCH_DUMP_DIR="${MEILISEARCH_DUMP_DIR:-/var/lib/meilisearch/dumps}"
|
||||||
|
local MEILISEARCH_SNAPSHOT_DIR="${MEILISEARCH_SNAPSHOT_DIR:-/var/lib/meilisearch/snapshots}"
|
||||||
|
|
||||||
|
# Get bind address for health checks
|
||||||
|
local MEILISEARCH_HOST="${MEILISEARCH_BIND%%:*}"
|
||||||
|
local MEILISEARCH_PORT="${MEILISEARCH_BIND##*:}"
|
||||||
|
[[ "$MEILISEARCH_HOST" == "0.0.0.0" ]] && MEILISEARCH_HOST="127.0.0.1"
|
||||||
|
|
||||||
|
# Update mode: MeiliSearch already installed
|
||||||
|
if [[ -f /usr/bin/meilisearch ]]; then
|
||||||
|
if check_for_gh_release "meilisearch" "meilisearch/meilisearch"; then
|
||||||
|
msg_info "Updating MeiliSearch"
|
||||||
|
systemctl stop meilisearch
|
||||||
|
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary"
|
||||||
|
systemctl start meilisearch
|
||||||
|
msg_ok "Updated MeiliSearch"
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fresh install
|
||||||
|
msg_info "Setup MeiliSearch"
|
||||||
|
|
||||||
|
# Install binary
|
||||||
|
fetch_and_deploy_gh_release "meilisearch" "meilisearch/meilisearch" "binary" || {
|
||||||
|
msg_error "Failed to install MeiliSearch binary"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Download default config
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml -o /etc/meilisearch.toml || {
|
||||||
|
msg_error "Failed to download MeiliSearch config"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Generate master key
|
||||||
|
MEILISEARCH_MASTER_KEY=$(openssl rand -base64 12)
|
||||||
|
export MEILISEARCH_MASTER_KEY
|
||||||
|
|
||||||
|
# Configure
|
||||||
|
sed -i \
|
||||||
|
-e "s|^env =.*|env = \"${MEILISEARCH_ENV}\"|" \
|
||||||
|
-e "s|^# master_key =.*|master_key = \"${MEILISEARCH_MASTER_KEY}\"|" \
|
||||||
|
-e "s|^db_path =.*|db_path = \"${MEILISEARCH_DB_PATH}\"|" \
|
||||||
|
-e "s|^dump_dir =.*|dump_dir = \"${MEILISEARCH_DUMP_DIR}\"|" \
|
||||||
|
-e "s|^snapshot_dir =.*|snapshot_dir = \"${MEILISEARCH_SNAPSHOT_DIR}\"|" \
|
||||||
|
-e 's|^# no_analytics = true|no_analytics = true|' \
|
||||||
|
-e "s|^http_addr =.*|http_addr = \"${MEILISEARCH_BIND}\"|" \
|
||||||
|
/etc/meilisearch.toml
|
||||||
|
|
||||||
|
# Create data directories
|
||||||
|
mkdir -p "${MEILISEARCH_DB_PATH}" "${MEILISEARCH_DUMP_DIR}" "${MEILISEARCH_SNAPSHOT_DIR}"
|
||||||
|
|
||||||
|
# Create systemd service
|
||||||
|
cat <<EOF >/etc/systemd/system/meilisearch.service
|
||||||
|
[Unit]
|
||||||
|
Description=Meilisearch
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
ExecStart=/usr/bin/meilisearch --config-file-path /etc/meilisearch.toml
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Enable and start service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl enable -q --now meilisearch
|
||||||
|
|
||||||
|
# Wait for MeiliSearch to be ready (up to 30 seconds)
|
||||||
|
for i in {1..30}; do
|
||||||
|
if curl -s -o /dev/null -w "%{http_code}" "http://${MEILISEARCH_HOST}:${MEILISEARCH_PORT}/health" 2>/dev/null | grep -q "200"; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
# Verify service is running
|
||||||
|
if ! systemctl is-active --quiet meilisearch; then
|
||||||
|
msg_error "MeiliSearch service failed to start"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get API keys with retry logic
|
||||||
|
MEILISEARCH_API_KEY=""
|
||||||
|
for i in {1..10}; do
|
||||||
|
MEILISEARCH_API_KEY=$(curl -s -X GET "http://${MEILISEARCH_HOST}:${MEILISEARCH_PORT}/keys" \
|
||||||
|
-H "Authorization: Bearer ${MEILISEARCH_MASTER_KEY}" 2>/dev/null | \
|
||||||
|
grep -o '"key":"[^"]*"' | head -n 1 | sed 's/"key":"//;s/"//') || true
|
||||||
|
[[ -n "$MEILISEARCH_API_KEY" ]] && break
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
MEILISEARCH_API_KEY_UID=$(curl -s -X GET "http://${MEILISEARCH_HOST}:${MEILISEARCH_PORT}/keys" \
|
||||||
|
-H "Authorization: Bearer ${MEILISEARCH_MASTER_KEY}" 2>/dev/null | \
|
||||||
|
grep -o '"uid":"[^"]*"' | head -n 1 | sed 's/"uid":"//;s/"//') || true
|
||||||
|
|
||||||
|
export MEILISEARCH_API_KEY
|
||||||
|
export MEILISEARCH_API_KEY_UID
|
||||||
|
|
||||||
|
# Cache version
|
||||||
|
local MEILISEARCH_VERSION
|
||||||
|
MEILISEARCH_VERSION=$(/usr/bin/meilisearch --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1) || true
|
||||||
|
cache_installed_version "meilisearch" "${MEILISEARCH_VERSION:-unknown}"
|
||||||
|
|
||||||
|
msg_ok "Setup MeiliSearch ${MEILISEARCH_VERSION:-}"
|
||||||
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
# Installs or upgrades ClickHouse database server.
|
# Installs or upgrades ClickHouse database server.
|
||||||
#
|
#
|
||||||
|
|||||||
Reference in New Issue
Block a user